[REF] repair: tests

- create new repair instead of using the demo data to make further
  extensions easier
- integrate the fees testing in an existing test
- test the created moves of a repair order
This commit is contained in:
Pierre Masereel
2018-01-29 11:02:12 +01:00
committed by Simon Lejeune
parent 355f59eb5d
commit 149e7a7084
+81 -46
View File
@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from datetime import datetime
from odoo.addons.account.tests.account_test_classes import AccountingTestCase
from odoo.tests import tagged
@@ -34,20 +36,60 @@ class TestRepair(AccountingTestCase):
'email': 'repair_manager@yourcompany.com',
'groups_id': [(6, 0, [self.res_group_manager.id])]})
def test_00_repair_afterinv(self):
def _create_simple_repair_order(self, invoice_method):
product_to_repair = self.env.ref('product.product_product_5')
partner = self.env.ref('base.res_partner_address_1')
return self.env['repair.order'].create({
'product_id': product_to_repair.id,
'product_uom': product_to_repair.uom_id.id,
'address_id': partner.id,
'guarantee_limit': datetime.today().strftime('%Y-%m-%d'),
'invoice_method': invoice_method,
'partner_invoice_id': partner.id,
'location_id': self.env.ref('stock.stock_location_stock').id,
'partner_id': self.env.ref('base.res_partner_12').id
})
def _create_simple_operation(self, repair_id=False, qty=0.0, price_unit=0.0):
product_to_add = self.env.ref('product.product_product_5')
return self.env['repair.line'].create({
'name': 'Add The product',
'type': 'add',
'product_id': product_to_add.id,
'product_uom_qty': qty,
'product_uom': product_to_add.uom_id.id,
'price_unit': price_unit,
'repair_id': repair_id,
'location_id': self.env.ref('stock.stock_location_stock').id,
'location_dest_id': self.env.ref('stock.location_production').id,
})
def _create_simple_fee(self, repair_id=False, qty=0.0, price_unit=0.0):
product_service = self.env.ref('product.product_product_2')
return self.env['repair.fee'].create({
'name': 'PC Assemble + Custom (PC on Demand)',
'product_id': product_service.id,
'product_uom_qty': qty,
'product_uom': product_service.uom_id.id,
'price_unit': price_unit,
'repair_id': repair_id,
})
def test_00_repair_afterinv(self):
repair = self._create_simple_repair_order('after_repair')
self._create_simple_operation(repair_id=repair.id, qty=1.0, price_unit=50.0)
# I confirm Repair order taking Invoice Method 'After Repair'.
self.repair_r0.sudo(self.res_repair_user.id).action_repair_confirm()
repair.sudo(self.res_repair_user.id).action_repair_confirm()
# I check the state is in "Confirmed".
self.assertEqual(self.repair_r0.state, "confirmed", 'Repair order should be in "Confirmed" state.')
self.repair_r0.action_repair_start()
self.assertEqual(repair.state, "confirmed", 'Repair order should be in "Confirmed" state.')
repair.action_repair_start()
# I check the state is in "Under Repair".
self.assertEqual(self.repair_r0.state, "under_repair", 'Repair order should be in "Under_repair" state.')
self.assertEqual(repair.state, "under_repair", 'Repair order should be in "Under_repair" state.')
# Repairing process for product is in Done state and I end Repair process by clicking on "End Repair" button.
self.repair_r0.action_repair_end()
repair.action_repair_end()
# I define Invoice Method 'After Repair' option in this Repair order.so I create invoice by clicking on "Make Invoice" wizard.
make_invoice = self.RepairMakeInvoice.create({
@@ -55,66 +97,59 @@ class TestRepair(AccountingTestCase):
# I click on "Create Invoice" button of this wizard to make invoice.
context = {
"active_model": 'repair_order',
"active_ids": [self.repair_r0.id],
"active_id": self.repair_r0.id
"active_ids": [repair.id],
"active_id": repair.id
}
make_invoice.with_context(context).make_invoices()
# I check that invoice is created for this Repair order.
self.assertEqual(len(self.repair_r0.invoice_id), 1, "No invoice exists for this repair order")
self.assertEqual(len(self.repair_r0.move_id.move_line_ids[0].consume_line_ids), 1, "Consume lines should be set")
def test_01_epair_b4inv(self):
self.assertEqual(len(repair.invoice_id), 1, "No invoice exists for this repair order")
self.assertEqual(len(repair.move_id.move_line_ids[0].consume_line_ids), 1, "Consume lines should be set")
def test_01_repair_b4inv(self):
repair = self._create_simple_repair_order('b4repair')
# I confirm Repair order for Invoice Method 'Before Repair'.
self.repair_r2.sudo(self.res_repair_user.id).action_repair_confirm()
repair.sudo(self.res_repair_user.id).action_repair_confirm()
# I click on "Create Invoice" button of this wizard to make invoice.
self.repair_r2.action_repair_invoice_create()
repair.action_repair_invoice_create()
# I check that invoice is created for this Repair order.
self.assertEqual(len(self.repair_r2.invoice_id), 1, "No invoice exists for this repair order")
# I start the Repairing process by clicking on "Start Repair" button.
self.repair_r2.action_repair_start()
# Repairing process for this product is in Done state and I end this process by clicking on "End Repair" button for Invoice Method 'Before Repair'.
self.repair_r2.action_repair_end()
self.assertEqual(len(repair.invoice_id), 1, "No invoice exists for this repair order")
def test_02_repair_noneinv(self):
repair = self._create_simple_repair_order('none')
# Add a new fee line
self._create_simple_fee(repair_id=repair.id, qty=1.0, price_unit=12.0)
self.assertEqual(repair.amount_total, 12, "Amount_total should be 12")
# Add new operation line
self._create_simple_operation(repair_id=repair.id, qty=1.0, price_unit=14.0)
self.assertEqual(repair.amount_total, 26, "Amount_total should be 26")
# I confirm Repair order for Invoice Method 'No Invoice'.
self.repair_r1.sudo(self.res_repair_user.id).action_repair_confirm()
repair.sudo(self.res_repair_user.id).action_repair_confirm()
# I start the repairing process by clicking on "Start Repair" button for Invoice Method 'No Invoice'.
self.repair_r1.action_repair_start()
repair.action_repair_start()
# I check its state which is in "Under Repair".
self.assertEqual(self.repair_r1.state, "under_repair", 'Repair order should be in "Under_repair" state.')
self.assertEqual(repair.state, "under_repair", 'Repair order should be in "Under_repair" state.')
# Repairing process for product is in Done state and I end this process by clicking on "End Repair" button.
self.repair_r1.action_repair_end()
repair.action_repair_end()
self.assertEqual(repair.move_id.location_id.id, self.env.ref('stock.stock_location_stock').id,
'Repaired product was taken in the wrong location')
self.assertEqual(repair.move_id.location_dest_id.id, self.env.ref('stock.stock_location_stock').id,
'Repaired product went to the wrong location')
self.assertEqual(repair.operations.move_id.location_id.id, self.env.ref('stock.stock_location_stock').id,
'Consumed product was taken in the wrong location')
self.assertEqual(repair.operations.move_id.location_dest_id.id, self.env.ref('stock.location_production').id,
'Consumed product went to the wrong location')
# I define Invoice Method 'No Invoice' option in this repair order.
# So, I check that Invoice has not been created for this repair order.
self.assertNotEqual(len(self.repair_r1.invoice_id), 1, "Invoice should not exist for this repair order")
def test_03_repair_fee(self):
# I check the total amount of repair_r1 is 100
self.assertEqual(self.repair_r1.amount_total, 100, "Amount_total should be 100")
# I add a new fee line
product_assembly = self.env.ref('product.product_product_5')
product_uom_hour = self.env.ref('product.product_uom_hour')
self.RepairFee = self.env['repair.fee']
self.RepairFee.create({
'name': 'PC Assemble + Custom (PC on Demand)',
'product_id': product_assembly.id,
'product_uom_qty': 1.0,
'product_uom': product_uom_hour.id,
'price_unit': 12.0,
'repair_id': self.repair_r1.id})
# I check the total amount of repair_r1 is now 112
self.assertEqual(self.repair_r1.amount_total, 112, "Amount_total should be 100")
self.assertNotEqual(len(repair.invoice_id), 1, "Invoice should not exist for this repair order")