first commit
This commit is contained in:
2
modules/stock_shipment_measurements/tests/__init__.py
Normal file
2
modules/stock_shipment_measurements/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
Binary file not shown.
Binary file not shown.
305
modules/stock_shipment_measurements/tests/test_module.py
Normal file
305
modules/stock_shipment_measurements/tests/test_module.py
Normal file
@@ -0,0 +1,305 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from decimal import Decimal
|
||||
|
||||
from trytond.modules.company.tests import (
|
||||
CompanyTestMixin, create_company, set_company)
|
||||
from trytond.pool import Pool
|
||||
from trytond.tests.test_tryton import (
|
||||
ModuleTestCase, activate_module, with_transaction)
|
||||
|
||||
|
||||
class StockShipmentMeasurementsTestCase(CompanyTestMixin, ModuleTestCase):
|
||||
'Test Stock Shipment Measurements module'
|
||||
module = 'stock_shipment_measurements'
|
||||
extras = ['stock_package']
|
||||
longMessage = True
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
activate_module('stock_package')
|
||||
|
||||
@with_transaction()
|
||||
def test_move_internal_measurements(self):
|
||||
"Test move internal measurements"
|
||||
pool = Pool()
|
||||
Uom = pool.get('product.uom')
|
||||
Template = pool.get('product.template')
|
||||
Product = pool.get('product.product')
|
||||
Location = pool.get('stock.location')
|
||||
Move = pool.get('stock.move')
|
||||
|
||||
kg, = Uom.search([('name', '=', 'Kilogram')])
|
||||
g, = Uom.search([('name', '=', 'Gram')])
|
||||
liter, = Uom.search([('name', '=', 'Liter')])
|
||||
supplier, = Location.search([('code', '=', 'SUP')])
|
||||
storage, = Location.search([('code', '=', 'STO')])
|
||||
company = create_company()
|
||||
currency = company.currency
|
||||
|
||||
template, = Template.create([{
|
||||
'name': "Test internal measurements",
|
||||
'type': 'goods',
|
||||
'default_uom': kg,
|
||||
}])
|
||||
product, = Product.create([{
|
||||
'template': template.id,
|
||||
}])
|
||||
|
||||
# without any measurements
|
||||
with set_company(company):
|
||||
move, = Move.create([{
|
||||
'product': product,
|
||||
'unit': g,
|
||||
'quantity': 200,
|
||||
'from_location': supplier,
|
||||
'to_location': storage,
|
||||
'company': company,
|
||||
'unit_price': Decimal(1),
|
||||
'currency': currency,
|
||||
}])
|
||||
self.assertEqual(move.internal_weight, 0.2)
|
||||
self.assertEqual(move.internal_volume, None)
|
||||
|
||||
Move.write([move], {'quantity': 100})
|
||||
self.assertEqual(move.internal_weight, 0.1)
|
||||
self.assertEqual(move.internal_volume, None)
|
||||
|
||||
template.weight = 1.1
|
||||
template.weight_uom = kg
|
||||
template.save()
|
||||
|
||||
# with weight measurements
|
||||
with set_company(company):
|
||||
move, = Move.create([{
|
||||
'product': product,
|
||||
'unit': g,
|
||||
'quantity': 300,
|
||||
'from_location': supplier,
|
||||
'to_location': storage,
|
||||
'company': company,
|
||||
'unit_price': Decimal(1),
|
||||
'currency': currency,
|
||||
}])
|
||||
self.assertEqual(move.internal_weight, 0.33)
|
||||
self.assertEqual(move.internal_volume, None)
|
||||
|
||||
Move.write([move], {'quantity': 500})
|
||||
self.assertEqual(move.internal_weight, 0.55)
|
||||
self.assertEqual(move.internal_volume, None)
|
||||
|
||||
template.volume = 2
|
||||
template.volume_uom = liter
|
||||
template.save()
|
||||
|
||||
# with weight and volume measurements
|
||||
with set_company(company):
|
||||
move, = Move.create([{
|
||||
'product': product,
|
||||
'unit': g,
|
||||
'quantity': 500,
|
||||
'from_location': supplier,
|
||||
'to_location': storage,
|
||||
'company': company,
|
||||
'unit_price': Decimal(1),
|
||||
'currency': currency,
|
||||
}])
|
||||
self.assertEqual(move.internal_weight, 0.55)
|
||||
self.assertEqual(move.internal_volume, 1)
|
||||
|
||||
Move.write([move], {'quantity': 600})
|
||||
self.assertEqual(move.internal_weight, 0.66)
|
||||
self.assertEqual(move.internal_volume, 1.2)
|
||||
|
||||
@with_transaction()
|
||||
def test_shipment_out_measurements(self):
|
||||
"Test shipment out measurements"
|
||||
pool = Pool()
|
||||
Uom = pool.get('product.uom')
|
||||
Template = pool.get('product.template')
|
||||
Product = pool.get('product.product')
|
||||
Location = pool.get('stock.location')
|
||||
Move = pool.get('stock.move')
|
||||
Shipment = pool.get('stock.shipment.out')
|
||||
Package = pool.get('stock.package')
|
||||
PackageType = pool.get('stock.package.type')
|
||||
Party = pool.get('party.party')
|
||||
|
||||
kg, = Uom.search([('name', '=', 'Kilogram')])
|
||||
liter, = Uom.search([('name', '=', 'Liter')])
|
||||
customer, = Location.search([('code', '=', 'CUS')])
|
||||
party = Party(name='Customer')
|
||||
party.addresses = [{}]
|
||||
party.save()
|
||||
company = create_company()
|
||||
currency = company.currency
|
||||
package_type = PackageType(name="Type")
|
||||
package_type.save()
|
||||
|
||||
template, = Template.create([{
|
||||
'name': "Test measurements",
|
||||
'type': 'goods',
|
||||
'default_uom': kg,
|
||||
'volume': 0.2,
|
||||
'volume_uom': liter,
|
||||
}])
|
||||
product, = Product.create([{
|
||||
'template': template.id,
|
||||
}])
|
||||
|
||||
with set_company(company):
|
||||
shipment = Shipment()
|
||||
shipment.customer = party
|
||||
shipment.delivery_address, = party.addresses
|
||||
shipment.warehouse = Shipment.default_warehouse()
|
||||
shipment.on_change_warehouse()
|
||||
shipment.save()
|
||||
|
||||
# without moves
|
||||
self.assertEqual(shipment.weight, None)
|
||||
self.assertEqual(shipment.volume, None)
|
||||
|
||||
shipment.moves = [Move(
|
||||
product=product,
|
||||
unit=kg,
|
||||
quantity=10,
|
||||
from_location=shipment.warehouse.output_location,
|
||||
to_location=customer,
|
||||
company=company,
|
||||
unit_price=Decimal(1),
|
||||
currency=currency,
|
||||
)]
|
||||
shipment.save()
|
||||
|
||||
# without inventory moves
|
||||
self.assertEqual(shipment.weight, 10)
|
||||
self.assertEqual(shipment.volume, 2)
|
||||
|
||||
Shipment.wait([shipment])
|
||||
Shipment.pick([shipment])
|
||||
|
||||
# with inventory moves
|
||||
self.assertEqual(shipment.weight, 10)
|
||||
self.assertEqual(shipment.volume, 2)
|
||||
|
||||
for clause, result in [
|
||||
([('weight', '=', 10)], [shipment]),
|
||||
([('weight', '=', 5)], []),
|
||||
([('weight', 'in', [10, 5])], [shipment]),
|
||||
([('volume', '=', 2)], [shipment]),
|
||||
([('volume', '=', 3)], []),
|
||||
([('volume', 'in', [2, 3])], [shipment]),
|
||||
]:
|
||||
msg = 'clause: %s' % clause
|
||||
self.assertEqual(Shipment.search(clause), result, msg=msg)
|
||||
|
||||
# Add packages
|
||||
package_root = Package()
|
||||
package_root.type = package_type
|
||||
package_root.shipment = shipment
|
||||
package_root.additional_weight = 1
|
||||
package_root.packaging_volume = 3
|
||||
package_root.packaging_volume_uom = liter
|
||||
package_root.save()
|
||||
|
||||
package = Package()
|
||||
package.type = package_type
|
||||
package.shipment = shipment
|
||||
package.moves = shipment.outgoing_moves
|
||||
package.parent = package_root
|
||||
package.save()
|
||||
|
||||
self.assertEqual(package_root.weight, None)
|
||||
self.assertEqual(package_root.volume, None)
|
||||
|
||||
self.assertEqual(package.weight, 10)
|
||||
self.assertEqual(package.volume, 2)
|
||||
|
||||
self.assertEqual(package_root.total_weight, 11)
|
||||
self.assertEqual(package_root.total_volume, 3)
|
||||
|
||||
self.assertEqual(package.total_weight, 10)
|
||||
self.assertEqual(package.total_volume, 2)
|
||||
|
||||
Shipment.pack([shipment])
|
||||
Shipment.do([shipment])
|
||||
|
||||
self.assertEqual(shipment.internal_weight, 10)
|
||||
self.assertEqual(shipment.internal_volume, 2)
|
||||
self.assertEqual(shipment.weight, 10)
|
||||
self.assertEqual(shipment.volume, 2)
|
||||
|
||||
for clause, result in [
|
||||
([('weight', '=', 10)], [shipment]),
|
||||
([('weight', '=', 5)], []),
|
||||
([('weight', 'in', [10, 5])], [shipment]),
|
||||
([('volume', '=', 2)], [shipment]),
|
||||
([('volume', '=', 3)], []),
|
||||
([('volume', 'in', [2, 3])], [shipment]),
|
||||
]:
|
||||
msg = 'clause: %s' % clause
|
||||
self.assertEqual(Shipment.search(clause), result, msg=msg)
|
||||
|
||||
@with_transaction()
|
||||
def test_shipment_internal_measurements(self):
|
||||
"Test shipment internal measurements"
|
||||
pool = Pool()
|
||||
Uom = pool.get('product.uom')
|
||||
Template = pool.get('product.template')
|
||||
Product = pool.get('product.product')
|
||||
Location = pool.get('stock.location')
|
||||
Move = pool.get('stock.move')
|
||||
Shipment = pool.get('stock.shipment.internal')
|
||||
|
||||
kg, = Uom.search([('name', '=', 'Kilogram')])
|
||||
liter, = Uom.search([('name', '=', 'Liter')])
|
||||
warehouse1, = Location.search([('type', '=', 'warehouse')])
|
||||
warehouse2, = Location.copy([warehouse1])
|
||||
company = create_company()
|
||||
|
||||
template, = Template.create([{
|
||||
'name': "Test measurements",
|
||||
'type': 'goods',
|
||||
'default_uom': kg,
|
||||
'volume': 0.2,
|
||||
'volume_uom': liter,
|
||||
}])
|
||||
product, = Product.create([{
|
||||
'template': template.id,
|
||||
}])
|
||||
|
||||
with set_company(company):
|
||||
shipment = Shipment()
|
||||
shipment.from_location = warehouse1.storage_location
|
||||
shipment.to_location = warehouse2.storage_location
|
||||
shipment.save()
|
||||
|
||||
# without moves
|
||||
self.assertEqual(shipment.weight, 0)
|
||||
self.assertEqual(shipment.volume, 0)
|
||||
|
||||
shipment.moves = [Move(
|
||||
product=product,
|
||||
unit=kg,
|
||||
quantity=10,
|
||||
from_location=shipment.from_location,
|
||||
to_location=shipment.to_location,
|
||||
company=company,
|
||||
)]
|
||||
shipment.save()
|
||||
|
||||
# without transit
|
||||
self.assertEqual(shipment.weight, 10)
|
||||
self.assertEqual(shipment.volume, 2)
|
||||
|
||||
Shipment.wait([shipment])
|
||||
self.assertEqual(len(shipment.moves), 2)
|
||||
|
||||
# with transit
|
||||
self.assertEqual(shipment.weight, 10)
|
||||
self.assertEqual(shipment.volume, 2)
|
||||
|
||||
|
||||
del ModuleTestCase
|
||||
Reference in New Issue
Block a user