odoo18/addons/pos_hr/tests/test_frontend.py

171 lines
6.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import Command
from odoo.tests import tagged, new_test_user
from odoo.addons.point_of_sale.tests.test_frontend import TestPointOfSaleHttpCommon
class TestPosHrHttpCommon(TestPointOfSaleHttpCommon):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env.user.groups_id += cls.env.ref('hr.group_hr_user')
cls.main_pos_config.write({"module_pos_hr": True})
# Admin employee
cls.admin = cls.env.ref("hr.employee_admin").sudo().copy({
"company_id": cls.env.company.id,
"user_id": cls.pos_admin.id,
"name": "Mitchell Admin",
"pin": False,
})
# Managers
cls.manager_user = new_test_user(
cls.env,
login="manager_user",
groups="point_of_sale.group_pos_manager",
name="Pos Manager",
email="manager_user@pos.com",
)
cls.manager1 = cls.env['hr.employee'].create({
'name': 'Test Manager 1',
"company_id": cls.env.company.id,
"user_id": cls.manager_user.id,
"pin": "5651"
})
cls.manager2 = cls.env['hr.employee'].create({
'name': 'Test Manager 2',
"company_id": cls.env.company.id,
"pin": "5652"
})
# User employee
cls.emp1 = cls.env['hr.employee'].create({
'name': 'Test Employee 1',
"company_id": cls.env.company.id,
})
emp1_user = new_test_user(
cls.env,
login="emp1_user",
groups="base.group_user",
name="Pos Employee1",
email="emp1_user@pos.com",
)
cls.emp1.write({"name": "Pos Employee1", "pin": "2580", "user_id": emp1_user.id})
# Non-user employee
cls.emp2 = cls.env['hr.employee'].create({
'name': 'Test Employee 2',
"company_id": cls.env.company.id,
})
cls.emp2.write({"name": "Pos Employee2", "pin": "1234"})
(cls.admin + cls.emp1 + cls.emp2).company_id = cls.env.company
cls.emp3 = cls.env['hr.employee'].create({
'name': 'Test Employee 3',
"user_id": cls.pos_user.id,
"company_id": cls.env.company.id,
})
cls.main_pos_config.write({
'basic_employee_ids': [Command.link(cls.emp1.id), Command.link(cls.emp2.id), Command.link(cls.emp3.id)],
'advanced_employee_ids': [Command.link(cls.manager1.id), Command.link(cls.manager2.id)]
})
@tagged("post_install", "-at_install")
class TestUi(TestPosHrHttpCommon):
def test_01_pos_hr_tour(self):
self.pos_admin.write({
"groups_id": [
(4, self.env.ref('account.group_account_invoice').id)
]
})
self.main_pos_config.update({
'advanced_employee_ids': [(6, 0, self.admin.ids)],
})
self.main_pos_config.with_user(self.pos_admin).open_ui()
self.start_pos_tour("PosHrTour", login="pos_admin")
def test_cashier_stay_logged_in(self):
# open a session, the /pos/ui controller will redirect to it
self.main_pos_config.with_user(self.pos_admin).open_ui()
self.start_tour(
"/pos/ui?config_id=%d" % self.main_pos_config.id,
"CashierStayLogged",
login="pos_admin",
)
def test_cashier_can_see_product_info(self):
# open a session, the /pos/ui controller will redirect to it
self.product_a.available_in_pos = True
self.main_pos_config.with_user(self.pos_admin).open_ui()
self.start_tour(
"/pos/ui?config_id=%d" % self.main_pos_config.id,
"CashierCanSeeProductInfo",
login="pos_admin",
)
def test_basic_user_cannot_close_session(self):
# open a session, the /pos/ui controller will redirect to it
self.main_pos_config.advanced_employee_ids = []
self.main_pos_config.basic_employee_ids = [
Command.link(self.emp3.id),
]
self.main_pos_config.with_user(self.pos_admin).open_ui()
self.start_tour(
"/pos/ui?config_id=%d" % self.main_pos_config.id,
"CashierCannotClose",
login="pos_user",
)
def test_basic_user_can_change_price(self):
self.main_pos_config.advanced_employee_ids = []
self.main_pos_config.basic_employee_ids = [
Command.link(self.emp3.id),
Command.link(self.admin.id)
]
self.main_pos_config.write({
"restrict_price_control": False,
})
self.main_pos_config.with_user(self.pos_admin).open_ui()
self.start_tour(
"/pos/ui?config_id=%d" % self.main_pos_config.id,
"test_basic_user_can_change_price",
login="pos_user",
)
def test_cashier_changed_in_receipt(self):
"""
Checks that when the cashier is changed during the order,
the receipts displays the employee that concluded the order,
meaning the one that was at the register when the customer was paying.
Also checks that the order has the right cashier and employee in the same
use case.
"""
self.product_a.available_in_pos = True
self.main_pos_config.with_user(self.pos_admin).open_ui()
self.start_tour(
"/pos/ui?config_id=%d" % self.main_pos_config.id,
"test_cashier_changed_in_receipt",
login="pos_admin",
)
order = self.main_pos_config.current_session_id.order_ids[0]
self.assertEqual(order.cashier, "Test Employee 3")
self.assertEqual(order.employee_id.display_name, "Test Employee 3")
def test_go_backend(self):
self.main_pos_config.with_user(self.manager_user).open_ui()
self.start_pos_tour("pos_hr_go_backend_closed_registered", login="manager_user")
self.start_pos_tour("pos_hr_go_backend_opened_registered", login="manager_user")