Browse Source

Merge pull request #254 from pedrobaeza/8.0-base_location_geonames_import-test_imp

[IMP] base_location_geonames_import: Make tests more efficient
pull/177/head
Pedro M. Baeza 9 years ago
parent
commit
cfe64d898b
  1. 34
      base_location_geonames_import/__openerp__.py
  2. 54
      base_location_geonames_import/test/import.yml
  3. 4
      base_location_geonames_import/tests/__init__.py
  4. 45
      base_location_geonames_import/tests/test_base_location_geonames_import.py
  5. 44
      base_location_geonames_import/wizard/geonames_import.py

34
base_location_geonames_import/__openerp__.py

@ -1,32 +1,13 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Base Location Geonames Import module for OpenERP
# Copyright (C) 2014 Akretion (http://www.akretion.com)
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# Copyright (C) 2014 Agile Business Group (http://www.agilebg.com)
# @author Lorenzo Battistini <lorenzo.battistini@agilebg.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
# © 2014 Alexis de Lattre <alexis.delattre@akretion.com>
# © 2014 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
# © 2016 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Base Location Geonames Import',
'version': '8.0.0.3.0',
'category': 'Extra Tools',
'version': '8.0.1.0.0',
'category': 'Partner Management',
'license': 'AGPL-3',
'summary': 'Import better zip entries from Geonames',
'author': 'Akretion,'
@ -40,8 +21,5 @@
'data': [
'wizard/geonames_import_view.xml',
],
'test': [
'test/import.yml'
],
'installable': True
}

54
base_location_geonames_import/test/import.yml

@ -1,54 +0,0 @@
-
I create the wizard
-
!record {model: better.zip.geonames.import, id: import_wizard_1, view: better_zip_geonames_import_form}:
country_id: base.it
-
I run the import
-
!python {model: better.zip.geonames.import}: |
self.run_import(cr, uid, [ref('import_wizard_1')], context=context)
-
I check the data
-
!python {model: res.better.zip}: |
state_obj = self.pool['res.country.state']
state_ids = state_obj.search(cr, uid, [
('code', '=', 'LG'),
('country_id', '=', ref('base.it')),
], context=context)
assert len(state_ids) == 1, "There must be 1 LG"
zip_ids = self.search(cr, uid, [
('name', '=', '16017'),
('city', '=', 'Isola Del Cantone'),
('state_id', '=', state_ids[0]),
('country_id', '=', ref('base.it'))
], context=context)
assert len(zip_ids) == 1, "There must be 1 'Isola Del Cantone'"
-
I create the wizard again
-
!record {model: better.zip.geonames.import, id: import_wizard_2, view: better_zip_geonames_import_form}:
country_id: base.it
-
I run the import again
-
!python {model: better.zip.geonames.import}: |
self.run_import(cr, uid, [ref('import_wizard_2')], context=context)
-
I check the data
-
!python {model: res.better.zip}: |
state_obj = self.pool['res.country.state']
state_ids = state_obj.search(cr, uid, [
('code', '=', 'LG'),
('country_id', '=', ref('base.it')),
], context=context)
assert len(state_ids) == 1, "There must be 1 LG"
zip_ids = self.search(cr, uid, [
('name', '=', '16017'),
('city', '=', 'Isola Del Cantone'),
('state_id', '=', state_ids[0]),
('country_id', '=', ref('base.it'))
], context=context)
assert len(zip_ids) == 1, "There must be 1 'Isola Del Cantone'"

4
base_location_geonames_import/tests/__init__.py

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import test_base_location_geonames_import

45
base_location_geonames_import/tests/test_base_location_geonames_import.py

@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
# © 2016 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp.tests import common
class TestBaseLocationGeonamesImport(common.TransactionCase):
def setUp(self):
super(TestBaseLocationGeonamesImport, self).setUp()
self.country = self.env.ref('base.mc')
self.wizard = self.env['better.zip.geonames.import'].create({
'country_id': self.country.id,
})
def test_import_country(self):
self.wizard.with_context(max_import=10).run_import()
state_domain = [
('code', '=', '01'),
('country_id', '=', self.country.id)
]
states = self.env['res.country.state'].search(state_domain)
self.assertEqual(len(states), 1)
zip_domain = [
('name', '=', '98000'),
('city', '=', 'Ciappaira'),
('state_id', '=', states[0].id),
('country_id', '=', self.country.id),
]
zips = self.env['res.better.zip'].search(zip_domain)
self.assertEqual(len(zips), 1)
# Reimport again to see that there's no duplicates
self.wizard.with_context(max_import=10).run_import()
states = self.env['res.country.state'].search(state_domain)
self.assertEqual(len(states), 1)
zips = self.env['res.better.zip'].search(zip_domain)
self.assertEqual(len(zips), 1)
def test_delete_old_entries(self):
zip_entry = self.env['res.better.zip'].create({
'city': 'Test city',
'country_id': self.country.id,
})
self.wizard.run_import()
self.assertFalse(zip_entry.exists())

44
base_location_geonames_import/wizard/geonames_import.py

@ -1,26 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Base Location Geonames Import module for OpenERP
# Copyright (C) 2014 Akretion (http://www.akretion.com)
# @author Alexis de Lattre <alexis.delattre@akretion.com>
# Copyright (C) 2014 Agile Business Group (http://www.agilebg.com)
# @author Lorenzo Battistini <lorenzo.battistini@agilebg.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
# © 2014 Alexis de Lattre <alexis.delattre@akretion.com>
# © 2014 Lorenzo Battistini <lorenzo.battistini@agilebg.com>
# © 2016 Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import models, fields, api, _
from openerp.exceptions import Warning
@ -120,8 +102,9 @@ class BetterZipGeonamesImport(models.TransientModel):
'country_id': country.id
})
@api.one
@api.multi
def run_import(self):
self.ensure_one()
zip_model = self.env['res.better.zip']
country_code = self.country_id.code
config_url = self.env['ir.config_parameter'].get_param(
@ -144,13 +127,16 @@ class BetterZipGeonamesImport(models.TransientModel):
data_file = open(os.path.join(tempdir, '%s.txt' % country_code), 'r')
data_file.seek(0)
logger.info('Starting to create the better zip entries')
for row in unicodecsv.reader(
data_file, encoding='utf-8', delimiter=' '):
zip = self.create_better_zip(row, self.country_id)
if zip in zips_to_delete:
zips_to_delete -= zip
max_import = self.env.context.get('max_import', 0)
reader = unicodecsv.reader(data_file, encoding='utf-8', delimiter=' ')
for i, row in enumerate(reader):
zip_code = self.create_better_zip(row, self.country_id)
if zip_code in zips_to_delete:
zips_to_delete -= zip_code
if max_import and i == max_import:
break
data_file.close()
if zips_to_delete:
if zips_to_delete and not max_import:
zips_to_delete.unlink()
logger.info('%d better zip entries deleted for country %s' %
(len(zips_to_delete), self.country_id.name))

Loading…
Cancel
Save