diff --git a/quality_control_issue/tests/__init__.py b/quality_control_issue/tests/__init__.py new file mode 100644 index 000000000..01cc8ee13 --- /dev/null +++ b/quality_control_issue/tests/__init__.py @@ -0,0 +1 @@ +from . import test_quality_control_issue diff --git a/quality_control_issue/tests/test_quality_control_issue.py b/quality_control_issue/tests/test_quality_control_issue.py new file mode 100644 index 000000000..79b937798 --- /dev/null +++ b/quality_control_issue/tests/test_quality_control_issue.py @@ -0,0 +1,235 @@ +# Copyright 2017 Eficent Business and IT Consulting Services S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) + +from odoo.tests import common +from odoo.exceptions import AccessError + + +class TestQualityControlIssue(common.SingleTransactionCase): + + @classmethod + def setUpClass(cls): + super(TestQualityControlIssue, cls).setUpClass() + + cls.qc_problem_grp_obj = cls.env['qc.problem.group'] + cls.qc_problem_obj = cls.env['qc.problem'] + cls.qc_stage_obj = cls.env['qc.stage'] + cls.qc_issue_obj = cls.env['qc.issue'] + cls.qc_issue_stage_obj = cls.env['qc.issue.stage'] + cls.qc_team_obj = cls.env['qc.team'] + cls.stock_scrap_obj = cls.env['stock.scrap'] + cls.product = cls.env['product.product'] + cls.partner = cls.env['res.partner'] + cls.res_users = cls.env['res.users'] + cls.company = cls.env.ref('base.main_company') + + # Create Users and Groups + # User assigned to quality control user group + cls.group_qc_user = cls.env.ref( + 'quality_control.group_quality_control_user') + cls.group_user = cls.env.ref( + 'base.group_user') + cls.qc_user = cls._create_user( + 'qc_user', + [cls.group_qc_user, cls.group_user], + cls.company, + ) + # User assigned to quality control manager group + cls.qc_manager = cls.env.ref('base.user_root') + + # Create products + cls.product_1 = cls.product.create({ + 'name': 'Test Product 1', + 'type': 'product', + 'list_price': 100.0, + }) + cls.product_2 = cls.product.create({ + 'name': 'Test Product 2', + 'type': 'product', + 'list_price': 150.0, + }) + + # Create QC Team + cls.team = cls.qc_team_obj._get_default_qc_team_id( + user_id=cls.qc_user.id) + + @classmethod + def _create_user(self, login, groups, company): + """Create a user.""" + user = self.res_users.create({ + 'name': login, + 'login': login, + 'password': 'demo', + 'email': 'example@yourcompany.com', + 'company_id': company.id, + 'groups_id': [(6, 0, [group.id for group in groups])] + }) + return user + + def test_01_create_qc_problem_group(self): + """Test to create a QC problem group""" + # QC Manager creates QC Problem group + self.qc_problem_group = \ + self.qc_problem_grp_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Problem Group Test", + 'company_id': self.company.id, + }) + + # QC User tries to create QC Problem group + with self.assertRaises(AccessError): + self.qc_problem_grp_obj.sudo(self.qc_user.id).create({ + 'name': "QC Problem Group Test", + 'company_id': self.company.id, + }) + # QC User lists all QC Problem groups + qc_problem_group_list = self.qc_problem_grp_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_problem_group_list), 1, + 'User 2 should have read access ' + 'to all QC problem groups') + + def test_02_create_qc_problem(self): + """Test to create a QC problem""" + # Create first QC Problem Group + qc_problem_group = \ + self.qc_problem_grp_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Problem Group Test", + 'company_id': self.company.id, + }) + # QC Manager creates QC Problem + self.qc_problem = \ + self.qc_problem_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Problem Test", + 'company_id': self.company.id, + 'problem_group_id': qc_problem_group.id, + }) + + # QC User creates QC Problem + self.qc_problem_obj.sudo(self.qc_user.id).create({ + 'name': "QC Problem Test 2", + 'company_id': self.company.id, + 'problem_group_id': qc_problem_group.id, + }) + # QC User lists all QC Problem + qc_problem_list = self.qc_problem_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_problem_list), 2, + 'User 2 should have read access ' + 'to all QC problem') + + def test_03_create_qc_stage(self): + """Test to create a QC stage""" + # QC Manager creates QC Stage + self.qc_stage = \ + self.qc_stage_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Stage Test", + 'team_id': self.team.id, + }) + + # QC User tries to create QC Stage + with self.assertRaises(AccessError): + self.qc_stage_obj.sudo(self.qc_user.id).create({ + 'name': "QC Stage Test 2", + 'team_id': self.team.id, + }) + # QC User lists all QC Stage + qc_stage_list = self.qc_stage_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_stage_list), 3, + 'User 1 should have read access ' + 'to all QC stages') + + def test_04_create_qc_issue(self): + """Test to create a QC issue""" + # QC Manager creates QC Issue + self.qc_issue = \ + self.qc_issue_obj.sudo(self.qc_manager.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_manager.id, + 'product_uom': self.product_1.uom_id.id, + }) + + # QC User creates QC Issue + self.qc_issue_2 = \ + self.qc_issue_obj.sudo(self.qc_user.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_user.id, + 'product_uom': self.product_1.uom_id.id, + }) + # QC User lists all QC Issue + qc_issue_list = self.qc_issue_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_issue_list), 2, + 'User 2 should have read access ' + 'to all QC issues') + + def test_05_create_qc_issue_stage(self): + """Test to create a QC issue stage""" + # QC Manager creates QC Issue Stage + self.qc_issue_stage = \ + self.qc_issue_stage_obj.sudo(self.qc_manager.id).create({ + 'name': "QC Stage Test", + 'qc_team_id': self.team.id, + }) + + # QC User tries to create QC Issue Stage + with self.assertRaises(AccessError): + self.qc_issue_stage_obj.sudo(self.qc_user.id).create({ + 'name': "QC Stage Test 2", + 'qc_team_id': self.team.id, + }) + # QC User lists all QC Issue Stage + qc_issue_stage_list = self.qc_issue_stage_obj. \ + sudo(self.qc_user.id).search([]).mapped('name') + self.assertEquals(len(qc_issue_stage_list), 1, + 'User 2 should have read access ' + 'to all QC stages') + + def test_06_write_qc_issue(self): + """Test to write a QC issue stage""" + # QC Manager creates QC Issue + qc_issue = \ + self.qc_issue_obj.sudo(self.qc_manager.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_manager.id, + 'product_uom': self.product_1.uom_id.id, + }) + + # Change product + qc_issue.sudo(self.qc_manager.id).write({ + 'product_id': self.product_2.id, + 'product_uom': self.product_2.uom_id.id, + }) + + # Change quantity + qc_issue.sudo(self.qc_manager.id).write({'product_qty': 2.0}) + + # Change inspector + qc_issue.sudo(self.qc_manager.id).write({ + 'inspector_id': self.qc_user.id + }) + + def test_07_scrap_products(self): + """Test scrapped products""" + # QC Manager creates QC Issue + qc_issue = \ + self.qc_issue_obj.sudo(self.qc_manager.id).create({ + 'product_id': self.product_1.id, + 'product_qty': 1.0, + 'inspector_id': self.qc_manager.id, + 'product_uom': self.product_1.uom_id.id, + }) + + res = qc_issue.scrap_products() + + scrap = self.stock_scrap_obj.\ + with_context(res.get('context', {})).create({}) + + scrap.action_validate() + qc_issue.action_view_stock_scrap() + + self.assertEquals(qc_issue.stock_scrap_qty, 1, + "Scrap quantity should equal 1")