Files
odoo_source/addons/lunch/tests/test_lunch.py
T
Xavier Morel 7ee9cc29a8 [CHG] *: "family" names of admin & demo users
avw/fp? request

58fc4e4409 changed various demo data,
including putting more "realistic" names in for the administrator and
demo users in demo mode. This is apparently inconvenient when actually
demo-ing Odoo as it's harder to see at a glance whether the current user
is the administrator or "regular" (demo) user of the db, though this
should have less impact since the userification of the admin
(2f7c03d9ca).
2018-09-21 10:06:23 +02:00

144 lines
6.2 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.exceptions import ValidationError
from odoo.tests import common
from datetime import date, datetime
from dateutil import relativedelta
class Test_Lunch(common.TransactionCase):
def setUp(self):
"""*****setUp*****"""
super(Test_Lunch, self).setUp()
self.demo_user = self.env['res.users'].search([('name', '=', 'Marc Demo')])
self.product_Bolognese_id = self.env.ref('lunch.product_Bolognese')
self.new_id_order = self.env['lunch.order'].create({
'user_id': self.demo_user.id,
'order_line_ids': '[]',
})
self.new_id_order_line = self.env['lunch.order.line'].create({
'order_id': self.new_id_order.id,
'product_id': self.product_Bolognese_id.id,
'note': '+Emmental',
'cashmove': [],
'price': self.product_Bolognese_id.price,
})
def test_00_lunch_order(self):
"""Change the state of an order line from 'new' to 'ordered'. Check that there are no cashmove linked to that order line"""
self.order_one = self.new_id_order_line
#we check that our order_line is a 'new' one and that there are no cashmove linked to that order_line:
self.assertEqual(self.order_one.state, 'new')
self.assertEqual(list(self.order_one.cashmove), [])
#we order that orderline so it's state will be 'ordered'
self.order_one.order()
self.order_one = self.new_id_order_line
#we check that our order_line is a 'ordered' one and that there are no cashmove linked to that order_line:
self.assertEqual(self.order_one.state, 'ordered')
self.assertEqual(list(self.order_one.cashmove), [])
def test_01_lunch_order(self):
"""Change the state of an order line from 'new' to 'ordered' then to 'confirmed'. Check that there is a cashmove linked to the order line"""
self.test_00_lunch_order()
#We receive the order so we confirm the order line so it's state will be 'confirmed'
#A cashmove will be created and we will test that the cashmove amount equals the order line price
self.order_one.confirm()
self.order_one = self.new_id_order_line
#we check that our order_line is a 'confirmed' one and that there are a cashmove linked to that order_line with an amount equals to the order line price:
self.assertEqual(self.order_one.state, 'confirmed')
self.assertTrue(self.order_one.cashmove)
self.assertTrue(self.order_one.cashmove[0].amount == -self.order_one.price)
def test_02_lunch_order(self):
"""Change the state of an order line from 'confirmed' to 'cancelled' and check that the cashmove linked to that order line will be deleted"""
self.test_01_lunch_order()
#We have a confirmed order with its associate cashmove
#We execute the cancel function
self.order_one.cancel()
self.order_one = self.new_id_order_line
#We check that the state is cancelled and that the cashmove has been deleted
self.assertEqual(self.order_one.state, 'cancelled')
self.assertFalse(self.order_one.cashmove)
def test_03_lunch_alert(self):
""" specify a lunch alert and make sure it is not possible to make an
order that day
"""
alert_01 = self.env['lunch.alert'].create({
'message': 'Order Bolognese only on Tuesday',
'partner_id': self.product_Bolognese_id.supplier.id,
'alert_type': 'week',
'tuesday': True
})
wednesday = date.today() + relativedelta.relativedelta(days=7, weekday=2)
next_tuesday = datetime.today() + relativedelta.relativedelta(days=14, weekday=1)
next_wednesday = datetime.today() + relativedelta.relativedelta(days=14, weekday=2)
# We check that we can make an order on a Tuesday
order_01 = self.env['lunch.order'].create({
'user_id': self.demo_user.id,
'date': date.today() + relativedelta.relativedelta(days=7, weekday=1),
'order_line_ids': [(0, 0, {
'product_id': self.product_Bolognese_id.id,
})]
})
order_01.order_line_ids.order()
with self.assertRaises(ValidationError):
# Planning an order to an non-authorized day must not be possible
order_02 = self.env['lunch.order'].create({
'user_id': self.demo_user.id,
'date': wednesday,
'order_line_ids': [(0, 0, {
'product_id': self.product_Bolognese_id.id,
})]
})
alert_02 = self.env['lunch.alert'].create({
'message': 'Working one more day',
'partner_id': self.product_Bolognese_id.supplier.id,
'alert_type': 'specific',
'specific_day': wednesday,
})
# should now be possible to order tomorrow
order_03 = self.env['lunch.order'].create({
'user_id': self.demo_user.id,
'date': wednesday,
'order_line_ids': [(0, 0, {
'product_id': self.product_Bolognese_id.id,
})]
})
# should be possible to planned on an allowed day
order_04 = self.env['lunch.order'].create({
'user_id': self.demo_user.id,
'date': next_tuesday,
'order_line_ids': [(0, 0, {
'product_id': self.product_Bolognese_id.id,
})]
})
order_04.order_line_ids.order()
# combinaision of alerts should work
alert_03 = self.env['lunch.alert'].create({
'message': 'Order Bolognese also on Wednesday',
'partner_id': self.product_Bolognese_id.supplier.id,
'alert_type': 'week',
'wednesday': True
})
# Planning an order Wednesday must now be possible
order_05 = self.env['lunch.order'].create({
'user_id': self.demo_user.id,
'date': next_wednesday,
'order_line_ids': [(0, 0, {
'product_id': self.product_Bolognese_id.id,
})]
})
order_05.order_line_ids.order()