mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
quality_control: * Changed permissions
* security modified * some demo info added * Added "partner_selectable" field, so that inspections can by made by partner * Little view fixing, field was oe_edit_only instead of label * Add partners to trigger lines * Tests added * Trigger lines with duplicated test cleaned quality_control: Propose to OCA quality_control: required changes quality_control: Fixing coveralls quality_control_stock: * added demo data * replaced unlink method by ondelete="cascade" * required changes
This commit is contained in:
206
quality_control_oca/tests/test_quality_control.py
Normal file
206
quality_control_oca/tests/test_quality_control.py
Normal file
@@ -0,0 +1,206 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# (c) 2015 Oihane Crucelaegui - AvanzOSC
|
||||
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
|
||||
|
||||
from openerp.tests.common import TransactionCase
|
||||
from openerp import exceptions
|
||||
from ..models.qc_trigger_line import\
|
||||
_filter_trigger_lines
|
||||
|
||||
|
||||
class TestQualityControl(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestQualityControl, self).setUp()
|
||||
self.inspection_model = self.env['qc.inspection']
|
||||
self.category_model = self.env['qc.test.category']
|
||||
self.question_model = self.env['qc.test.question']
|
||||
self.wizard_model = self.env['qc.inspection.set.test']
|
||||
self.qc_trigger = self.env['qc.trigger'].create({
|
||||
'name': 'Test Trigger',
|
||||
'active': True,
|
||||
})
|
||||
self.test = self.env.ref('quality_control.qc_test_1')
|
||||
self.val_ok = self.env.ref('quality_control.qc_test_question_value_1')
|
||||
self.val_ko = self.env.ref('quality_control.qc_test_question_value_2')
|
||||
self.qn_question = self.env.ref('quality_control.qc_test_question_2')
|
||||
self.cat_generic = self.env.ref(
|
||||
'quality_control.qc_test_template_category_generic')
|
||||
self.product = self.env.ref('product.product_product_11')
|
||||
inspection_lines = (
|
||||
self.inspection_model._prepare_inspection_lines(self.test))
|
||||
self.inspection1 = self.inspection_model.create({
|
||||
'name': 'Test Inspection',
|
||||
'inspection_lines': inspection_lines,
|
||||
})
|
||||
self.wizard = self.wizard_model.with_context(
|
||||
active_id=self.inspection1.id).create({
|
||||
'test': self.test.id,
|
||||
})
|
||||
self.wizard.action_create_test()
|
||||
self.inspection1.action_todo()
|
||||
|
||||
def test_inspection_correct(self):
|
||||
for line in self.inspection1.inspection_lines:
|
||||
if line.question_type == 'qualitative':
|
||||
line.qualitative_value = self.val_ok
|
||||
if line.question_type == 'quantitative':
|
||||
line.quantitative_value = 5.0
|
||||
self.inspection1.action_confirm()
|
||||
for line in self.inspection1.inspection_lines:
|
||||
self.assertTrue(
|
||||
line.success,
|
||||
'Incorrect state in inspection line %s' % line.name)
|
||||
self.assertTrue(
|
||||
self.inspection1.success,
|
||||
'Incorrect state in inspection %s' % self.inspection1.name)
|
||||
self.assertEquals(self.inspection1.state, 'success')
|
||||
self.inspection1.action_approve()
|
||||
self.assertEquals(self.inspection1.state, 'success')
|
||||
|
||||
def test_inspection_incorrect(self):
|
||||
for line in self.inspection1.inspection_lines:
|
||||
if line.question_type == 'qualitative':
|
||||
line.qualitative_value = self.val_ko
|
||||
if line.question_type == 'quantitative':
|
||||
line.quantitative_value = 15.0
|
||||
self.inspection1.action_confirm()
|
||||
for line in self.inspection1.inspection_lines:
|
||||
self.assertFalse(
|
||||
line.success,
|
||||
'Incorrect state in inspection line %s' % line.name)
|
||||
self.assertFalse(
|
||||
self.inspection1.success,
|
||||
'Incorrect state in inspection %s' % self.inspection1.name)
|
||||
self.assertEquals(self.inspection1.state, 'waiting')
|
||||
self.inspection1.action_approve()
|
||||
self.assertEquals(self.inspection1.state, 'failed')
|
||||
|
||||
def test_actions_errors(self):
|
||||
inspection2 = self.inspection1.copy()
|
||||
inspection2.action_draft()
|
||||
inspection2.write({'test': False})
|
||||
with self.assertRaises(exceptions.Warning):
|
||||
inspection2.action_todo()
|
||||
inspection3 = self.inspection1.copy()
|
||||
inspection3.write({
|
||||
'inspection_lines':
|
||||
self.inspection_model._prepare_inspection_lines(inspection3.test)
|
||||
})
|
||||
for line in inspection3.inspection_lines:
|
||||
if line.question_type == 'quantitative':
|
||||
line.quantitative_value = 15.0
|
||||
with self.assertRaises(exceptions.Warning):
|
||||
inspection3.action_confirm()
|
||||
inspection4 = self.inspection1.copy()
|
||||
inspection4.write({
|
||||
'inspection_lines':
|
||||
self.inspection_model._prepare_inspection_lines(inspection4.test)
|
||||
})
|
||||
for line in inspection4.inspection_lines:
|
||||
if line.question_type == 'quantitative':
|
||||
line.write({
|
||||
'uom_id': False,
|
||||
'quantitative_value': 15.0,
|
||||
})
|
||||
elif line.question_type == 'qualitative':
|
||||
line.qualitative_value = self.val_ok
|
||||
with self.assertRaises(exceptions.Warning):
|
||||
inspection4.action_confirm()
|
||||
|
||||
def test_categories(self):
|
||||
category1 = self.category_model.create({
|
||||
'name': 'Category ONE',
|
||||
})
|
||||
category2 = self.category_model.create({
|
||||
'name': 'Category TWO',
|
||||
'parent_id': category1.id,
|
||||
})
|
||||
self.assertEquals(
|
||||
category2.complete_name,
|
||||
'%s / %s' % (category1.name, category2.name),
|
||||
'Something went wrong when computing complete name')
|
||||
with self.assertRaises(exceptions.ValidationError):
|
||||
category1.parent_id = category2.id
|
||||
|
||||
def test_get_qc_trigger_product(self):
|
||||
self.test.write({
|
||||
'fill_correct_values': True,
|
||||
})
|
||||
trigger_lines = set()
|
||||
self.product.write({
|
||||
'qc_triggers': [(0, 0, {'trigger': self.qc_trigger.id,
|
||||
'test': self.test.id})],
|
||||
})
|
||||
self.product.product_tmpl_id.write({
|
||||
'qc_triggers': [(0, 0, {'trigger': self.qc_trigger.id,
|
||||
'test': self.test.id})],
|
||||
})
|
||||
self.product.categ_id.write({
|
||||
'qc_triggers': [(0, 0, {'trigger': self.qc_trigger.id,
|
||||
'test': self.test.id})],
|
||||
})
|
||||
for model in ['qc.trigger.product_category_line',
|
||||
'qc.trigger.product_template_line',
|
||||
'qc.trigger.product_line']:
|
||||
trigger_lines = trigger_lines.union(
|
||||
self.env[model].get_trigger_line_for_product(
|
||||
self.qc_trigger, self.product))
|
||||
self.assertEquals(len(trigger_lines), 3)
|
||||
filtered_trigger_lines = _filter_trigger_lines(trigger_lines)
|
||||
self.assertEquals(len(filtered_trigger_lines), 1)
|
||||
for trigger_line in filtered_trigger_lines:
|
||||
inspection = self.inspection_model._make_inspection(
|
||||
self.product, trigger_line)
|
||||
self.assertEquals(inspection.state, 'ready')
|
||||
self.assertTrue(inspection.auto_generated)
|
||||
self.assertEquals(inspection.test, self.test)
|
||||
for line in inspection.inspection_lines:
|
||||
if line.question_type == 'qualitative':
|
||||
self.assertEquals(line.qualitative_value, self.val_ok)
|
||||
elif line.question_type == 'quantitative':
|
||||
self.assertEquals(
|
||||
round(line.quantitative_value, 2), round((
|
||||
self.qn_question.min_value +
|
||||
self.qn_question.max_value) * 0.5, 2))
|
||||
|
||||
def test_qc_inspection_not_draft_unlink(self):
|
||||
with self.assertRaises(exceptions.Warning):
|
||||
self.inspection1.unlink()
|
||||
inspection2 = self.inspection1.copy()
|
||||
inspection2.action_cancel()
|
||||
self.assertEquals(inspection2.state, 'canceled')
|
||||
inspection2.action_draft()
|
||||
self.assertEquals(inspection2.state, 'draft')
|
||||
inspection2.unlink()
|
||||
|
||||
def test_qc_inspection_auto_generate_unlink(self):
|
||||
inspection2 = self.inspection1.copy()
|
||||
inspection2.write({
|
||||
'auto_generated': True,
|
||||
})
|
||||
with self.assertRaises(exceptions.Warning):
|
||||
inspection2.unlink()
|
||||
|
||||
def test_qc_inspection_product(self):
|
||||
self.inspection1.write({
|
||||
'object_id': '%s,%d' % (self.product._model, self.product.id),
|
||||
})
|
||||
self.assertEquals(self.inspection1.product,
|
||||
self.product)
|
||||
|
||||
def test_qc_test_question_constraints(self):
|
||||
with self.assertRaises(exceptions.ValidationError):
|
||||
self.question_model.create({
|
||||
'name': 'Quantitative Question',
|
||||
'type': 'quantitative',
|
||||
'min_value': 1.0,
|
||||
'max_value': 0.0,
|
||||
})
|
||||
with self.assertRaises(exceptions.ValidationError):
|
||||
self.question_model.create({
|
||||
'name': 'Qualitative Question',
|
||||
'type': 'qualitative',
|
||||
'ql_values': [(0, 0, {'name': 'Qualitative answer',
|
||||
'ok': False})],
|
||||
})
|
||||
Reference in New Issue
Block a user