You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
6.7 KiB
192 lines
6.7 KiB
# Copyright 2016-2020 Tecnativa - Pedro M. Baeza
|
|
# Copyright 2020 Manuel Regidor <manuel.regidor@sygel.es>
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo.exceptions import UserError
|
|
from odoo.tests import common
|
|
|
|
|
|
class TestBaseLocationGeonamesImport(common.SavepointCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.country = cls.env.ref("base.mc")
|
|
cls.city = cls.env["res.city"].create(
|
|
{"name": "Test city", "country_id": cls.country.id}
|
|
)
|
|
cls.wizard = cls.env["city.zip.geonames.import"].create(
|
|
{"country_ids": [(6, 0, [cls.country.id])]}
|
|
)
|
|
cls.wrong_country = cls.env["res.country"].create(
|
|
{"name": "Wrong country", "code": "ZZYYXX"}
|
|
)
|
|
cls.wrong_wizard = cls.env["city.zip.geonames.import"].create(
|
|
{"country_ids": [(6, 0, [cls.wrong_country.id])]}
|
|
)
|
|
cls.country_2 = cls.env.ref("base.li")
|
|
cls.country_3 = cls.env.ref("base.sm")
|
|
cls.wizard_2 = cls.env["city.zip.geonames.import"].create(
|
|
{"country_ids": [(6, 0, [cls.country_2.id, cls.country_3.id])]}
|
|
)
|
|
cls.country_4 = cls.env.ref("base.ad")
|
|
cls.wizard_3 = cls.env["city.zip.geonames.import"].create(
|
|
{"country_ids": [(4, cls.country_4.id)]}
|
|
)
|
|
|
|
def test_import_country(self):
|
|
max_import = 10
|
|
self.wizard.with_context(max_import=max_import).run_import()
|
|
# Look if there are imported states for the country
|
|
state_count = self.env["res.country.state"].search_count(
|
|
[("country_id", "=", self.country.id)]
|
|
)
|
|
self.assertTrue(state_count)
|
|
# Look if there are imported zips
|
|
zip_count = self.env["res.city.zip"].search_count(
|
|
[("city_id.country_id", "=", self.country.id)]
|
|
)
|
|
self.assertEqual(zip_count, max_import)
|
|
|
|
# Look if there are imported cities
|
|
city_count = self.env["res.city"].search_count(
|
|
[("country_id", "=", self.country.id)]
|
|
)
|
|
self.assertTrue(city_count)
|
|
|
|
# Reimport again to see that there's no duplicates
|
|
self.wizard.with_context(max_import=max_import).run_import()
|
|
state_count2 = self.env["res.country.state"].search_count(
|
|
[("country_id", "=", self.country.id)]
|
|
)
|
|
self.assertEqual(state_count, state_count2)
|
|
|
|
city_count2 = self.env["res.city"].search_count(
|
|
[("country_id", "=", self.country.id)]
|
|
)
|
|
self.assertEqual(city_count, city_count2)
|
|
|
|
zip_count = self.env["res.city.zip"].search_count(
|
|
[("city_id.country_id", "=", self.country.id)]
|
|
)
|
|
self.assertEqual(zip_count, max_import)
|
|
|
|
def test_delete_old_entries(self):
|
|
zip_entry = self.env["res.city.zip"].create(
|
|
{"name": "Brussels", "city_id": self.city.id}
|
|
)
|
|
self.wizard.run_import()
|
|
self.assertFalse(zip_entry.exists())
|
|
|
|
city_entry = self.env["res.city"].create(
|
|
{"name": "Test city", "country_id": self.country.id}
|
|
)
|
|
self.wizard.run_import()
|
|
self.assertFalse(city_entry.exists())
|
|
|
|
def test_import_title(self):
|
|
self.wizard.letter_case = "title"
|
|
self.wizard.with_context(max_import=1).run_import()
|
|
city_zip = self.env["res.city.zip"].search(
|
|
[("city_id.country_id", "=", self.country.id)], limit=1
|
|
)
|
|
self.assertEqual(city_zip.city_id.name, city_zip.city_id.name.title())
|
|
|
|
city = self.env["res.city"].search(
|
|
[("country_id", "=", self.country.id)], limit=1
|
|
)
|
|
self.assertEqual(city.name, city.name.title())
|
|
|
|
def test_import_upper(self):
|
|
self.wizard.letter_case = "upper"
|
|
self.wizard.with_context(max_import=1).run_import()
|
|
city_zip = self.env["res.city.zip"].search(
|
|
[("city_id.country_id", "=", self.country.id)], limit=1
|
|
)
|
|
self.assertEqual(city_zip.city_id.name, city_zip.city_id.name.upper())
|
|
|
|
city = self.env["res.city"].search(
|
|
[("country_id", "=", self.country.id)], limit=1
|
|
)
|
|
self.assertEqual(city.name, city.name.upper())
|
|
|
|
def test_download_error(self):
|
|
"""Check that we get an error when trying to download
|
|
with a wrong country code"""
|
|
with self.assertRaises(UserError):
|
|
self.wrong_wizard.run_import()
|
|
|
|
def test_import_duplicated_city_name(self):
|
|
country = self.env.ref("base.us")
|
|
self.wizard.country_ids = [(6, 0, country.ids)]
|
|
parsed_csv = [
|
|
[
|
|
"US",
|
|
"95602",
|
|
"Auburn",
|
|
" California",
|
|
"CA",
|
|
"Placer",
|
|
"61",
|
|
"38.9829",
|
|
"-121.0944",
|
|
"4",
|
|
],
|
|
[
|
|
"US",
|
|
"95603",
|
|
"Auburn",
|
|
" California",
|
|
"CA",
|
|
"Placer",
|
|
"61",
|
|
"38.9115",
|
|
"-121.08",
|
|
"4",
|
|
],
|
|
[
|
|
"US",
|
|
"30011",
|
|
"Auburn",
|
|
" Georgia",
|
|
"GA",
|
|
"Barrow",
|
|
"13",
|
|
"34.0191",
|
|
"-83.8261",
|
|
"4",
|
|
],
|
|
]
|
|
self.wizard._process_csv(parsed_csv, country)
|
|
cities = self.env["res.city"].search([("name", "=", "Auburn")])
|
|
self.assertEqual(len(cities), 2)
|
|
mapping = [
|
|
["California", "95602"],
|
|
["California", "95603"],
|
|
["Georgia", "30011"],
|
|
]
|
|
for state_name, zip_code in mapping:
|
|
zip_entry = self.env["res.city.zip"].search(
|
|
[("city_id.country_id", "=", country.id), ("name", "=", zip_code)]
|
|
)
|
|
state = self.env["res.country.state"].search(
|
|
[("country_id", "=", country.id), ("name", "=", state_name)]
|
|
)
|
|
self.assertEqual(
|
|
zip_entry.city_id.state_id,
|
|
state,
|
|
"Incorrect state for {} {}".format(state_name, zip_code),
|
|
)
|
|
|
|
def test_import_countries(self):
|
|
max_import = 1
|
|
self.wizard_2.with_context(max_import=max_import).run_import()
|
|
|
|
# Look if there are imported zips
|
|
zip_country_2_count = self.env["res.city.zip"].search_count(
|
|
[("city_id.country_id", "=", self.country_2.id)]
|
|
)
|
|
zip_country_3_count = self.env["res.city.zip"].search_count(
|
|
[("city_id.country_id", "=", self.country_3.id)]
|
|
)
|
|
self.assertEqual(zip_country_2_count, max_import)
|
|
self.assertEqual(zip_country_3_count, max_import)
|