Commit 609e55ad authored by Vincent Pelletier's avatar Vincent Pelletier

Cleanup.

Reduce differences between similar tests.
Remove bit-rot comments.
Simplify code (avoid redundant lookups, ...).
Also, make easier to subclass and use for a different category tree.
parent 2ba67a83
...@@ -25,441 +25,326 @@ ...@@ -25,441 +25,326 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# #
############################################################################## ##############################################################################
# import requested python module
import os import os
from Products.ERP5Type.tests.Sequence import SequenceList from Products.ERP5Type.tests.Sequence import SequenceList
from Products.ERP5Banking.tests.TestERP5BankingMixin import TestERP5BankingMixin from Products.ERP5Banking.tests.TestERP5BankingMixin import TestERP5BankingMixin
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
# Needed in order to have a log file inside the current folder
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
# Define the level of log we want, here is all
os.environ['EVENT_LOG_SEVERITY'] = '-300' os.environ['EVENT_LOG_SEVERITY'] = '-300'
class TestERP5BankingCashToCurrencyPurchase(TestERP5BankingMixin): class TestERP5BankingCashToCurrencyPurchase(TestERP5BankingMixin):
""" RUN_ALL_TEST = 1
Unit test for the cash exchange module QUIET = 0
Source = destination # Relative to "site" category
Initial cash detail : COUNTER_RELATIVE_URL = 'testsite/paris/surface/banque_interne/guichet_1'
5 banknotes of 10000 # Relative to counter
12 coin of 200 INCOMING_COUNTER_RELATIVE_URL = 'encaisse_des_devises/usd/sortante'
24 banknotes of 5000 OUTGOING_COUNTER_RELATIVE_URL = 'encaisse_des_billets_et_monnaies/sortante'
0 coin of 100
Ordered by Assignor
Confirmed by Assignee
Delivered by DestinationAssignee
Final cash detail :
0 banknotes of 10000
0 coin of 200
34 banknotes of 5000
24 coin of 100
"""
outgoing_quantity_5000 = {'variation/1992': 4, 'variation/2003': 6}
# pseudo constants outgoing_quantity_100 = {'variation/1992': 120, 'variation/2003': 0}
RUN_ALL_TEST = 1 # we want to run all test
QUIET = 0 # we don't want the test to be quiet
outgoing_quantity_5000 = {'variation/1992':4, 'variation/2003':6}
outgoing_quantity_100 = {'variation/1992':120, 'variation/2003':0}
def getTitle(self): def getTitle(self):
"""
Return the title of the test
"""
return "ERP5BankingCashToCurrencyPurchase" return "ERP5BankingCashToCurrencyPurchase"
def afterSetUp(self): def afterSetUp(self):
"""
Method called before the launch of the test to initialize some data
"""
self.initDefaultVariable() self.initDefaultVariable()
# Set some variables :
self.cash_to_currency_purchase_module = self.getCashToCurrencyPurchaseModule() self.cash_to_currency_purchase_module = self.getCashToCurrencyPurchaseModule()
# Create a user and login as manager to populate the erp5 portal with objects for tests.
self.createManagerAndLogin() self.createManagerAndLogin()
self.createFunctionGroupSiteCategory() self.createFunctionGroupSiteCategory()
self.guichet = counter = self.getPortalObject().portal_categories.site.\
""" unrestrictedTraverse(self.COUNTER_RELATIVE_URL)
Windows to create the BANKNOTES of 10 000 and 5000, coins 200. self.guichet_entrante = counter.unrestrictedTraverse(
It s same to click to the fast input button. self.INCOMING_COUNTER_RELATIVE_URL)
""" self.guichet_sortante = outgoing_counter = counter.unrestrictedTraverse(
self.OUTGOING_COUNTER_RELATIVE_URL)
inventory_dict_line_1 = {'id' : 'inventory_line_1', self.createCashInventory(
'resource': self.billet_5000, source=None,
'variation_id': ('emission_letter', 'cash_status', 'variation'), destination=outgoing_counter,
'variation_value': ('emission_letter/p', 'cash_status/valid') + self.variation_list, currency=self.currency_1,
'quantity': self.outgoing_quantity_5000} line_list=[
{
'id': 'inventory_line_1',
inventory_dict_line_2 = {'id' : 'inventory_line_2', 'resource': self.billet_5000,
'resource': self.piece_100, 'variation_id': ('emission_letter', 'cash_status', 'variation'),
'variation_id': ('emission_letter', 'cash_status', 'variation'), 'variation_value': ('emission_letter/p', 'cash_status/valid') + self.variation_list,
'variation_value': ('emission_letter/not_defined', 'cash_status/valid') + self.variation_list, 'quantity': self.outgoing_quantity_5000,
'quantity': self.outgoing_quantity_100 } }, {
'id': 'inventory_line_2',
'resource': self.piece_100,
'variation_id': ('emission_letter', 'cash_status', 'variation'),
'variation_value': ('emission_letter/not_defined', 'cash_status/valid') + self.variation_list,
line_list_sortante = [inventory_dict_line_1, inventory_dict_line_2] 'quantity': self.outgoing_quantity_100,
},
self.guichet_entrante = self.paris.surface.banque_interne.guichet_1.encaisse_des_devises.usd.sortante ],
self.guichet_sortante = self.paris.surface.banque_interne.guichet_1.encaisse_des_billets_et_monnaies.sortante )
self.guichet = self.paris.surface.banque_interne.guichet_1
self.createCashInventory(source=None, destination=self.guichet_sortante, currency=self.currency_1,
line_list=line_list_sortante)
# now we need to create a user as Manager to do the test
# in order to have an assigment defined which is used to do transition
# Create an Organisation that will be used for users assignment
self.checkUserFolderType() self.checkUserFolderType()
self.organisation = self.organisation_module.newContent(id='paris', portal_type='Organisation', self.createERP5Users({
function='banking', group='baobab', site='testsite/paris') 'super_user' : [
# define the user ['Manager'],
user_dict = { self.organisation_module['site_P10'],
'super_user' : [['Manager'], self.organisation, 'banking/comptable', 'baobab', 'testsite/paris/surface/banque_interne/guichet_1'] 'banking/comptable',
} 'baobab',
# call method to create this user counter.getCategoryRelativeUrl(),
self.createERP5Users(user_dict) ],
})
self.logout() self.logout()
self.login('super_user') self.login('super_user')
# open counter date and counter self.openCounterDate(site=outgoing_counter)
self.openCounterDate(site=self.paris.surface.banque_interne.guichet_1.encaisse_des_billets_et_monnaies.sortante) self.openCounter(site=counter)
self.openCounter(site=self.paris.surface.banque_interne.guichet_1)
def stepCheckObjects(self, sequence=None, sequence_list=None, **kwd): def stepCheckObjects(self, sequence=None, sequence_list=None, **kwd):
"""
Check that all the objects we created in afterSetUp or
that were added by the business template and that we rely
on are really here.
"""
self.checkResourceCreated() self.checkResourceCreated()
# check that CashToCurrencyPurchase Module was created module = self.cash_to_currency_purchase_module
self.assertEqual(self.cash_to_currency_purchase_module.getPortalType(), 'Cash To Currency Purchase Module') self.assertEqual(module.getPortalType(), 'Cash To Currency Purchase Module')
# check cash sorting module is empty self.assertEqual(len(module), 0)
self.assertEqual(len(self.cash_to_currency_purchase_module.objectValues()), 0)
def stepCheckInitialInventoryGuichet_Entrante(self, sequence=None, sequence_list=None,
**kwd):
def stepCheckInitialInventoryGuichet_Entrante(self, sequence=None, sequence_list=None, **kwd): assertEqual = self.assertEqual
""" simulation_tool = self.getSimulationTool()
Check the initial inventory before any operations node = node=self.guichet_entrante.getRelativeUrl()
""" resource = self.usd_billet_20.getRelativeUrl()
assertEqual(simulation_tool.getCurrentInventory(node=node, resource=resource), 0.0)
self.simulation_tool = self.getSimulationTool() assertEqual(simulation_tool.getFutureInventory(node=node, resource=resource), 0.0)
# check we have 0 banknotes of 10000 in encaisse_paris
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 0.0)
def stepCheckInitialInventoryGuichet_Sortante(self, sequence=None, sequence_list=None, **kwd): def stepCheckInitialInventoryGuichet_Sortante(self, sequence=None, sequence_list=None, **kwd):
""" """
Check the initial inventory before any operations Check the initial inventory before any operations
""" """
self.simulation_tool = self.getSimulationTool() assertEqual = self.assertEqual
# check we have 0 banknotes of 10000 in encaisse_paris simulation_tool = self.getSimulationTool()
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_10000.getRelativeUrl()), 0.0) node = node=self.guichet_sortante.getRelativeUrl()
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_10000.getRelativeUrl()), 0.0) banknote_10k = self.billet_10000.getRelativeUrl()
# check we have 0 coin of 200 in encaisse_paris banknote_5k = self.billet_5000.getRelativeUrl()
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_200.getRelativeUrl()), 0.0) coin_200 = self.piece_200.getRelativeUrl()
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_200.getRelativeUrl()), 0.0) coin_100 = self.piece_100.getRelativeUrl()
assertEqual(simulation_tool.getCurrentInventory(node=node, resource=banknote_10k), 0.0)
# check we have 10 banknotes of 5000 in encaisse_paris assertEqual(simulation_tool.getFutureInventory(node=node, resource=banknote_10k), 0.0)
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 10.0) assertEqual(simulation_tool.getCurrentInventory(node=node, resource=coin_200), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 10.0) assertEqual(simulation_tool.getFutureInventory(node=node, resource=coin_200), 0.0)
# check we have 24 coin of 100 in encaisse_paris assertEqual(simulation_tool.getCurrentInventory(node=node, resource=banknote_5k), 10.0)
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 120.0) assertEqual(simulation_tool.getFutureInventory(node=node, resource=banknote_5k), 10.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 120.0) assertEqual(simulation_tool.getCurrentInventory(node=node, resource=coin_100), 120.0)
assertEqual(simulation_tool.getFutureInventory(node=node, resource=coin_100), 120.0)
def stepCreateCashToCurrencyPurchase(self, sequence=None, sequence_list=None, **kwd): def stepCreateCashToCurrencyPurchase(self, sequence=None, sequence_list=None, **kwd):
""" portal = self.getPortalObject()
Create a cash sorting document and check it module = self.cash_to_currency_purchase_module
""" self.cash_to_currency_purchase = document = module.newContent(
# Cash sorting has encaisse_paris for source, guichet_1 for destination, and a price cooreponding to the sum of banknote of 10000 and banknotes of 200 ( (2+3) * 10000 + (2+3) * 200 ) id='cash_to_currency_purchase_1',
self.cash_to_currency_purchase = self.cash_to_currency_purchase_module.newContent( portal_type='Cash To Currency Purchase',
id='cash_to_currency_purchase_1', source_value=self.guichet,
portal_type='Cash To Currency Purchase', destination_value=None,
source_value=self.guichet, description='test',
destination_value=None, resource_value=self.currency_2,
description='test', source_total_asset_price=100.0,
resource_value = self.currency_2, )
source_total_asset_price=100.0)
# execute tic
self.tic() self.tic()
# check we have only one cash sorting self.assertEqual(len(module), 1)
self.assertEqual(len(self.cash_to_currency_purchase_module.objectValues()), 1) self.assertEqual(document.getSource(), self.guichet.getRelativeUrl())
# get the cash sorting document self.assertEqual(document.getDestination(), None)
self.cash_to_currency_purchase = getattr(self.cash_to_currency_purchase_module, 'cash_to_currency_purchase_1') self.setDocumentSourceReference(document)
# check its portal type self.tic()
self.assertEqual(self.cash_to_currency_purchase.getPortalType(), 'Cash To Currency Purchase') rate = document.CurrencyExchange_getExchangeRateList(
# check that its source is encaisse_paris from_currency=document.getResource(),
self.assertEqual(self.cash_to_currency_purchase.getSource(), 'site/testsite/paris/surface/banque_interne/guichet_1') to_currency='currency_module/%s' % (
# check that its destination is guichet_1 portal.Baobab_getPortalReferenceCurrencyID(), ),
self.assertEqual(self.cash_to_currency_purchase.getDestination(), None) currency_exchange_type='purchase',
self.setDocumentSourceReference(self.cash_to_currency_purchase) start_date=document.getStartDate(),
# check default exchange rate )[0]
rate = self.cash_to_currency_purchase.CurrencyExchange_getExchangeRateList(from_currency=self.cash_to_currency_purchase.getResource(),
to_currency='currency_module/%s' % (self.cash_to_currency_purchase.Baobab_getPortalReferenceCurrencyID()),
currency_exchange_type='purchase',
start_date=self.cash_to_currency_purchase.getStartDate())[0]
self.assertEqual(rate, 650.0) self.assertEqual(rate, 650.0)
# Check carrefully the script CurrencyPurchase_getQuantity script = document.CurrencyPurchase_getQuantity
script = self.cash_to_currency_purchase.CurrencyPurchase_getQuantity
self.assertEqual(script(), 65000) self.assertEqual(script(), 65000)
self.cash_to_currency_purchase.setDiscountRatio(0.01) document.setDiscountRatio(0.01)
self.assertEqual(script(), 64350) self.assertEqual(script(), 64350)
self.cash_to_currency_purchase.setDiscountRatio(None) document.setDiscountRatio(None)
self.cash_to_currency_purchase.setDiscount(3000) document.setDiscount(3000)
self.assertEqual(script(), 62000) self.assertEqual(script(), 62000)
# Check that we can define a specific rate document.setCurrencyExchangeRate(660)
self.cash_to_currency_purchase.setCurrencyExchangeRate(660)
self.assertEqual(script(), 63000) self.assertEqual(script(), 63000)
self.cash_to_currency_purchase.setCurrencyExchangeRate(None) document.setCurrencyExchangeRate(None)
self.assertEqual(script(), 62000) self.assertEqual(script(), 62000)
#def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None, **kwd): def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None,
def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None, **kwd): **kwd):
""" document = self.cash_to_currency_purchase
Create the cash exchange incoming line with banknotes of 10000 and check it has been well created line_1_id = 'valid_incoming_line_1'
""" self.addCashLineToDelivery(
# create the cash exchange line document,
self.addCashLineToDelivery(self.cash_to_currency_purchase, 'valid_incoming_line_1', 'Incoming Cash To Currency Purchase Line', self.usd_billet_20, line_1_id,
('emission_letter', 'cash_status', 'variation'), ('emission_letter/not_defined', 'cash_status/not_defined') + self.usd_variation_list, 'Incoming Cash To Currency Purchase Line',
self.quantity_usd_20, self.usd_billet_20,
variation_list = self.usd_variation_list) ('emission_letter', 'cash_status', 'variation'),
# execute tic ('emission_letter/not_defined', 'cash_status/not_defined') + \
self.usd_variation_list,
self.quantity_usd_20,
variation_list=self.usd_variation_list,
)
self.tic() self.tic()
# check there is only one line created self.assertEqual(len(document), 1)
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 1) line = getattr(document, line_1_id)
# get the cash exchange line self.assertEqual(line.getResourceValue(), self.usd_billet_20)
self.valid_incoming_line = getattr(self.cash_to_currency_purchase, 'valid_incoming_line_1') self.assertEqual(line.getPrice(), 20.0)
# check its portal type self.assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(self.valid_incoming_line.getPortalType(), 'Incoming Cash To Currency Purchase Line') self.assertEqual(len(line), 1)
# check the resource is banknotes of 20
self.assertEqual(self.valid_incoming_line.getResourceValue(), self.usd_billet_20)
# chek the value of the banknote
self.assertEqual(self.valid_incoming_line.getPrice(), 20.0)
# check the unit of banknote
self.assertEqual(self.valid_incoming_line.getQuantityUnit(), 'unit')
# check we have two delivery cells: (one for year 1992 and one for 2003)
self.assertEqual(len(self.valid_incoming_line.objectValues()), 1)
# now check for each variation (years 1992 and 2003)
for variation in self.usd_variation_list: for variation in self.usd_variation_list:
# get the delivery cell cell = line.getCell('emission_letter/not_defined', variation,
cell = self.valid_incoming_line.getCell('emission_letter/not_defined', variation, 'cash_status/not_defined') 'cash_status/not_defined')
# chek portal types
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell') self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
# check the banknote of the cell is banknote of 10000
self.assertEqual(cell.getResourceValue(), self.usd_billet_20) self.assertEqual(cell.getResourceValue(), self.usd_billet_20)
# check the source vault is encaisse_paris
self.assertEqual(cell.getBaobabSource(), None) self.assertEqual(cell.getBaobabSource(), None)
# check the destination vault is guichet_1 self.assertEqual(cell.getBaobabDestination(),
self.assertEqual(cell.getBaobabDestination(), 'site/testsite/paris/surface/banque_interne/guichet_1/encaisse_des_devises/usd/sortante') self.guichet_entrante.getRelativeUrl())
if cell.getId() == 'movement_0_0_0': cell_id = cell.getId()
# check the quantity of banknote 20 if cell_id == 'movement_0_0_0':
self.assertEqual(cell.getQuantity(), 5.0) self.assertEqual(cell.getQuantity(), 5.0)
else: else:
self.fail('Wrong cell created : %s' % cell.getId()) self.fail('Unexpected cell id: %s' % (cell_id, ))
def stepCheckSubTotal(self, sequence=None, sequence_list=None, **kwd): def stepCheckSubTotal(self, sequence=None, sequence_list=None, **kwd):
""" document = self.cash_to_currency_purchase
Check the amount after the creation of cash exchange line 1 assertEqual = self.assertEqual
""" assertEqual(len(document), 1)
# Check number of lines assertEqual(document.getTotalQuantity(fast=0,
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 1) portal_type="Incoming Cash To Currency Purchase Line"), 5.0)
# Check quantity of banknotes (2 for 1992 and 3 for 2003) assertEqual(document.getTotalPrice(fast=0,
self.assertEqual(self.cash_to_currency_purchase.getTotalQuantity(fast=0, portal_type="Incoming Cash To Currency Purchase Line"), 5.0) portal_type="Incoming Cash To Currency Purchase Line"), 20 * 5.0)
# Check the total price
self.assertEqual(self.cash_to_currency_purchase.getTotalPrice(fast=0, portal_type="Incoming Cash To Currency Purchase Line"), 20 * 5.0)
def stepCreateValidOutgoingLine(self, sequence=None, sequence_list=None, **kwd): def stepCreateValidOutgoingLine(self, sequence=None, sequence_list=None, **kwd):
""" document = self.cash_to_currency_purchase
Create the cash sorting outgoing line wiht banknotes of 200 and check it has been well created assertEqual = self.assertEqual
""" source = self.guichet_sortante.getRelativeUrl()
# create the line line_2_id = 'valid_outgoing_line_1'
self.addCashLineToDelivery(self.cash_to_currency_purchase, 'valid_outgoing_line_1', 'Outgoing Cash To Currency Purchase Line', self.billet_5000, self.addCashLineToDelivery(
('emission_letter', 'cash_status', 'variation'), ('emission_letter/p', 'cash_status/valid') + self.variation_list, document,
self.outgoing_quantity_5000) line_2_id,
# execute tic 'Outgoing Cash To Currency Purchase Line',
self.billet_5000,
('emission_letter', 'cash_status', 'variation'),
('emission_letter/p', 'cash_status/valid') + self.variation_list,
self.outgoing_quantity_5000,
)
self.tic() self.tic()
# check the number of lines (line1 + line2) assertEqual(len(document), 2)
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 2) line = getattr(document, line_2_id)
# get the second cash exchange line assertEqual(line.getPortalType(),
self.valid_outgoing_line = getattr(self.cash_to_currency_purchase, 'valid_outgoing_line_1') 'Outgoing Cash To Currency Purchase Line')
# check portal types assertEqual(line.getResourceValue(), self.billet_5000)
self.assertEqual(self.valid_outgoing_line.getPortalType(), 'Outgoing Cash To Currency Purchase Line') assertEqual(line.getPrice(), 5000.0)
# check the resource is coin of 200 assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(self.valid_outgoing_line.getResourceValue(), self.billet_5000) assertEqual(len(line), 2)
# check the value of coin
self.assertEqual(self.valid_outgoing_line.getPrice(), 5000.0)
# check the unit of coin
self.assertEqual(self.valid_outgoing_line.getQuantityUnit(), 'unit')
# check we have two delivery cells: (one for year 1992 and one for 2003)
self.assertEqual(len(self.valid_outgoing_line.objectValues()), 2)
for variation in self.variation_list: for variation in self.variation_list:
# get the delivery cell cell = line.getCell('emission_letter/p', variation, 'cash_status/valid')
cell = self.valid_outgoing_line.getCell('emission_letter/p', variation, 'cash_status/valid') assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
# check the portal type assertEqual(cell.getBaobabSource(), source)
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell') assertEqual(cell.getBaobabDestination(), None)
# check the source vault is encaisse_paris cell_id = cell.getId()
self.assertEqual(cell.getBaobabSource(), 'site/testsite/paris/surface/banque_interne/guichet_1/encaisse_des_billets_et_monnaies/sortante') if cell_id == 'movement_0_0_0':
# check the destination vault is guichet_1 assertEqual(cell.getQuantity(), 4.0)
self.assertEqual(cell.getBaobabDestination(), None) elif cell_id == 'movement_0_1_0':
if cell.getId() == 'movement_0_0_0': assertEqual(cell.getQuantity(), 6.0)
# check the quantity for coin for year 1992 is 5
self.assertEqual(cell.getQuantity(), 4.0)
elif cell.getId() == 'movement_0_1_0':
# check the quantity for coin for year 2003 is 7
self.assertEqual(cell.getQuantity(), 6.0)
else: else:
self.fail('Wrong cell created : %s' % cell.getId()) self.fail('Unexpected cell id: %s' % (cell_id, ))
# create the line for coins self.addCashLineToDelivery(
self.addCashLineToDelivery(self.cash_to_currency_purchase, 'valid_outgoing_line_2', 'Outgoing Cash To Currency Purchase Line', self.piece_100, document,
('emission_letter', 'cash_status', 'variation'), ('emission_letter/not_defined', 'cash_status/valid') + self.variation_list, 'valid_outgoing_line_2',
self.outgoing_quantity_100) 'Outgoing Cash To Currency Purchase Line',
# execute tic self.piece_100,
('emission_letter', 'cash_status', 'variation'),
('emission_letter/not_defined', 'cash_status/valid') + self.variation_list,
self.outgoing_quantity_100,
)
self.tic() self.tic()
# check the number of lines (line1 + line2) assertEqual(len(document), 3)
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 3) line = document.valid_outgoing_line_2
# get the second cash exchange line assertEqual(line.getPortalType(), 'Outgoing Cash To Currency Purchase Line')
self.valid_outgoing_line = getattr(self.cash_to_currency_purchase, 'valid_outgoing_line_2') assertEqual(line.getResourceValue(), self.piece_100)
# check portal types assertEqual(line.getPrice(), 100.0)
self.assertEqual(self.valid_outgoing_line.getPortalType(), 'Outgoing Cash To Currency Purchase Line') assertEqual(line.getQuantityUnit(), 'unit')
# check the resource is coin of 200 assertEqual(len(line), 2)
self.assertEqual(self.valid_outgoing_line.getResourceValue(), self.piece_100)
# check the value of coin
self.assertEqual(self.valid_outgoing_line.getPrice(), 100.0)
# check the unit of coin
self.assertEqual(self.valid_outgoing_line.getQuantityUnit(), 'unit')
# check we have two delivery cells: (one for year 1992 and one for 2003)
self.assertEqual(len(self.valid_outgoing_line.objectValues()), 2)
for variation in self.variation_list: for variation in self.variation_list:
# get the delivery cell cell = line.getCell('emission_letter/not_defined', variation, 'cash_status/valid')
cell = self.valid_outgoing_line.getCell('emission_letter/not_defined', variation, 'cash_status/valid') assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
# check the portal type assertEqual(cell.getBaobabSource(), source)
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell') assertEqual(cell.getBaobabDestination(), None)
# check the source vault is encaisse_paris cell_id = cell.getId()
self.assertEqual(cell.getBaobabSource(), 'site/testsite/paris/surface/banque_interne/guichet_1/encaisse_des_billets_et_monnaies/sortante') if cell_id == 'movement_0_0_0':
# check the destination vault is guichet_1 assertEqual(cell.getQuantity(), 120.0)
self.assertEqual(cell.getBaobabDestination(), None) elif cell_id == 'movement_0_1_0':
if cell.getId() == 'movement_0_0_0': assertEqual(cell.getQuantity(), 0.0)
# check the quantity for coin for year 1992 is 5
self.assertEqual(cell.getQuantity(), 120.0)
elif cell.getId() == 'movement_0_1_0':
# check the quantity for coin for year 2003 is 7
self.assertEqual(cell.getQuantity(), 0.0)
else: else:
self.fail('Wrong cell created : %s' % cell.getId()) self.fail('Unexpected cell id: %s' % (cell_id, ))
self.tic()
def stepCheckTotal(self, sequence=None, sequence_list=None, **kwd): def stepCheckTotal(self, sequence=None, sequence_list=None, **kwd):
""" document = self.cash_to_currency_purchase
Check the total after the creation of the two cash exchange lines assertEqual = self.assertEqual
""" assertEqual(len(document.objectValues()), 3)
# Check number of lines (line1 + line2) assertEqual(document.getTotalQuantity(fast=0,
self.assertEqual(len(self.cash_to_currency_purchase.objectValues()), 3) portal_type="Outgoing Cash To Currency Purchase Line"), 130.0)
# Check quantity, banknotes : 2 for 1992 and 3 for 2003, coin : 5 for 1992 and 7 for 2003 assertEqual(document.getTotalPrice(fast=0,
self.assertEqual(self.cash_to_currency_purchase.getTotalQuantity(fast=0, portal_type="Outgoing Cash To Currency Purchase Line"), 130.0) portal_type="Outgoing Cash To Currency Purchase Line"),
# check the total price 5000 * 4.0 + 100 * 0.0 + 5000 * 6.0 + 100 * 120.0)
self.assertEqual(self.cash_to_currency_purchase.getTotalPrice(fast=0, portal_type="Outgoing Cash To Currency Purchase Line"), 5000 * 4.0 + 100 * 0.0 + 5000 * 6.0 + 100 * 120.0)
def stepDeliverCashToCurrencyPurchase(self, sequence=None, sequence_list=None,
**kwd):
document = self.cash_to_currency_purchase
def stepDeliverCashToCurrencyPurchase(self, sequence=None, sequence_list=None, **kwd): self.workflow_tool.doActionFor(document, 'deliver_action',
""" wf_id='cash_to_currency_purchase_workflow')
Deliver the cash sorting with a good user
and check that the deliver of a cash tranfer have achieved
"""
self.workflow_tool.doActionFor(self.cash_to_currency_purchase, 'deliver_action', wf_id='cash_to_currency_purchase_workflow')
# execute tic
self.tic() self.tic()
# get state of cash sorting self.assertEqual(document.getSimulationState(), 'delivered')
state = self.cash_to_currency_purchase.getSimulationState() workflow_history = self.workflow_tool.getInfoFor(ob=document,
# check that state is delivered name='history', wf_id='cash_to_currency_purchase_workflow')
self.assertEqual(state, 'delivered')
# get workflow history
workflow_history = self.workflow_tool.getInfoFor(ob=self.cash_to_currency_purchase, name='history', wf_id='cash_to_currency_purchase_workflow')
# check len of len workflow history is 6
self.assertEqual(len(workflow_history), 3) self.assertEqual(len(workflow_history), 3)
def stepCheckFinalInventoryGuichet_Entrante(self, sequence=None, sequence_list=None, **kwd): def stepCheckFinalInventoryGuichet_Entrante(self, sequence=None, sequence_list=None, **kwd):
""" assertEqual = self.assertEqual
Check the initial inventory before any operations simulation_tool = self.getSimulationTool()
""" node = self.guichet_entrante.getRelativeUrl()
self.simulation_tool = self.getSimulationTool() resource = resource=self.usd_billet_20.getRelativeUrl()
# check we have 0 banknotes of 10000 in encaisse_paris assertEqual(simulation_tool.getCurrentInventory(node=node,
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 5.0) resource=resource), 5.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_entrante.getRelativeUrl(), resource = self.usd_billet_20.getRelativeUrl()), 5.0) assertEqual(simulation_tool.getFutureInventory(node=node,
resource=resource), 5.0)
def stepCheckFinalInventoryGuichet_Sortante(self, sequence=None,
sequence_list=None, **kwd):
def stepCheckFinalInventoryGuichet_Sortante(self, sequence=None, sequence_list=None, **kwd): assertEqual = self.assertEqual
""" simulation_tool = self.getSimulationTool()
Check inventory at source (vault encaisse_paris) after deliver of the cash sorting node = node=self.guichet_sortante.getRelativeUrl()
""" banknote_5k = self.billet_5000.getRelativeUrl()
coin_100 = self.piece_100.getRelativeUrl()
# check we have 14 coin of 5000 assertEqual(simulation_tool.getCurrentInventory(node=node,
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 0.0) resource=banknote_5k), 0.0)
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.billet_5000.getRelativeUrl()), 0.0) assertEqual(simulation_tool.getFutureInventory(node=node,
# check we have 12 coins of 100 resource=banknote_5k), 0.0)
self.assertEqual(self.simulation_tool.getCurrentInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 0.0) assertEqual(simulation_tool.getCurrentInventory(node=node,
self.assertEqual(self.simulation_tool.getFutureInventory(node=self.guichet_sortante.getRelativeUrl(), resource = self.piece_100.getRelativeUrl()), 0.0) resource=coin_100), 0.0)
assertEqual(simulation_tool.getFutureInventory(node=node,
def stepDelCashToCurrencyPurchase(self, sequence=None, sequence_list=None, **kwd): resource=coin_100), 0.0)
"""
Delete the invalid vault_transfer line previously create def test_01_ERP5BankingCashToCurrencyPurchase(self, quiet=QUIET,
""" run=RUN_ALL_TEST):
self.cash_to_currency_purchase_module.deleteContent('cash_to_currency_purchase_1')
##################################
## Tests
##################################
def test_01_ERP5BankingCashToCurrencyPurchase(self, quiet=QUIET, run=RUN_ALL_TEST):
"""
Define the sequence of step that will be play
"""
if not run: if not run:
return return
sequence_list = SequenceList() sequence_list = SequenceList()
# define the sequence sequence_list.addSequenceString("""
sequence_string = 'Tic CheckObjects Tic CheckInitialInventoryGuichet_Entrante ' \ stepTic
+ 'CheckInitialInventoryGuichet_Sortante ' \ stepCheckObjects
+ 'CreateCashToCurrencyPurchase ' \ stepTic
+ 'CreateValidIncomingLine CheckSubTotal ' \ stepCheckInitialInventoryGuichet_Entrante
+ 'CreateValidOutgoingLine ' \ stepCheckInitialInventoryGuichet_Sortante
+ 'Tic CheckTotal ' \ stepCreateCashToCurrencyPurchase
+ 'DeliverCashToCurrencyPurchase Tic ' \ stepCreateValidIncomingLine
+ 'CheckFinalInventoryGuichet_Entrante ' \ stepCheckSubTotal
+ 'CheckFinalInventoryGuichet_Sortante' stepCreateValidOutgoingLine
sequence_list.addSequenceString(sequence_string) stepTic
# play the sequence stepCheckTotal
stepDeliverCashToCurrencyPurchase
stepTic
stepCheckFinalInventoryGuichet_Entrante
stepCheckFinalInventoryGuichet_Sortante
""")
sequence_list.play(self) sequence_list.play(self)
...@@ -28,43 +28,35 @@ ...@@ -28,43 +28,35 @@
import os import os
from Products.ERP5Type.tests.Sequence import SequenceList from Products.ERP5Type.tests.Sequence import SequenceList
from Products.ERP5Banking.tests.TestERP5BankingMixin import TestERP5BankingMixin from Products.ERP5Banking.tests.TestERP5BankingMixin import TestERP5BankingMixin
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
# Needed in order to have a log file inside the current folder
os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
# Define the level of log we want, here is all
os.environ['EVENT_LOG_SEVERITY'] = '-300' os.environ['EVENT_LOG_SEVERITY'] = '-300'
class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
RUN_ALL_TEST = 1
# pseudo constants QUIET = 0
RUN_ALL_TEST = 1 # we want to run all test # Relative to "site" category
QUIET = 0 # we don't want the test to be quiet COUNTER_RELATIVE_URL = 'testsite/paris/surface/banque_interne/guichet_1'
# Relative to counter
INCOMING_COUNTER_RELATIVE_URL = 'encaisse_des_billets_et_monnaies/entrante'
OUTGOING_COUNTER_RELATIVE_URL = 'encaisse_des_devises/usd/sortante'
outgoing_quantity_5000 = {'variation/1992': 4, 'variation/2003': 6} outgoing_quantity_5000 = {'variation/1992': 4, 'variation/2003': 6}
outgoing_quantity_100 = {'variation/1992': 163, 'variation/2003': 0} outgoing_quantity_100 = {'variation/1992': 163, 'variation/2003': 0}
def getTitle(self): def getTitle(self):
"""
Return the title of the test
"""
return "ERP5BankingCashToCurrencySale" return "ERP5BankingCashToCurrencySale"
def afterSetUp(self): def afterSetUp(self):
"""
Method called before the launch of the test to initialize some data
"""
self.initDefaultVariable() self.initDefaultVariable()
# Set some variables : self.cash_to_currency_sale_module = self.getPortal().cash_to_currency_sale_module
self.cash_to_currency_sale_module = \
self.getPortal().cash_to_currency_sale_module
# Create a user and login as manager to populate the erp5 portal with
# objects for tests.
self.createManagerAndLogin() self.createManagerAndLogin()
self.createFunctionGroupSiteCategory() self.createFunctionGroupSiteCategory()
""" self.guichet = counter = self.getPortalObject().portal_categories.site.\
Windows to create the BANKNOTES of 10 000 and 5000, coins 200. unrestrictedTraverse(self.COUNTER_RELATIVE_URL)
It s same to click to the fast input button. self.guichet_entrante = counter.unrestrictedTraverse(
""" self.INCOMING_COUNTER_RELATIVE_URL)
self.guichet_sortante = outgoing_counter = counter.unrestrictedTraverse(
self.OUTGOING_COUNTER_RELATIVE_URL)
self.line_list = line_list_sortante = [{ self.line_list = line_list_sortante = [{
'id': 'inventory_line_1', 'id': 'inventory_line_1',
'resource': self.usd_billet_20, 'resource': self.usd_billet_20,
...@@ -74,49 +66,36 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -74,49 +66,36 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
'variation_list': self.usd_variation_list, 'variation_list': self.usd_variation_list,
'quantity': self.quantity_usd_20, 'quantity': self.quantity_usd_20,
}, ] }, ]
self.createCashInventory(
self.guichet = counter = self.paris.surface.banque_interne.guichet_1 source=None,
self.guichet_entrante = counter.encaisse_des_billets_et_monnaies.entrante destination=outgoing_counter,
self.guichet_sortante = counter.encaisse_des_devises.usd.sortante currency=self.currency_2,
self.createCashInventory(source=None, destination=self.guichet_sortante, line_list=line_list_sortante,
currency=self.currency_2, line_list=line_list_sortante) )
# now we need to create a user as Manager to do the test
# in order to have an assigment defined which is used to do transition
# Create an Organisation that will be used for users assignment
self.checkUserFolderType() self.checkUserFolderType()
self.organisation = self.organisation_module.newContent(id='paris',
portal_type='Organisation', function='banking', group='baobab',
site=self.paris.getRelativeUrl())
# define the user
self.createERP5Users({ self.createERP5Users({
'super_user' : [['Manager'], self.organisation, 'banking/comptable', 'super_user' : [
'baobab', counter.getRelativeUrl()], ['Manager'],
}, ) self.organisation_module['site_P10'],
'banking/comptable',
'baobab',
counter.getCategoryRelativeUrl(),
],
})
self.logout() self.logout()
self.login('super_user') self.login('super_user')
# open counter date and counter
self.openCounterDate(site=counter) self.openCounterDate(site=counter)
self.openCounter(site=counter) self.openCounter(site=counter)
def stepCheckObjects(self, sequence=None, sequence_list=None, **kwd): def stepCheckObjects(self, sequence=None, sequence_list=None, **kwd):
"""
Check that all the objects we created in afterSetUp or
that were added by the business template and that we rely
on are really here.
"""
self.checkResourceCreated() self.checkResourceCreated()
# check that CashToCurrencySale Module was created module = self.cash_to_currency_sale_module
self.assertEqual(self.cash_to_currency_sale_module.getPortalType(), self.assertEqual(module.getPortalType(), 'Cash To Currency Sale Module')
'Cash To Currency Sale Module') self.assertEqual(len(module), 0)
# check cash sorting module is empty
self.assertEqual(len(self.cash_to_currency_sale_module.objectValues()), 0)
def stepCheckInitialInventoryGuichet(self, sequence=None, sequence_list=None, def stepCheckInitialInventoryGuichet(self, sequence=None, sequence_list=None,
**kwd): **kwd):
""" assertEqual = self.assertEqual
Check the initial inventory before any operations
"""
simulation_tool = self.getSimulationTool() simulation_tool = self.getSimulationTool()
getCurrentInventory = simulation_tool.getCurrentInventory getCurrentInventory = simulation_tool.getCurrentInventory
getFutureInventory = simulation_tool.getFutureInventory getFutureInventory = simulation_tool.getFutureInventory
...@@ -141,40 +120,39 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -141,40 +120,39 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
resource=banknote_usd_20), 5.0) resource=banknote_usd_20), 5.0)
def stepCreateCashToCurrencySale(self, sequence=None, sequence_list=None, **kwd): def stepCreateCashToCurrencySale(self, sequence=None, sequence_list=None, **kwd):
""" portal = self.getPortalObject()
Create a cash sorting document and check it
"""
module = self.cash_to_currency_sale_module module = self.cash_to_currency_sale_module
self.cash_to_currency_sale = cash_to_currency_sale = module.newContent( self.cash_to_currency_sale = document = module.newContent(
id='cash_to_currency_sale_1', id='cash_to_currency_sale_1',
portal_type='Cash To Currency Sale', portal_type='Cash To Currency Sale',
source_value=self.guichet, source_value=self.guichet,
destination_value=None, destination_value=None,
description='test', description='test',
resource_value=self.currency_2, resource_value=self.currency_2,
source_total_asset_price=100.0, source_total_asset_price=100.0,
discount_ratio=0.02, # 1300 discount_ratio=0.02, # 1300
) )
self.tic()
self.assertEqual(len(module), 1) self.assertEqual(len(module), 1)
self.assertEqual(cash_to_currency_sale.getSource(), self.assertEqual(document.getSource(), self.guichet.getRelativeUrl())
'site/testsite/paris/surface/banque_interne/guichet_1') self.assertEqual(document.getDestination(), None)
self.assertEqual(cash_to_currency_sale.getDestination(), None) self.setDocumentSourceReference(document)
self.setDocumentSourceReference(cash_to_currency_sale)
self.tic() self.tic()
# Check the default exchange rate rate = document.CurrencyExchange_getExchangeRateList(
rate = cash_to_currency_sale.CurrencyExchange_getExchangeRateList(from_currency=cash_to_currency_sale.getResource(), from_currency=document.getResource(),
to_currency='currency_module/%s' % (cash_to_currency_sale.Baobab_getPortalReferenceCurrencyID()), to_currency='currency_module/%s' % (
currency_exchange_type='sale', portal.Baobab_getPortalReferenceCurrencyID(), ),
start_date=cash_to_currency_sale.getStartDate())[0] currency_exchange_type='sale',
start_date=document.getStartDate(),
)[0]
self.assertEqual(rate, 650.0) self.assertEqual(rate, 650.0)
def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None, def stepCreateValidIncomingLine(self, sequence=None, sequence_list=None,
**kwd): **kwd):
container = self.cash_to_currency_sale document = self.cash_to_currency_sale
line_1_id = 'valid_incoming_line_1' line_1_id = 'valid_incoming_line_1'
self.addCashLineToDelivery( self.addCashLineToDelivery(
container, document,
line_1_id, line_1_id,
'Incoming Cash To Currency Sale Line', 'Incoming Cash To Currency Sale Line',
self.billet_5000, self.billet_5000,
...@@ -183,14 +161,15 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -183,14 +161,15 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.variation_list, self.variation_list,
self.outgoing_quantity_5000, self.outgoing_quantity_5000,
) )
self.assertEqual(len(container), 1) self.tic()
line_1 = getattr(container, line_1_id) self.assertEqual(len(document), 1)
self.assertEqual(line_1.getResourceValue(), self.billet_5000) line = getattr(document, line_1_id)
self.assertEqual(line_1.getPrice(), 5000.0) self.assertEqual(line.getResourceValue(), self.billet_5000)
self.assertEqual(line_1.getQuantityUnit(), 'unit') self.assertEqual(line.getPrice(), 5000.0)
self.assertEqual(len(line_1), 2) self.assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(len(line), 2)
for variation in self.variation_list: for variation in self.variation_list:
cell = line_1.getCell('emission_letter/not_defined', variation, cell = line.getCell('emission_letter/not_defined', variation,
'cash_status/valid') 'cash_status/valid')
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell') self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
self.assertEqual(cell.getResourceValue(), self.billet_5000) self.assertEqual(cell.getResourceValue(), self.billet_5000)
...@@ -207,7 +186,7 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -207,7 +186,7 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
line_2_id = 'valid_incoming_line_2' line_2_id = 'valid_incoming_line_2'
self.addCashLineToDelivery( self.addCashLineToDelivery(
container, document,
line_2_id, line_2_id,
'Incoming Cash To Currency Sale Line', 'Incoming Cash To Currency Sale Line',
self.piece_100, self.piece_100,
...@@ -216,8 +195,9 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -216,8 +195,9 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.variation_list, self.variation_list,
self.outgoing_quantity_100, self.outgoing_quantity_100,
) )
self.assertEqual(len(container), 2) self.tic()
line_2 = getattr(self.cash_to_currency_sale, line_2_id) self.assertEqual(len(document), 2)
line_2 = getattr(document, line_2_id)
self.assertEqual(line_2.getPortalType(), self.assertEqual(line_2.getPortalType(),
'Incoming Cash To Currency Sale Line') 'Incoming Cash To Currency Sale Line')
self.assertEqual(line_2.getResourceValue(), self.piece_100) self.assertEqual(line_2.getResourceValue(), self.piece_100)
...@@ -239,26 +219,24 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -239,26 +219,24 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.assertEqual(cell.getQuantity(), 0.0) self.assertEqual(cell.getQuantity(), 0.0)
else: else:
self.fail('Unexpected cell id: %s' % (cell_id, )) self.fail('Unexpected cell id: %s' % (cell_id, ))
# execute tic
self.tic() self.tic()
def stepCheckSubTotal(self, sequence=None, sequence_list=None, **kwd): def stepCheckSubTotal(self, sequence=None, sequence_list=None, **kwd):
document = self.cash_to_currency_sale document = self.cash_to_currency_sale
# Check number of lines
self.assertEqual(len(document), 2) self.assertEqual(len(document), 2)
self.assertEqual(document.getTotalQuantity(fast=0, self.assertEqual(document.getTotalQuantity(fast=0,
portal_type="Incoming Cash To Currency Sale Line"), 173) portal_type="Incoming Cash To Currency Sale Line"), 173)
# Check the total price
self.assertEqual(document.getTotalPrice(fast=0, self.assertEqual(document.getTotalPrice(fast=0,
portal_type="Incoming Cash To Currency Sale Line"), portal_type="Incoming Cash To Currency Sale Line"),
5000 * 4.0 + 100 * 0.0 + 5000 * 6.0 + 100 * 163.0) 5000 * 4.0 + 100 * 0.0 + 5000 * 6.0 + 100 * 163.0)
def stepCreateValidOutgoingLine(self, sequence=None, sequence_list=None, def stepCreateValidOutgoingLine(self, sequence=None, sequence_list=None,
**kwd): **kwd):
container = self.cash_to_currency_sale assertEqual = self.assertEqual
document = self.cash_to_currency_sale
line_id = 'valid_outgoing_line_1' line_id = 'valid_outgoing_line_1'
self.addCashLineToDelivery( self.addCashLineToDelivery(
container, document,
line_id, line_id,
'Outgoing Cash To Currency Sale Line', 'Outgoing Cash To Currency Sale Line',
self.usd_billet_20, self.usd_billet_20,
...@@ -268,57 +246,51 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -268,57 +246,51 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
self.quantity_usd_20, self.quantity_usd_20,
variation_list=self.usd_variation_list, variation_list=self.usd_variation_list,
) )
self.assertEqual(len(container), 3) self.tic()
# get the cash exchange line assertEqual(len(document), 3)
line = getattr(container, line_id) line = getattr(document, line_id)
# check its portal type assertEqual(line.getPortalType(),
self.assertEqual(line.getPortalType(),
'Outgoing Cash To Currency Sale Line') 'Outgoing Cash To Currency Sale Line')
# check the resource is banknotes of 20 assertEqual(line.getResourceValue(), self.usd_billet_20)
self.assertEqual(line.getResourceValue(), self.usd_billet_20) assertEqual(line.getPrice(), 20.0)
# chek the value of the banknote assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(line.getPrice(), 20.0) assertEqual(len(line), 1)
self.assertEqual(line.getQuantityUnit(), 'unit')
self.assertEqual(len(line), 1)
for variation in self.usd_variation_list: for variation in self.usd_variation_list:
cell = line.getCell('emission_letter/not_defined', variation, cell = line.getCell('emission_letter/not_defined', variation,
'cash_status/not_defined') 'cash_status/not_defined')
self.assertEqual(cell.getPortalType(), 'Cash Delivery Cell') assertEqual(cell.getPortalType(), 'Cash Delivery Cell')
self.assertEqual(cell.getResourceValue(), self.usd_billet_20) assertEqual(cell.getResourceValue(), self.usd_billet_20)
self.assertEqual(cell.getBaobabSource(), assertEqual(cell.getBaobabSource(),
self.guichet_sortante.getRelativeUrl()) self.guichet_sortante.getRelativeUrl())
self.assertEqual(cell.getBaobabDestination(), None) assertEqual(cell.getBaobabDestination(), None)
cell_id = cell.getId() cell_id = cell.getId()
if cell_id == 'movement_0_0_0': if cell_id == 'movement_0_0_0':
self.assertEqual(cell.getQuantity(), 5.0) assertEqual(cell.getQuantity(), 5.0)
else: else:
self.fail('Wrong cell created : %s' % (cell_id, )) self.fail('Unexpected cell id: %s' % (cell_id, ))
self.tic() self.tic()
def stepCheckTotal(self, sequence=None, sequence_list=None, **kwd): def stepCheckTotal(self, sequence=None, sequence_list=None, **kwd):
document = self.cash_to_currency_sale document = self.cash_to_currency_sale
self.assertEqual(len(document), 3) assertEqual = self.assertEqual
self.assertEqual(document.getTotalQuantity(fast=0, assertEqual(len(document), 3)
assertEqual(document.getTotalQuantity(fast=0,
portal_type="Outgoing Cash To Currency Sale Line"), 5.0) portal_type="Outgoing Cash To Currency Sale Line"), 5.0)
self.assertEqual(document.getTotalPrice(fast=0, assertEqual(document.getTotalPrice(fast=0,
portal_type="Outgoing Cash To Currency Sale Line"), 20 * 5.0) portal_type="Outgoing Cash To Currency Sale Line"), 20 * 5.0)
def stepDeliverCashToCurrencySale(self, sequence=None, sequence_list=None, def stepDeliverCashToCurrencySale(self, sequence=None, sequence_list=None,
**kwd): **kwd):
#self.cash_to_currency_sale.setSourceTotalAssetPrice('52400.0')
# self.security_manager = AccessControl.getSecurityManager()
# self.user = self.security_manager.getUser()
# do the workflow transition "deliver_action"
document = self.cash_to_currency_sale document = self.cash_to_currency_sale
self.workflow_tool.doActionFor(document, 'deliver_action', self.workflow_tool.doActionFor(document, 'deliver_action',
wf_id='cash_to_currency_sale_workflow') wf_id='cash_to_currency_sale_workflow')
# check that state is delivered self.tic()
self.assertEqual(document.getSimulationState(), 'delivered') self.assertEqual(document.getSimulationState(), 'delivered')
# execute tic
self.tic() self.tic()
def stepCheckFinalInventoryGuichet(self, sequence=None, def stepCheckFinalInventoryGuichet(self, sequence=None,
sequence_list=None, **kwd): sequence_list=None, **kwd):
assertEqual = self.assertEqual
simulation_tool = self.getSimulationTool() simulation_tool = self.getSimulationTool()
getCurrentInventory = simulation_tool.getCurrentInventory getCurrentInventory = simulation_tool.getCurrentInventory
getFutureInventory = simulation_tool.getFutureInventory getFutureInventory = simulation_tool.getFutureInventory
...@@ -328,18 +300,18 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -328,18 +300,18 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
coin_100 = self.piece_100.getRelativeUrl() coin_100 = self.piece_100.getRelativeUrl()
banknote_usd_20 = self.usd_billet_20.getRelativeUrl() banknote_usd_20 = self.usd_billet_20.getRelativeUrl()
self.assertEqual(getCurrentInventory(node=incoming_counter, assertEqual(getCurrentInventory(node=incoming_counter,
resource=banknote_5000), 10.0) resource=banknote_5000), 10.0)
self.assertEqual(getFutureInventory(node=incoming_counter, assertEqual(getFutureInventory(node=incoming_counter,
resource=banknote_5000), 10.0) resource=banknote_5000), 10.0)
self.assertEqual(getCurrentInventory(node=incoming_counter, assertEqual(getCurrentInventory(node=incoming_counter,
resource=coin_100), 163.0) resource=coin_100), 163.0)
self.assertEqual(getFutureInventory(node=incoming_counter, assertEqual(getFutureInventory(node=incoming_counter,
resource=coin_100), 163.0) resource=coin_100), 163.0)
self.assertEqual(getCurrentInventory(node=outgoing_counter, assertEqual(getCurrentInventory(node=outgoing_counter,
resource=banknote_usd_20), 0.0) resource=banknote_usd_20), 0.0)
self.assertEqual(getFutureInventory(node=outgoing_counter, assertEqual(getFutureInventory(node=outgoing_counter,
resource=banknote_usd_20), 0.0) resource=banknote_usd_20), 0.0)
def stepDelCashToCurrencySale(self, sequence=None, sequence_list=None, def stepDelCashToCurrencySale(self, sequence=None, sequence_list=None,
...@@ -377,24 +349,29 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin): ...@@ -377,24 +349,29 @@ class TestERP5BankingCashToCurrencySale(TestERP5BankingMixin):
def test_01_ERP5BankingCashToCurrencySale(self, quiet=QUIET, def test_01_ERP5BankingCashToCurrencySale(self, quiet=QUIET,
run=RUN_ALL_TEST): run=RUN_ALL_TEST):
"""
Define the sequence of step that will be play
"""
if not run: if not run:
return return
sequence_list = SequenceList() sequence_list = SequenceList()
sequence_list.addSequenceString('stepTic stepCheckObjects stepTic ' sequence_list.addSequenceString("""
'stepCheckInitialInventoryGuichet ' stepTic
'stepCreateCashToCurrencySale ' stepCheckObjects
'stepCreateValidIncomingLine stepCheckSubTotal ' stepTic
'stepCreateValidOutgoingLine ' stepCheckInitialInventoryGuichet
'stepTic stepCheckTotal ' stepCreateCashToCurrencySale
'stepResetSourceInventory stepTic ' stepCreateValidIncomingLine stepCheckSubTotal
'stepDeliverCashToCurrencySaleFails stepTic ' stepCreateValidOutgoingLine
'stepDeleteResetInventory stepTic ' stepTic
'stepDeliverCashToCurrencySale stepTic ' stepCheckTotal
'stepCheckFinalInventoryGuichet_Entrante ' stepResetSourceInventory
'stepCheckFinalInventoryGuichet_Sortante' stepTic
) stepDeliverCashToCurrencySaleFails
stepTic
stepDeleteResetInventory
stepTic
stepDeliverCashToCurrencySale
stepTic
stepCheckFinalInventoryGuichet_Entrante
stepCheckFinalInventoryGuichet_Sortante
""")
sequence_list.play(self) sequence_list.play(self)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment