From 349f11e0d081e5ed4f95565e5247d6bd0d9959e3 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Sun, 3 Apr 2016 17:56:38 +0200 Subject: [PATCH] [IMP] partner_external_map: Add tests --- partner_external_map/README.rst | 6 ++ partner_external_map/hooks.py | 4 +- partner_external_map/models/map_website.py | 2 +- partner_external_map/models/res_partner.py | 6 +- partner_external_map/models/res_users.py | 12 ++- partner_external_map/tests/__init__.py | 3 + .../tests/test_partner_external_map.py | 84 +++++++++++++++++++ 7 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 partner_external_map/tests/__init__.py create mode 100644 partner_external_map/tests/test_partner_external_map.py diff --git a/partner_external_map/README.rst b/partner_external_map/README.rst index f55c2f471..48951bc39 100644 --- a/partner_external_map/README.rst +++ b/partner_external_map/README.rst @@ -57,6 +57,12 @@ or a route map. :alt: Try me on Runbot :target: https://runbot.odoo-community.org/runbot/134/9.0 +Known issues / Roadmap +====================== + +* Let decide if the user prefers to use addresses instead coordinates when + *base_geolocalize* is installed. + Bug Tracker =========== diff --git a/partner_external_map/hooks.py b/partner_external_map/hooks.py index 69e360d2f..93e4e4530 100644 --- a/partner_external_map/hooks.py +++ b/partner_external_map/hooks.py @@ -10,7 +10,7 @@ import logging logger = logging.getLogger(__name__) -def set_default_map_settings(cr, pool): +def set_default_map_settings(cr, registry): """Method called as post-install script The default method on the field can't be used, because it would be executed before loading map_website_data.xml, so it would not be able to set a @@ -18,7 +18,7 @@ def set_default_map_settings(cr, pool): with api.Environment.manage(): env = api.Environment(cr, SUPERUSER_ID, {}) user_model = env['res.users'] - users = user_model.search([]) + users = user_model.search([('context_map_website_id', '=', False)]) logger.info('Updating user settings for maps...') users.write({ 'context_map_website_id': user_model._default_map_website().id, diff --git a/partner_external_map/models/map_website.py b/partner_external_map/models/map_website.py index 44a11253e..fa3cd75a2 100644 --- a/partner_external_map/models/map_website.py +++ b/partner_external_map/models/map_website.py @@ -3,7 +3,7 @@ # © 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import models, fields, api, _ +from openerp import models, fields class MapWebsite(models.Model): diff --git a/partner_external_map/models/res_partner.py b/partner_external_map/models/res_partner.py index e705b190f..3e038a7e7 100644 --- a/partner_external_map/models/res_partner.py +++ b/partner_external_map/models/res_partner.py @@ -3,7 +3,7 @@ # © 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import models, fields, api, _ +from openerp import models, api, _ from openerp.exceptions import Warning as UserError import logging @@ -45,6 +45,7 @@ class ResPartner(models.Model): @api.multi def open_map(self): + self.ensure_one() map_website = self.env.user.context_map_website_id if not map_website: raise UserError( @@ -72,6 +73,7 @@ class ResPartner(models.Model): @api.multi def open_route_map(self): + self.ensure_one() if not self.env.user.context_route_map_website_id: raise UserError( _('Missing route map website: ' @@ -87,7 +89,7 @@ class ResPartner(models.Model): self.partner_latitude and self.partner_longitude and start_partner.partner_latitude and start_partner.partner_longitude): - url = self._prepare_url( + url = self._prepare_url( # pragma: no cover map_website.route_lat_lon_url, { '{START_LATITUDE}': start_partner.partner_latitude, '{START_LONGITUDE}': start_partner.partner_longitude, diff --git a/partner_external_map/models/res_users.py b/partner_external_map/models/res_users.py index cb01ade4f..9a8587f6f 100644 --- a/partner_external_map/models/res_users.py +++ b/partner_external_map/models/res_users.py @@ -3,7 +3,7 @@ # © 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import models, fields, api, _ +from openerp import models, fields, api import logging logger = logging.getLogger(__name__) @@ -40,3 +40,13 @@ class ResUsers(models.Model): "form to display an itinerary.") context_route_start_partner_id = fields.Many2one( 'res.partner', string='Start Address for Route Map') + + @api.model + def create(self, vals): + """On creation, if no starting partner is provided, assign the current + created one. + """ + user = super(ResUsers, self).create(vals) + if not vals.get('context_route_start_partner_id'): + user.context_route_start_partner_id = user.partner_id.id + return user diff --git a/partner_external_map/tests/__init__.py b/partner_external_map/tests/__init__.py new file mode 100644 index 000000000..944b0eb14 --- /dev/null +++ b/partner_external_map/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import test_partner_external_map diff --git a/partner_external_map/tests/test_partner_external_map.py b/partner_external_map/tests/test_partner_external_map.py new file mode 100644 index 000000000..2151b51bc --- /dev/null +++ b/partner_external_map/tests/test_partner_external_map.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +# © 2016 Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests import common +from openerp.exceptions import Warning as UserError +from ..hooks import set_default_map_settings + + +class TestPartnerExternalMap(common.TransactionCase): + def setUp(self): + super(TestPartnerExternalMap, self).setUp() + self.user = self.env['res.users'].create({ + 'name': 'Test user', + 'login': 'test_login', + 'context_map_website_id': self.ref( + 'partner_external_map.google_maps'), + 'context_route_map_website_id': self.ref( + 'partner_external_map.google_maps'), + }) + self.user.partner_id.city = 'Tomelloso' + self.partner = self.env['res.partner'].create({ + 'name': 'Test partner', + 'city': 'Madrid', + }) + + def test_post_init_hook(self): + # Call this again for coverage purposes, but it has been already run + set_default_map_settings(self.cr, self.registry) + self.assertTrue(self.env.user.context_map_website_id) + self.assertTrue(self.env.user.context_route_map_website_id) + self.assertEqual(self.env.user.partner_id, + self.env.user.context_route_start_partner_id) + + def test_create_user(self): + self.assertEqual( + self.user.partner_id, self.user.context_route_start_partner_id) + + def test_open_map(self): + action = self.partner.sudo(self.user.id).open_map() + self.assertEqual( + action['url'], "https://www.google.com/maps?ie=UTF8&q=Madrid") + + def test_open_route_map(self): + action = self.partner.sudo(self.user.id).open_route_map() + self.assertEqual( + action['url'], "https://www.google.com/maps?saddr=Tomelloso&daddr=" + "Madrid&directionsmode=driving") + + def test_open_map_with_coordinates(self): + # Simulate that we have the base_geolocalize module installed creating + # by hand the variables - This can't be done with routes + partner = self.partner.sudo(self.user.id) + partner.partner_latitude = 39.15837 + partner.partner_longitude = -3.02145 + action = partner.open_map() + self.assertEqual( + action['url'], + "https://www.google.com/maps?z=15&q=39.15837,-3.02145") + + def test_exception_no_map_website(self): + self.user.context_map_website_id = False + with self.assertRaises(UserError): + self.partner.sudo(self.user.id).open_map() + + def test_exception_no_map_route_website(self): + self.user.context_route_start_partner_id = False + with self.assertRaises(UserError): + self.partner.sudo(self.user.id).open_route_map() + + def test_exception_no_starting_partner(self): + self.user.context_route_map_website_id = False + with self.assertRaises(UserError): + self.partner.sudo(self.user.id).open_route_map() + + def test_exception_no_address_url(self): + self.user.context_map_website_id.address_url = False + with self.assertRaises(UserError): + self.partner.sudo(self.user.id).open_map() + + def test_exception_no_route_address_url(self): + self.user.context_map_website_id.route_address_url = False + with self.assertRaises(UserError): + self.partner.sudo(self.user.id).open_route_map()