From 87f389124459e40609d4410ed43aa0e2cbacb100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 8 Feb 2021 10:24:44 +0000 Subject: [PATCH] [IMP] event, website_event_track: add tests about stored editable computed fields Add tests related to registration / partner contact fields synchronization. Add tests with user input and/or partner synchronization to ensure editable stored fields work as expected on registration model. Add tests related to event track / partner contact fields synchronization. Add tests with user input and/or partner synchronization to ensure editable stored fields work as expected on track model. Add tests related to event / event type configuration fields synchronization. Add tests with user input and/or event type synchronization to ensure editable stored fields work as expected on event model. Warning: those tests are currently partly failing. Next commits will split computed fields into several methods in order to fix computation. LINKS COM PR #65688 Task ID-2455165 X-original-commit odoo/odoo@6b0346bbb51bb0fe08a26f11c62d2a89fed826db X-original-commit: 7f0c7339c39b05e20efa163d0ea91f7dd5c0017c --- addons/event/tests/test_event_internals.py | 108 ++++++++++++++++++ addons/website_event/tests/common.py | 7 ++ .../tests/test_track_internals.py | 71 ++++++++++++ 3 files changed, 186 insertions(+) diff --git a/addons/event/tests/test_event_internals.py b/addons/event/tests/test_event_internals.py index 98f562f454e..e27db0709e6 100644 --- a/addons/event/tests/test_event_internals.py +++ b/addons/event/tests/test_event_internals.py @@ -128,6 +128,20 @@ class TestEventData(TestEventCommon): self.assertEqual(event.event_mail_ids.interval_type, 'before_event') self.assertEqual(event.event_mail_ids.template_id, self.env.ref('event.event_reminder')) self.assertEqual(len(event.event_ticket_ids), 1) + + # update template, unlink from event -> should not impact event + event_type.write({'has_seats_limitation': False}) + self.assertEqual(event_type.seats_max, 0) + self.assertTrue(event.seats_limited) + self.assertEqual(event.seats_max, 30) # original template value + event.write({'event_type_id': False}) + self.assertEqual(event.event_type_id, self.env["event.type"]) + + # set template back -> update event + event.write({'event_type_id': event_type.id}) + self.assertFalse(event.seats_limited) + self.assertEqual(event.seats_max, 0) + self.assertEqual(len(event.event_ticket_ids), 1) event_ticket1 = event.event_ticket_ids[0] self.assertEqual(event_ticket1.name, 'TestRegistration') @@ -298,6 +312,100 @@ class TestEventData(TestEventCommon): self.assertEqual(event.seats_expected, 7) +class TestEventRegistrationData(TestEventCommon): + + @users('user_eventmanager') + def test_registration_partner_sync(self): + """ Test registration computed fields about partner """ + test_email = '"Nibbler In Space" ' + test_phone = '0456001122' + + event = self.env['event.event'].browse(self.event_0.ids) + customer = self.env['res.partner'].browse(self.event_customer.id) + + # take all from partner + event.write({ + 'registration_ids': [(0, 0, { + 'partner_id': customer.id, + })] + }) + new_reg = event.registration_ids[0] + self.assertEqual(new_reg.partner_id, customer) + self.assertEqual(new_reg.name, customer.name) + self.assertEqual(new_reg.email, customer.email) + self.assertEqual(new_reg.phone, customer.phone) + + # partial update + event.write({ + 'registration_ids': [(0, 0, { + 'partner_id': customer.id, + 'name': 'Nibbler In Space', + 'email': test_email, + })] + }) + new_reg = event.registration_ids.sorted()[0] + self.assertEqual(new_reg.partner_id, customer) + self.assertEqual( + new_reg.name, 'Nibbler In Space', + 'Registration should take user input over computed partner value') + self.assertEqual( + new_reg.email, test_email, + 'Registration should take user input over computed partner value') + # self.assertEqual( + # new_reg.phone, customer.phone, + # 'Registration should take partner value if not user input') + + # already filled information should not be updated + event.write({ + 'registration_ids': [(0, 0, { + 'name': 'Nibbler In Space', + 'phone': test_phone, + })] + }) + new_reg = event.registration_ids.sorted()[0] + self.assertEqual(new_reg.name, 'Nibbler In Space') + self.assertEqual(new_reg.email, False) + self.assertEqual(new_reg.phone, test_phone) + new_reg.write({'partner_id': customer.id}) + self.assertEqual(new_reg.partner_id, customer) + self.assertEqual(new_reg.name, 'Nibbler In Space') + self.assertEqual(new_reg.email, customer.email) + self.assertEqual(new_reg.phone, test_phone) + + @users('user_eventmanager') + def test_registration_partner_sync_company(self): + """ Test synchronization involving companies """ + event = self.env['event.event'].browse(self.event_0.ids) + customer = self.env['res.partner'].browse(self.event_customer.id) + + # create company structure (using sudo as required partner manager group) + company = self.env['res.partner'].sudo().create({ + 'name': 'Customer Company', + 'is_company': True, + 'type': 'other', + }) + customer.sudo().write({'type': 'invoice', 'parent_id': company.id}) + contact = self.env['res.partner'].sudo().create({ + 'name': 'ContactName', + 'parent_id': company.id, + 'type': 'contact', + 'email': 'ContactEmail ', + 'phone': '+32456998877', + }) + + # take all from partner + event.write({ + 'registration_ids': [(0, 0, { + 'partner_id': customer.id, + })] + }) + new_reg = event.registration_ids[0] + self.assertEqual(new_reg.partner_id, customer) + self.assertEqual(new_reg.name, contact.name) + self.assertEqual(new_reg.email, contact.email) + self.assertEqual(new_reg.phone, contact.phone) + + class TestEventTicketData(TestEventCommon): def setUp(self): diff --git a/addons/website_event/tests/common.py b/addons/website_event/tests/common.py index fc20210549e..3773179fe83 100644 --- a/addons/website_event/tests/common.py +++ b/addons/website_event/tests/common.py @@ -108,3 +108,10 @@ class TestEventOnlineCommon(TestEventCommon, EventDtPatcher): 'date_begin': datetime.combine(cls.reference_now, time(7, 0)) - timedelta(days=1), 'date_end': datetime.combine(cls.reference_now, time(13, 0)) + timedelta(days=1), }) + + cls.event_customer.write({ + 'website_description': '

