[IMP] event(_sale): add some tests before updating models
As some event models (event.type and event.ticket notably) are about to be modified let us add some tests to avoid regressions. Security tests are also moved in their own file. Some internals tests defined in event_sale are also moved in their own file. That way we avoid bloating files with unrelated tests. Future commits will add tests for event and event.type models. LINKS Task ID 2177281 (support tickets directly in event) Prepares Community PR odoo/odoo#43488 Closes Community PR odoo/odoo#44066
This commit is contained in:
@@ -4,3 +4,4 @@
|
||||
from . import test_event_flow
|
||||
from . import test_event_internals
|
||||
from . import test_event_mail_schedule
|
||||
from . import test_event_security
|
||||
|
||||
@@ -44,7 +44,7 @@ class TestEventCommon(common.SavepointCase):
|
||||
|
||||
cls.customer = cls.env['res.partner'].create({
|
||||
'name': 'Constantin Customer',
|
||||
'email': 'constantin@example.com',
|
||||
'email': 'constantin@test.example.com',
|
||||
'country_id': cls.env.ref('base.be').id,
|
||||
'phone': '0485112233',
|
||||
})
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from unittest.mock import patch
|
||||
|
||||
from odoo.addons.event.tests.common import TestEventCommon
|
||||
from odoo.exceptions import AccessError
|
||||
from odoo.fields import Datetime as FieldsDatetime
|
||||
from odoo.tests.common import users
|
||||
from odoo.tools import mute_logger
|
||||
@@ -100,6 +98,10 @@ class TestEventData(TestEventCommon):
|
||||
@users('user_eventmanager')
|
||||
@mute_logger('odoo.models.unlink')
|
||||
def test_event_configuration_from_type(self):
|
||||
""" Test data computation of event coming from its event.type template.
|
||||
Some one2many notably are duplicated from type configuration and some
|
||||
advanced testing is required, notably mail schedulers. """
|
||||
|
||||
self.assertEqual(self.env.user.tz, 'Europe/Brussels')
|
||||
|
||||
event_type = self.event_type_complex.with_user(self.env.user)
|
||||
@@ -148,97 +150,26 @@ class TestEventData(TestEventCommon):
|
||||
self.assertEqual(event.event_mail_ids.template_id, self.env.ref('event.event_reminder'))
|
||||
|
||||
|
||||
class TestEventSecurity(TestEventCommon):
|
||||
|
||||
@users('user_employee')
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model')
|
||||
def test_event_access_employee(self):
|
||||
# employee can read events (sure ?)
|
||||
event = self.event_0.with_user(self.env.user)
|
||||
event.read(['name'])
|
||||
# event.stage_id.read(['name', 'description'])
|
||||
# event.event_type_id.read(['name', 'has_seats_limitation'])
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.now() + relativedelta(days=1),
|
||||
'seats_max': 10,
|
||||
})
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
event.write({
|
||||
'name': 'TestEvent Modified',
|
||||
})
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
self.env['event.stage'].create({
|
||||
'name': 'TestStage',
|
||||
})
|
||||
|
||||
@users('user_eventuser')
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model')
|
||||
def test_event_access_event_user(self):
|
||||
event = self.event_0.with_user(self.env.user)
|
||||
event.read(['name', 'user_id', 'kanban_state_label'])
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.now() + relativedelta(days=1),
|
||||
'seats_max': 10,
|
||||
})
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
event.write({
|
||||
'name': 'TestEvent Modified',
|
||||
})
|
||||
|
||||
# with self.assertRaises(AccessError):
|
||||
# self.env['event.stage'].create({
|
||||
# 'name': 'TestStage',
|
||||
# })
|
||||
class TestEventTypeData(TestEventCommon):
|
||||
|
||||
@users('user_eventmanager')
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model')
|
||||
def test_event_access_event_manager(self):
|
||||
# EventManager can do about everything
|
||||
def test_event_type_fields(self):
|
||||
""" Test event type fields synchronization """
|
||||
# create test type and ensure its initial values
|
||||
event_type = self.env['event.type'].create({
|
||||
'name': 'ManagerEventType',
|
||||
'use_mail_schedule': True,
|
||||
'event_type_mail_ids': [(5, 0), (0, 0, {
|
||||
'interval_nbr': 1, 'interval_unit': 'days', 'interval_type': 'before_event',
|
||||
'template_id': self.env['ir.model.data'].xmlid_to_res_id('event.event_reminder')})]
|
||||
'name': 'Testing fields computation',
|
||||
'has_seats_limitation': True,
|
||||
'default_registration_min': 5,
|
||||
'default_registration_max': 30,
|
||||
})
|
||||
event = self.env['event.event'].create({
|
||||
'name': 'ManagerEvent',
|
||||
'date_begin': datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.now() + relativedelta(days=1),
|
||||
})
|
||||
event.update({'event_type_id': event_type.id})
|
||||
event._onchange_type()
|
||||
event.flush()
|
||||
event_type._onchange_has_seats_limitation()
|
||||
self.assertTrue(event_type.has_seats_limitation)
|
||||
self.assertEqual(event_type.default_registration_min, 5)
|
||||
self.assertEqual(event_type.default_registration_max, 30)
|
||||
|
||||
registration = self.env['event.registration'].create({'event_id': event.id})
|
||||
registration.write({'name': 'Myself'})
|
||||
|
||||
stage = self.env.ref('event.event_stage_done')
|
||||
stage.write({'name': 'ManagerEnded'})
|
||||
event.write({'stage_id': stage.id})
|
||||
|
||||
registration.unlink()
|
||||
event.unlink()
|
||||
stage.unlink()
|
||||
event_type.unlink()
|
||||
|
||||
# Settings access rights required to enable some features
|
||||
self.user_eventmanager.write({'groups_id': [
|
||||
(3, self.env.ref('base.group_system').id),
|
||||
(4, self.env.ref('base.group_erp_manager').id)
|
||||
]})
|
||||
with self.assertRaises(AccessError):
|
||||
event_config = self.env['res.config.settings'].with_user(self.user_eventmanager).create({
|
||||
})
|
||||
event_config.execute()
|
||||
# reset seats limitation
|
||||
event_type.write({'has_seats_limitation': False})
|
||||
event_type._onchange_has_seats_limitation()
|
||||
self.assertFalse(event_type.has_seats_limitation)
|
||||
self.assertEqual(event_type.default_registration_min, 0)
|
||||
self.assertEqual(event_type.default_registration_max, 0)
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from datetime import datetime
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo.addons.event.tests.common import TestEventCommon
|
||||
from odoo.exceptions import AccessError
|
||||
from odoo.tests.common import users
|
||||
from odoo.tools import mute_logger
|
||||
|
||||
|
||||
class TestEventSecurity(TestEventCommon):
|
||||
|
||||
@users('user_employee')
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model')
|
||||
def test_event_access_employee(self):
|
||||
# employee can read events (sure ?)
|
||||
event = self.event_0.with_user(self.env.user)
|
||||
event.read(['name'])
|
||||
# event.stage_id.read(['name', 'description'])
|
||||
# event.event_type_id.read(['name', 'has_seats_limitation'])
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.now() + relativedelta(days=1),
|
||||
'seats_max': 10,
|
||||
})
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
event.write({
|
||||
'name': 'TestEvent Modified',
|
||||
})
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
self.env['event.stage'].create({
|
||||
'name': 'TestStage',
|
||||
})
|
||||
|
||||
@users('user_eventuser')
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model')
|
||||
def test_event_access_event_user(self):
|
||||
event = self.event_0.with_user(self.env.user)
|
||||
event.read(['name', 'user_id', 'kanban_state_label'])
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.now() + relativedelta(days=1),
|
||||
'seats_max': 10,
|
||||
})
|
||||
|
||||
with self.assertRaises(AccessError):
|
||||
event.write({
|
||||
'name': 'TestEvent Modified',
|
||||
})
|
||||
|
||||
# with self.assertRaises(AccessError):
|
||||
# self.env['event.stage'].create({
|
||||
# 'name': 'TestStage',
|
||||
# })
|
||||
|
||||
@users('user_eventmanager')
|
||||
@mute_logger('odoo.models.unlink', 'odoo.addons.base.models.ir_model')
|
||||
def test_event_access_event_manager(self):
|
||||
# EventManager can do about everything
|
||||
event_type = self.env['event.type'].create({
|
||||
'name': 'ManagerEventType',
|
||||
'use_mail_schedule': True,
|
||||
'event_type_mail_ids': [(5, 0), (0, 0, {
|
||||
'interval_nbr': 1, 'interval_unit': 'days', 'interval_type': 'before_event',
|
||||
'template_id': self.env['ir.model.data'].xmlid_to_res_id('event.event_reminder')})]
|
||||
})
|
||||
event = self.env['event.event'].create({
|
||||
'name': 'ManagerEvent',
|
||||
'date_begin': datetime.now() + relativedelta(days=-1),
|
||||
'date_end': datetime.now() + relativedelta(days=1),
|
||||
})
|
||||
event.update({'event_type_id': event_type.id})
|
||||
event._onchange_type()
|
||||
event.flush()
|
||||
|
||||
registration = self.env['event.registration'].create({'event_id': event.id})
|
||||
registration.write({'name': 'Myself'})
|
||||
|
||||
stage = self.env.ref('event.event_stage_done')
|
||||
stage.write({'name': 'ManagerEnded'})
|
||||
event.write({'stage_id': stage.id})
|
||||
|
||||
registration.unlink()
|
||||
event.unlink()
|
||||
stage.unlink()
|
||||
event_type.unlink()
|
||||
|
||||
# Settings access rights required to enable some features
|
||||
self.user_eventmanager.write({'groups_id': [
|
||||
(3, self.env.ref('base.group_system').id),
|
||||
(4, self.env.ref('base.group_erp_manager').id)
|
||||
]})
|
||||
with self.assertRaises(AccessError):
|
||||
event_config = self.env['res.config.settings'].with_user(self.user_eventmanager).create({
|
||||
})
|
||||
event_config.execute()
|
||||
@@ -1,2 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from . import test_event_internals
|
||||
from . import test_event_sale
|
||||
from . import test_event_sale_ui
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo.addons.event.tests.common import TestEventCommon
|
||||
|
||||
|
||||
class TestEventSaleCommon(TestEventCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestEventSaleCommon, cls).setUpClass()
|
||||
|
||||
cls.event_product = cls.env['product.product'].create({
|
||||
'name': 'Test Registration Product',
|
||||
'list_price': 10,
|
||||
'event_ok': True,
|
||||
'standard_price': 30.0,
|
||||
'type': 'service',
|
||||
})
|
||||
@@ -0,0 +1,85 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from datetime import date, datetime, timedelta
|
||||
|
||||
from odoo.addons.event_sale.tests.common import TestEventSaleCommon
|
||||
from odoo.fields import Datetime as FieldsDatetime
|
||||
from odoo.tests.common import users
|
||||
|
||||
|
||||
class EventSaleTest(TestEventSaleCommon):
|
||||
|
||||
@users('user_eventmanager')
|
||||
def test_event_configuration_from_type(self):
|
||||
""" In addition to event test, also test tickets configuration coming
|
||||
from event_sale capabilities. """
|
||||
event_type = self.event_type_complex.with_user(self.env.user)
|
||||
event_type.write({
|
||||
'use_mail_schedule': False,
|
||||
'use_ticketing': False,
|
||||
})
|
||||
# Event type does not use tickets but data is kept for compatibility and avoid recreating them
|
||||
self.assertEqual(len(event_type.event_ticket_ids), 1)
|
||||
self.assertEqual(event_type.event_ticket_ids.name, 'Registration')
|
||||
|
||||
event = self.env['event.event'].create({
|
||||
'name': 'Event Update Type',
|
||||
'event_type_id': event_type.id,
|
||||
'date_begin': FieldsDatetime.to_string(datetime.today() + timedelta(days=1)),
|
||||
'date_end': FieldsDatetime.to_string(datetime.today() + timedelta(days=15)),
|
||||
})
|
||||
event._onchange_type()
|
||||
self.assertEqual(event.event_ticket_ids, self.env['event.event.ticket'])
|
||||
|
||||
event_type.write({
|
||||
'use_ticketing': True,
|
||||
'event_ticket_ids': [(5, 0), (0, 0, {
|
||||
'name': 'First Ticket',
|
||||
'product_id': self.event_product.id,
|
||||
})]
|
||||
})
|
||||
event_type.event_ticket_ids._onchange_product_id()
|
||||
event._onchange_type()
|
||||
self.assertEqual(event.event_ticket_ids.name, 'Registration for %s' % event.name)
|
||||
self.assertEqual(event.event_ticket_ids.product_id, self.event_product)
|
||||
self.assertEqual(event.event_ticket_ids.price, self.event_product.list_price)
|
||||
|
||||
def test_event_registrable(self):
|
||||
"""Test if `_compute_event_registrations_open` works properly."""
|
||||
test_event = self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.now() - timedelta(days=5),
|
||||
'date_end': datetime.now() + timedelta(days=5),
|
||||
})
|
||||
test_event_ticket = self.env['event.event.ticket'].create({
|
||||
'name': 'TestTicket',
|
||||
'event_id': test_event.id,
|
||||
'product_id': self.env['product.product'].search([], limit=1).id,
|
||||
})
|
||||
|
||||
self.assertEqual(test_event.event_registrations_open, True)
|
||||
|
||||
test_event.write({
|
||||
'date_begin': datetime.now() - timedelta(days=5),
|
||||
'date_end': datetime.now() - timedelta(days=1),
|
||||
})
|
||||
|
||||
test_event.date_end = datetime.now() - timedelta(days=1)
|
||||
self.assertEqual(test_event.event_registrations_open, False)
|
||||
|
||||
test_event.write({
|
||||
'date_begin': datetime.now() - timedelta(days=1),
|
||||
'date_end': datetime.now() + timedelta(days=5),
|
||||
})
|
||||
|
||||
test_event.write({'event_ticket_ids': [(5, 0)]})
|
||||
self.assertEqual(test_event.event_registrations_open, False, 'cannot register if no tickets')
|
||||
|
||||
test_event_ticket = self.env['event.event.ticket'].create({
|
||||
'name': 'TestTicket',
|
||||
'event_id': test_event.id,
|
||||
'product_id': self.env['product.product'].search([], limit=1).id,
|
||||
})
|
||||
test_event_ticket.product_id.active = False
|
||||
self.assertEqual(test_event.event_registrations_open, False, 'cannot register if product linked to the tickets are all archived')
|
||||
@@ -1,7 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import datetime
|
||||
from odoo.tests import common
|
||||
|
||||
|
||||
@@ -68,42 +67,3 @@ class EventSaleTest(common.TransactionCase):
|
||||
# I check if a registration is created
|
||||
registrations = self.EventRegistration.search([('origin', '=', self.sale_order.name)])
|
||||
self.assertTrue(registrations, "The registration is not created.")
|
||||
|
||||
def test_event_is_registrable(self):
|
||||
"""Test if `_compute_event_registrations_open` works properly."""
|
||||
test_event = self.env['event.event'].create({
|
||||
'name': 'TestEvent',
|
||||
'date_begin': datetime.datetime.now() - datetime.timedelta(days=5),
|
||||
'date_end': datetime.datetime.now() + datetime.timedelta(days=5),
|
||||
})
|
||||
test_event_ticket = self.env['event.event.ticket'].create({
|
||||
'name': 'TestTicket',
|
||||
'event_id': test_event.id,
|
||||
'product_id': self.env['product.product'].search([], limit=1).id,
|
||||
})
|
||||
|
||||
self.assertEqual(test_event.event_registrations_open, True)
|
||||
|
||||
test_event.write({
|
||||
'date_begin': datetime.datetime.now() - datetime.timedelta(days=5),
|
||||
'date_end': datetime.datetime.now() - datetime.timedelta(days=1),
|
||||
})
|
||||
|
||||
test_event.date_end = datetime.datetime.now() - datetime.timedelta(days=1)
|
||||
self.assertEqual(test_event.event_registrations_open, False)
|
||||
|
||||
test_event.write({
|
||||
'date_begin': datetime.datetime.now() - datetime.timedelta(days=1),
|
||||
'date_end': datetime.datetime.now() + datetime.timedelta(days=5),
|
||||
})
|
||||
|
||||
test_event.write({'event_ticket_ids': [(6, 0, [])]})
|
||||
self.assertEqual(test_event.event_registrations_open, False, 'cannot register if no tickets')
|
||||
|
||||
test_event_ticket = self.env['event.event.ticket'].create({
|
||||
'name': 'TestTicket',
|
||||
'event_id': test_event.id,
|
||||
'product_id': self.env['product.product'].search([], limit=1).id,
|
||||
})
|
||||
test_event_ticket.product_id.active = False
|
||||
self.assertEqual(test_event.event_registrations_open, False, 'cannot register if product linked to the tickets are all archived')
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import odoo.tests
|
||||
from datetime import timedelta
|
||||
|
||||
from odoo.fields import Datetime
|
||||
from odoo.tests import HttpCase, tagged
|
||||
|
||||
|
||||
@odoo.tests.tagged('post_install', '-at_install')
|
||||
class TestUi(odoo.tests.HttpCase):
|
||||
def test_01_event_configurator(self):
|
||||
@tagged('post_install', '-at_install')
|
||||
class TestUi(HttpCase):
|
||||
|
||||
def test_event_configurator(self):
|
||||
|
||||
event = self.env['event.event'].create({
|
||||
'name': 'Design Fair Los Angeles',
|
||||
'date_begin': Datetime.now() + timedelta(days=1),
|
||||
|
||||
Reference in New Issue
Block a user