[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@6b0346bbb5

X-original-commit: 7f0c7339c39b05e20efa163d0ea91f7dd5c0017c
This commit is contained in:
Thibault Delavallée
2021-02-11 12:41:47 +00:00
parent f240c987d8
commit 87f3891244
3 changed files with 186 additions and 0 deletions
+108
View File
@@ -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" <nibbler@futurama.example.com>'
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 <contact.email@test.example.com>',
'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):
+7
View File
@@ -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': '<p>I am your best customer, %s</p>' % cls.event_customer.name,
})
cls.event_customer2.write({
'website_description': '<p>I am your best customer, %s</p>' % cls.event_customer2.name,
})
@@ -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" <nibbler@futurama.example.com>'
test_phone = '0456001122'
test_bio = '<p>UserInput</p>'
test_bio_void = '<p><br/></p>'
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):