[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:
committed by
Simon Lejeune
parent
355f59eb5d
commit
149e7a7084
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user