123 lines
5.3 KiB
Python
123 lines
5.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import date, datetime, timedelta
|
|
from freezegun import freeze_time
|
|
|
|
from odoo.addons.event_sale.tests.common import TestEventSaleCommon
|
|
from odoo.fields import Datetime as FieldsDatetime, Date as FieldsDate
|
|
from odoo.tests.common import users
|
|
|
|
|
|
class TestEventData(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_tickets.with_user(self.env.user)
|
|
self.assertEqual(event_type.event_type_ticket_ids.description, self.event_product.description_sale)
|
|
|
|
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)),
|
|
})
|
|
|
|
# synchronize event
|
|
event.write({'event_type_id': event_type.id})
|
|
self.assertEqual(event.event_ticket_ids.name, event.event_type_id.event_type_ticket_ids.name)
|
|
self.assertTrue(event.event_ticket_ids.seats_limited)
|
|
self.assertEqual(event.event_ticket_ids.seats_max, 5)
|
|
self.assertEqual(event.event_ticket_ids.product_id, self.event_product)
|
|
self.assertEqual(event.event_ticket_ids.price, self.event_product.list_price)
|
|
self.assertEqual(event.event_ticket_ids.description, self.event_product.description_sale)
|
|
|
|
def test_event_registrable(self):
|
|
"""Test if `_compute_event_registrations_open` works properly with additional
|
|
product active conditions compared to base tests (see event) """
|
|
event = self.event_0.with_user(self.env.user)
|
|
self.assertTrue(event.event_registrations_open)
|
|
|
|
# ticket without dates boundaries -> ok
|
|
ticket = self.env['event.event.ticket'].create({
|
|
'name': 'TestTicket',
|
|
'event_id': event.id,
|
|
'product_id': self.event_product.id,
|
|
})
|
|
self.assertTrue(event.event_registrations_open)
|
|
|
|
# ticket has inactive product -> ko
|
|
ticket.product_id.action_archive()
|
|
self.assertFalse(event.event_registrations_open)
|
|
|
|
# at least one valid ticket -> ok is back
|
|
event_product = self.env['product.product'].create({'name': 'Test Registration Product New',})
|
|
new_ticket = self.env['event.event.ticket'].create({
|
|
'name': 'TestTicket 2',
|
|
'event_id': event.id,
|
|
'product_id': event_product.id,
|
|
'end_sale_datetime': FieldsDatetime.to_string(datetime.now() + timedelta(days=2)),
|
|
})
|
|
self.assertTrue(new_ticket.sale_available)
|
|
self.assertTrue(event.event_registrations_open)
|
|
|
|
|
|
class TestEventTicketData(TestEventSaleCommon):
|
|
|
|
@freeze_time('2020-01-31 10:00:00')
|
|
@users('user_eventmanager')
|
|
def test_event_ticket_fields(self):
|
|
""" Test event ticket fields synchronization """
|
|
event = self.event_0.with_user(self.env.user)
|
|
event.write({
|
|
'event_ticket_ids': [
|
|
(5, 0),
|
|
(0, 0, {
|
|
'name': 'First Ticket',
|
|
'product_id': self.event_product.id,
|
|
'seats_max': 30,
|
|
}), (0, 0, { # limited in time, available (01/10 (start) < 01/31 (today) < 02/10 (end))
|
|
'name': 'Second Ticket',
|
|
'product_id': self.event_product.id,
|
|
'start_sale_datetime': datetime(2020, 1, 10, 0, 0, 0),
|
|
'end_sale_datetime': datetime(2020, 2, 10, 23, 59, 59),
|
|
})
|
|
],
|
|
})
|
|
first_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'First Ticket')
|
|
second_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'Second Ticket')
|
|
# force second ticket price, after calling the onchange
|
|
second_ticket.write({'price': 8.0})
|
|
|
|
# price coming from product
|
|
self.assertEqual(first_ticket.price, self.event_product.list_price)
|
|
self.assertEqual(second_ticket.price, 8.0)
|
|
|
|
# default availability
|
|
self.assertTrue(first_ticket.seats_limited)
|
|
self.assertTrue(first_ticket.sale_available)
|
|
self.assertFalse(first_ticket.is_expired)
|
|
self.assertFalse(second_ticket.seats_limited)
|
|
self.assertTrue(second_ticket.sale_available)
|
|
self.assertFalse(second_ticket.is_expired)
|
|
|
|
# product archived
|
|
self.event_product.action_archive()
|
|
self.assertFalse(first_ticket.sale_available)
|
|
self.assertFalse(second_ticket.sale_available)
|
|
|
|
# sale is ended
|
|
self.event_product.action_unarchive()
|
|
second_ticket.write({'end_sale_datetime': datetime(2020, 1, 20, 23, 59, 59)})
|
|
self.assertFalse(second_ticket.sale_available)
|
|
self.assertTrue(second_ticket.is_expired)
|
|
# sale has not started
|
|
second_ticket.write({
|
|
'start_sale_datetime': datetime(2020, 2, 10, 0, 0, 0),
|
|
'end_sale_datetime': datetime(2020, 2, 20, 23, 59, 59),
|
|
})
|
|
self.assertFalse(second_ticket.sale_available)
|
|
self.assertFalse(second_ticket.is_expired)
|