1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import datetime, timedelta
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, 'Nibbler In Space',
'Track customer should not take over existing value')
self.assertEqual(
new_track.partner_email, customer.email,
'Track customer should take over empty value')
self.assertEqual(
new_track.partner_phone, test_phone,
'Track customer should not take over existing value')
# contacts fields should be updated with track customer
new_track = self.env['event.track'].create({
'event_id': event.id,
'name': 'Mega Track',
'contact_phone': test_phone,
})
self.assertEqual(new_track.contact_email, False)
self.assertEqual(new_track.contact_phone, test_phone)
new_track.write({'partner_id': customer.id})
self.assertEqual(new_track.partner_id, customer)
self.assertEqual(
new_track.contact_email, customer.email,
'Track customer should take over empty contact email value')
self.assertEqual(
new_track.contact_phone, customer.phone,
'Track customer should take over existing contact phone value')
class TestTrackSuggestions(TestEventOnlineCommon):
def test_track_suggestion(self):
[location_1, location_2] = self.env['event.track.location'].create([
{'name': 'Location 1'},
{'name': 'Location 2'},
])
[tag_1, tag_2, tag_3, tag_4] = self.env['event.track.tag'].create([
{'name': 'Tag 1'}, {'name': 'Tag 2'}, {'name': 'Tag 3'}, {'name': 'Tag 4'}
])
date = fields.Datetime.from_string(datetime.now().strftime('%Y-%m-%d %H:00:00'))
[track_1, track_2, track_3, track_4, track_5, track_6] = self.env['event.track'].create([{
'name': 'Track 1',
'location_id': location_1.id,
'event_id': self.event_0.id,
'tag_ids': [(4, tag_1.id), (4, tag_2.id)],
'date': date + timedelta(hours=-1),
}, {
'name': 'Track 2',
'location_id': location_2.id,
'event_id': self.event_0.id,
'date': date,
}, {
'name': 'Track 3',
'location_id': location_2.id,
'event_id': self.event_0.id,
'tag_ids': [(4, tag_1.id), (4, tag_3.id), (4, tag_4.id)],
'date': date,
}, {
'name': 'Track 4',
'event_id': self.event_0.id,
'tag_ids': [(4, tag_1.id), (4, tag_2.id)],
'date': date,
}, {
'name': 'Track 5',
'event_id': self.event_0.id,
'tag_ids': [(4, tag_1.id), (4, tag_3.id)],
'wishlisted_by_default': True,
'date': date,
}, {
'name': 'Track 6',
'location_id': location_1.id,
'event_id': self.event_0.id,
'tag_ids': [(4, tag_1.id), (4, tag_3.id)],
'date': date,
}])
emp_visitor = self.env['website.visitor'].create({
'partner_id': self.user_employee.partner_id.id,
'access_token': self.user_employee.partner_id.id,
})
visitor_track = self.env['event.track.visitor'].create({
'visitor_id': emp_visitor.id,
'track_id': track_3.id,
'is_wishlisted': True,
})
with patch.object(WebsiteVisitor, '_get_visitor_from_request', lambda *args, **kwargs: emp_visitor), \
self.with_user('user_employee'):
current_track = self.env['event.track'].browse(track_1.id)
all_suggestions = current_track._get_track_suggestions()
self.assertEqual(
all_suggestions.ids,
(track_3 + track_5 + track_4 + track_6 + track_2).ids # whlst / wishlst def / tags count / location
)
track_suggestion = current_track._get_track_suggestions(limit=1)
self.assertEqual(track_suggestion, track_3,
'Returned track should be the manually wishlisted one')
# remove wishlist, keynote should be top
visitor_track.unlink()
track_suggestion = current_track._get_track_suggestions(limit=1)
self.assertEqual(
track_suggestion, track_5,
'Returned track should be the default wishlisted one')
# toggle wishlisted by default off through blacklist
track_5_visitor = self.env['event.track.visitor'].sudo().create({
'visitor_id': emp_visitor.id,
'track_id': track_5.id,
'is_blacklisted': True,
})
track_suggestion = current_track._get_track_suggestions(limit=1)
self.assertEqual(
track_suggestion, track_4,
'Returned track should the one with the most common tags as keynote is blacklisted')
track_5_visitor.unlink()
# remove keynote default, now based on tags
track_5.write({'wishlisted_by_default': False})
# all_suggestions.invalidate_model(['is_reminder_on'])
track_suggestion = current_track._get_track_suggestions(limit=1)
self.assertEqual(
track_suggestion, track_4,
'Returned track should the one with the most common tags')
# remove tags, now based on location
all_suggestions.sudo().write({'tag_ids': [(5,)]})
track_suggestion = current_track._get_track_suggestions(limit=1)
self.assertEqual(
track_suggestion, track_6,
'Returned track should the one with matching location')
# remove location, now based o random
all_suggestions.sudo().write({'location_id': False})
track_suggestion = current_track._get_track_suggestions(limit=1)
self.assertTrue(
track_suggestion in [track_2, track_3, track_4, track_5, track_6],
"Returned track should the a random one (but not the one we're trying to get suggestion for)")
|