210 lines
8.9 KiB
Python
210 lines
8.9 KiB
Python
# -*- 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)")
|