From 3751379f1e9a4c215fb6eb898b4ccc67659b9ace Mon Sep 17 00:00:00 2001 From: stephanchrst Date: Tue, 10 May 2022 21:51:50 +0700 Subject: initial commit 2 --- addons/lunch/tests/test_supplier.py | 124 ++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 addons/lunch/tests/test_supplier.py (limited to 'addons/lunch/tests/test_supplier.py') diff --git a/addons/lunch/tests/test_supplier.py b/addons/lunch/tests/test_supplier.py new file mode 100644 index 00000000..3048237d --- /dev/null +++ b/addons/lunch/tests/test_supplier.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import pytz + +from datetime import datetime +from unittest.mock import patch + +from odoo import fields + +from odoo.addons.lunch.tests.common import TestsCommon + + +class TestSupplier(TestsCommon): + def setUp(self): + super(TestSupplier, self).setUp() + + self.monday_1am = datetime(2018, 10, 29, 1, 0, 0) + self.monday_10am = datetime(2018, 10, 29, 10, 0, 0) + self.monday_1pm = datetime(2018, 10, 29, 13, 0, 0) + self.monday_8pm = datetime(2018, 10, 29, 20, 0, 0) + + self.saturday_3am = datetime(2018, 11, 3, 3, 0, 0) + self.saturday_10am = datetime(2018, 11, 3, 10, 0, 0) + self.saturday_1pm = datetime(2018, 11, 3, 13, 0, 0) + self.saturday_8pm = datetime(2018, 11, 3, 20, 0, 0) + + def test_compute_available_today(self): + tests = [(self.monday_1am, True), (self.monday_10am, True), + (self.monday_1pm, True), (self.monday_8pm, True), + (self.saturday_3am, False), (self.saturday_10am, False), + (self.saturday_1pm, False), (self.saturday_8pm, False)] + + for value, result in tests: + with patch.object(fields.Datetime, 'now', return_value=value) as _: + assert self.supplier_pizza_inn.available_today == result,\ + 'supplier pizza inn should %s considered available on %s' % ('be' if result else 'not be', value) + + self.env['lunch.supplier'].invalidate_cache(['available_today'], [self.supplier_pizza_inn.id]) + + def test_search_available_today(self): + ''' + This test checks that _search_available_today returns a valid domain + ''' + self.env.user.tz = 'Europe/Brussels' + Supplier = self.env['lunch.supplier'] + + tests = [(self.monday_1am, 1.0, 'monday'), (self.monday_10am, 10.0, 'monday'), + (self.monday_1pm, 13.0, 'monday'), (self.monday_8pm, 20.0, 'monday'), + (self.saturday_3am, 3.0, 'saturday'), (self.saturday_10am, 10.0, 'saturday'), + (self.saturday_1pm, 13.0, 'saturday'), (self.saturday_8pm, 20.0, 'saturday')] + + # It should return an empty domain if we compare to values other than datetime + assert Supplier._search_available_today('>', 7) == [] + assert Supplier._search_available_today('>', True) == [] + + for value, rvalue, dayname in tests: + with patch.object(fields.Datetime, 'now', return_value=value) as _: + assert Supplier._search_available_today('=', True) == ['&', '|', ('recurrency_end_date', '=', False), + ('recurrency_end_date', '>', value.replace(tzinfo=pytz.UTC).astimezone(pytz.timezone(self.env.user.tz))), + ('recurrency_%s' % (dayname), '=', True)],\ + 'Wrong domain generated for values (%s, %s)' % (value, rvalue) + + with patch.object(fields.Datetime, 'now', return_value=self.monday_10am) as _: + assert self.supplier_pizza_inn in Supplier.search([('available_today', '=', True)]) + + def test_auto_email_send(self): + with patch.object(fields.Datetime, 'now', return_value=self.monday_1pm) as _: + with patch.object(fields.Date, 'today', return_value=self.monday_1pm.date()) as _: + with patch.object(fields.Date, 'context_today', return_value=self.monday_1pm.date()) as _: + line = self.env['lunch.order'].create({ + 'product_id': self.product_pizza.id, + 'date': self.monday_1pm.date() + }) + + line.action_order() + assert line.state == 'ordered' + + self.supplier_pizza_inn._auto_email_send() + + assert line.state == 'confirmed' + + line = self.env['lunch.order'].create({ + 'product_id': self.product_pizza.id, + 'topping_ids_1': [(6, 0, [self.topping_olives.id])], + 'date': self.monday_1pm.date() + }) + line2 = self.env['lunch.order'].create({ + 'product_id': self.product_sandwich_tuna.id, + 'date': self.monday_1pm.date() + }) + + (line | line2).action_order() + assert line.state == 'ordered' + assert line2.state == 'ordered' + + self.supplier_pizza_inn._auto_email_send() + + assert line.state == 'confirmed' + assert line2.state == 'ordered' + + line_1 = self.env['lunch.order'].create({ + 'product_id': self.product_pizza.id, + 'quantity': 2, + 'date': self.monday_1pm.date() + }) + + line_2 = self.env['lunch.order'].create({ + 'product_id': self.product_pizza.id, + 'topping_ids_1': [(6, 0, [self.topping_olives.id])], + 'date': self.monday_1pm.date() + }) + + line_3 = self.env['lunch.order'].create({ + 'product_id': self.product_sandwich_tuna.id, + 'quantity': 2, + 'date': self.monday_1pm.date() + }) + + (line_1 | line_2 | line_3).action_order() + + assert all(line.state == 'ordered' for line in [line_1, line_2, line_3]) + + self.supplier_pizza_inn._auto_email_send() -- cgit v1.2.3