I am your best customer, %s

' % cls.event_customer.name, + }) + cls.event_customer2.write({ + 'website_description': '

I am your best customer, %s

' % cls.event_customer2.name, + }) diff --git a/addons/website_event_track/tests/test_track_internals.py b/addons/website_event_track/tests/test_track_internals.py index 553269b6db0..c549f554e8c 100644 --- a/addons/website_event_track/tests/test_track_internals.py +++ b/addons/website_event_track/tests/test_track_internals.py @@ -7,6 +7,77 @@ from unittest.mock import patch from odoo import fields from odoo.addons.website.models.website_visitor import WebsiteVisitor from odoo.addons.website_event.tests.common import TestEventOnlineCommon +from odoo.tests.common import users + + +class TestTrackData(TestEventOnlineCommon): + + @users('user_eventmanager') + def test_track_partner_sync(self): + """ Test registration computed fields about partner """ + test_email = '"Nibbler In Space" ' + test_phone = '0456001122' + test_bio = '

UserInput

' + test_bio_void = '


' + + event = self.env['event.event'].browse(self.event_0.ids) + customer = self.env['res.partner'].browse(self.event_customer.id) + + # take all from partner + new_track = self.env['event.track'].create({ + 'event_id': event.id, + 'name': 'Mega Track', + 'partner_id': customer.id, + }) + self.assertEqual(new_track.partner_id, customer) + self.assertEqual(new_track.partner_name, customer.name) + self.assertEqual(new_track.partner_email, customer.email) + self.assertEqual(new_track.partner_phone, customer.phone) + self.assertEqual(new_track.partner_biography, customer.website_description) + self.assertIn(customer.name, new_track.partner_biography, 'Low-level test: ensure correctly updated') + + # partial update + new_track = self.env['event.track'].create({ + 'event_id': event.id, + 'name': 'Mega Track', + 'partner_id': customer.id, + 'partner_name': 'Nibbler In Space', + 'partner_email': test_email, + }) + self.assertEqual(new_track.partner_id, customer) + self.assertEqual( + new_track.partner_name, 'Nibbler In Space', + 'Track should take user input over computed partner value') + self.assertEqual( + new_track.partner_email, test_email, + 'Track should take user input over computed partner value') + # self.assertEqual( + # new_track.partner_phone, customer.phone, + # 'Track should take partner value if not user input') + + # already filled information should not be updated + new_track = self.env['event.track'].create({ + 'event_id': event.id, + 'name': 'Mega Track', + 'partner_name': 'Nibbler In Space', + 'partner_phone': test_phone, + 'partner_biography': test_bio, + }) + self.assertEqual(new_track.partner_name, 'Nibbler In Space') + self.assertEqual(new_track.partner_email, False) + self.assertEqual(new_track.partner_phone, test_phone) + self.assertEqual(new_track.partner_biography, test_bio) + new_track.write({'partner_id': customer.id}) + self.assertEqual(new_track.partner_id, customer) + self.assertEqual( + new_track.partner_name, customer.name, + 'Track customer should take over existing value') + self.assertEqual( + new_track.partner_email, customer.email, + 'Track customer should take over existing value') + self.assertEqual( + new_track.partner_phone, customer.phone, + 'Track customer should take over existing value') class TestTrackSuggestions(TestEventOnlineCommon):