/[public]/erp5/sandbox/amount_generator/products/ERP5/tests/testMovementGroup.py
ERP5 logo

Contents of /erp5/sandbox/amount_generator/products/ERP5/tests/testMovementGroup.py

Parent Directory Parent Directory | Revision Log Revision Log


Revision 34651 - (hide annotations)
Mon Apr 19 12:22:57 2010 UTC (3 years, 1 month ago) by jm
File MIME type: text/x-python
File size: 20879 byte(s)
Create sandbox to review work on new amount_generator
1 kazuhiko 31447 # -*- coding: utf-8 -*-
2 jerome 24256 ##############################################################################
3     #
4     # Copyright (c) 2008 Nexedi SA and Contributors. All Rights Reserved.
5     #
6     # WARNING: This program as such is intended to be used by professional
7     # programmers who take the whole responsibility of assessing all potential
8     # consequences resulting from its eventual inadequacies and bugs
9     # End users who are looking for a ready-to-use solution with commercial
10     # guarantees and support are strongly adviced to contract a Free Software
11     # Service Company
12     #
13     # This program is Free Software; you can redistribute it and/or
14     # modify it under the terms of the GNU General Public License
15     # as published by the Free Software Foundation; either version 2
16     # of the License, or (at your option) any later version.
17     #
18     # This program is distributed in the hope that it will be useful,
19     # but WITHOUT ANY WARRANTY; without even the implied warranty of
20     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21     # GNU General Public License for more details.
22     #
23     # You should have received a copy of the GNU General Public License
24     # along with this program; if not, write to the Free Software
25     # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26     #
27     ##############################################################################
28    
29     import unittest
30    
31     from DateTime import DateTime
32    
33     from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
34    
35     class MovementGroupTestCase(ERP5TypeTestCase):
36     def getBusinessTemplateList(self):
37 luke 26181 return ('erp5_base', 'erp5_pdm', 'erp5_trade')
38 jerome 24256
39     def afterSetUp(self):
40     self.builder = self.portal.portal_deliveries.newContent(
41 luke 26181 portal_type='Delivery Builder',
42     delivery_module = 'internal_packing_list_module',
43     delivery_portal_type = 'Internal Packing List',
44     delivery_line_portal_type = 'Internal Packing List Line',
45     delivery_cell_portal_type = 'Internal Packing List Cell',
46     )
47 jerome 24256 self.folder = self.portal.portal_simulation.newContent(
48     portal_type='Applied Rule')
49    
50     class TestPropertyMovementGroup(MovementGroupTestCase):
51     def test_property_movement_group_grouping(self):
52     movement_list = ( self.folder.newContent(
53     temp_object=1,
54     portal_type='Simulation Movement',
55     start_date=DateTime(2001, 1, 1)),
56     self.folder.newContent(
57     temp_object=1,
58     portal_type='Simulation Movement',
59     start_date=DateTime(2001, 1, 1)))
60     self.builder.newContent(
61     portal_type='Property Movement Group',
62     collect_order_group='delivery',
63     tested_property_list=('start_date',))
64     movement_group_node = self.builder.collectMovement(movement_list)
65     group_list = movement_group_node.getGroupList()
66     self.assertEquals(1, len(group_list))
67     self.assertEquals(dict(start_date=DateTime(2001, 1, 1)),
68     group_list[0].getGroupEditDict())
69    
70     def test_property_movement_group_separating(self):
71     movement_list = ( self.folder.newContent(
72     temp_object=1,
73     portal_type='Simulation Movement',
74     start_date=DateTime(2001, 1, 1)),
75     self.folder.newContent(
76     temp_object=1,
77     portal_type='Simulation Movement',
78     start_date=DateTime(2001, 1, 2)))
79     self.builder.newContent(
80     portal_type='Property Movement Group',
81     collect_order_group='delivery',
82     tested_property_list=('start_date',))
83     movement_group_node = self.builder.collectMovement(movement_list)
84     group_list = movement_group_node.getGroupList()
85     self.assertEquals(2, len(group_list))
86     self.assertEquals(1, len([group for group in group_list if
87     group.getGroupEditDict() == dict(start_date=DateTime(2001, 1, 1))]))
88     self.assertEquals(1, len([group for group in group_list if
89     group.getGroupEditDict() == dict(start_date=DateTime(2001, 1, 2))]))
90    
91     def test_property_movement_group_and_separating(self):
92     movement_list = ( self.folder.newContent(
93     temp_object=1,
94     portal_type='Simulation Movement',
95     title='A',
96     start_date=DateTime(2001, 1, 1)),
97     self.folder.newContent(
98     temp_object=1,
99     title='A',
100     portal_type='Simulation Movement',
101     start_date=DateTime(2001, 1, 2)))
102     self.builder.newContent(
103     portal_type='Property Movement Group',
104     collect_order_group='delivery',
105     tested_property_list=('start_date', 'title'))
106     movement_group_node = self.builder.collectMovement(movement_list)
107     group_list = movement_group_node.getGroupList()
108     self.assertEquals(2, len(group_list))
109     self.assertEquals(1, len([group for group in group_list if
110     group.getGroupEditDict() == dict(title='A',
111     start_date=DateTime(2001, 1, 1))]))
112     self.assertEquals(1, len([group for group in group_list if
113     group.getGroupEditDict() == dict(title='A',
114     start_date=DateTime(2001, 1, 2))]))
115    
116    
117 jerome 24257 class TestPropertyAssignmentMovementGroup(MovementGroupTestCase):
118     def test_property_assignment_movement_group_max(self):
119     movement_list = ( self.folder.newContent(
120     temp_object=1,
121     portal_type='Simulation Movement',
122     start_date=DateTime(2001, 1, 1)),
123     self.folder.newContent(
124     temp_object=1,
125     portal_type='Simulation Movement',
126     start_date=DateTime(2001, 1, 2)))
127     self.builder.newContent(
128     portal_type='Property Assignment Movement Group',
129     collect_order_group='delivery',
130     tested_property_list=('start_date',),
131     grouping_method='max',)
132     movement_group_node = self.builder.collectMovement(movement_list)
133     group_list = movement_group_node.getGroupList()
134     self.assertEquals(1, len(group_list))
135     self.assertEquals(dict(start_date=DateTime(2001, 1, 2)),
136     group_list[0].getGroupEditDict())
137 jerome 24256
138 jerome 24257 def test_property_assignment_movement_group_min(self):
139     movement_list = ( self.folder.newContent(
140     temp_object=1,
141     portal_type='Simulation Movement',
142     start_date=DateTime(2001, 1, 1)),
143     self.folder.newContent(
144     temp_object=1,
145     portal_type='Simulation Movement',
146     start_date=DateTime(2001, 1, 2)))
147     self.builder.newContent(
148     portal_type='Property Assignment Movement Group',
149     collect_order_group='delivery',
150     tested_property_list=('start_date',),
151     grouping_method='min',)
152     movement_group_node = self.builder.collectMovement(movement_list)
153     group_list = movement_group_node.getGroupList()
154     self.assertEquals(1, len(group_list))
155     self.assertEquals(dict(start_date=DateTime(2001, 1, 1)),
156     group_list[0].getGroupEditDict())
157    
158     def test_property_assignment_movement_group_avg(self):
159     movement_list = ( self.folder.newContent(
160     temp_object=1,
161     portal_type='Simulation Movement',
162     int_index=1,),
163     self.folder.newContent(
164     temp_object=1,
165     portal_type='Simulation Movement',
166     int_index=3,),)
167     self.builder.newContent(
168     portal_type='Property Assignment Movement Group',
169     collect_order_group='delivery',
170     tested_property_list=('int_index',),
171     grouping_method='avg',)
172     movement_group_node = self.builder.collectMovement(movement_list)
173     group_list = movement_group_node.getGroupList()
174     self.assertEquals(1, len(group_list))
175     self.assertEquals(dict(int_index=2),
176     group_list[0].getGroupEditDict())
177    
178     def test_property_assignment_movement_group_common_match(self):
179     movement_list = ( self.folder.newContent(
180     temp_object=1,
181     portal_type='Simulation Movement',
182     start_date=DateTime(2001, 1, 1)),
183     self.folder.newContent(
184     temp_object=1,
185     portal_type='Simulation Movement',
186     start_date=DateTime(2001, 1, 1)))
187     self.builder.newContent(
188     portal_type='Property Assignment Movement Group',
189     collect_order_group='delivery',
190     tested_property_list=('start_date',),
191     grouping_method='common',)
192     movement_group_node = self.builder.collectMovement(movement_list)
193     group_list = movement_group_node.getGroupList()
194     self.assertEquals(1, len(group_list))
195     self.assertEquals(dict(start_date=DateTime(2001, 1, 1)),
196     group_list[0].getGroupEditDict())
197    
198     def test_property_assignment_movement_group_common_doesnot_match(self):
199     movement_list = ( self.folder.newContent(
200     temp_object=1,
201     portal_type='Simulation Movement',
202     start_date=DateTime(2001, 1, 1)),
203     self.folder.newContent(
204     temp_object=1,
205     portal_type='Simulation Movement',
206     start_date=DateTime(2001, 1, 2)))
207     self.builder.newContent(
208     portal_type='Property Assignment Movement Group',
209     collect_order_group='delivery',
210     tested_property_list=('start_date',),
211     grouping_method='common',)
212     movement_group_node = self.builder.collectMovement(movement_list)
213     group_list = movement_group_node.getGroupList()
214     self.assertEquals(1, len(group_list))
215     self.assertEquals(dict(), group_list[0].getGroupEditDict())
216    
217 luke 26181 class TestOrderMovementGroup(MovementGroupTestCase):
218     """Tests Order Movement Group - grouping and separating by
219     root Applied Rule Causality, in case if that causality is Order"""
220     document_portal_type = 'Sale Order'
221     def test_order_movement_group_grouping(self):
222     order = self.portal.getDefaultModule(self.document_portal_type) \
223     .newContent(portal_type=self.document_portal_type)
224     applied_rule = self.portal.portal_simulation.newContent(
225     portal_type='Applied Rule',
226     causality_value = order
227     )
228 jerome 24257
229 luke 26181 movement_list = (
230     applied_rule.newContent(portal_type='Simulation Movement'),
231     applied_rule.newContent(portal_type='Simulation Movement')
232     )
233    
234     self.builder.newContent(
235     portal_type='Order Movement Group',
236     collect_order_group='delivery')
237    
238     movement_group_node = self.builder.collectMovement(movement_list)
239     group_list = movement_group_node.getGroupList()
240     self.assertEquals(1, len(group_list))
241     self.assertEquals(dict(causality_list=[order.getRelativeUrl()]),
242     group_list[0].getGroupEditDict())
243    
244     def test_order_movement_group_separating(self):
245     order_1 = self.portal.getDefaultModule(self.document_portal_type) \
246     .newContent(portal_type=self.document_portal_type)
247     applied_rule_1 = self.portal.portal_simulation.newContent(
248     portal_type='Applied Rule',
249     causality_value = order_1
250     )
251    
252     order_2 = self.portal.getDefaultModule(self.document_portal_type) \
253     .newContent(portal_type=self.document_portal_type)
254     applied_rule_2 = self.portal.portal_simulation.newContent(
255     portal_type='Applied Rule',
256     causality_value = order_2
257     )
258    
259     movement_list = (
260     applied_rule_1.newContent(portal_type='Simulation Movement'),
261     applied_rule_2.newContent(portal_type='Simulation Movement')
262     )
263    
264     self.builder.newContent(
265     portal_type='Order Movement Group',
266     collect_order_group='delivery')
267    
268     movement_group_node = self.builder.collectMovement(movement_list)
269     group_list = movement_group_node.getGroupList()
270     self.assertEquals(2, len(group_list))
271     self.assertEquals(1, len([group for group in group_list if
272     group.getGroupEditDict() == dict(causality_list=[order_1.getRelativeUrl()])]))
273     self.assertEquals(1, len([group for group in group_list if
274     group.getGroupEditDict() == dict(causality_list=[order_2.getRelativeUrl()])]))
275    
276     class TestOrderMovementGroupDelivery(TestOrderMovementGroup):
277     """Tests Order Movement Group - grouping and separating by
278     root Applied Rule Causality, in case if that causality is Delivery"""
279     document_portal_type = 'Sale Packing List'
280    
281     class TestDeliveryCausalityAssignmentMovementGroup(MovementGroupTestCase):
282     """Tests Delivery Causality Assignment Movement Group
283     This Movement Group never separates"""
284     order_portal_type = 'Sale Order'
285     order_line_portal_type = 'Sale Order Line'
286     delivery_portal_type = 'Sale Packing List'
287     delivery_line_portal_type = 'Sale Packing List Line'
288    
289     def test_delivery_causality_assignment_movement_group(self):
290     order = self.portal.getDefaultModule(self.order_portal_type) \
291     .newContent(portal_type=self.order_portal_type)
292     order_line_1 = order.newContent(portal_type=self.order_line_portal_type)
293     order_line_2 = order.newContent(portal_type=self.order_line_portal_type)
294    
295     delivery_1 = self.portal.getDefaultModule(self.delivery_portal_type) \
296     .newContent(portal_type=self.delivery_portal_type)
297     delivery_1_line = delivery_1.newContent(portal_type=self.delivery_line_portal_type)
298    
299     delivery_2 = self.portal.getDefaultModule(self.delivery_portal_type) \
300     .newContent(portal_type=self.delivery_portal_type)
301     delivery_2_line = delivery_2.newContent(portal_type=self.delivery_line_portal_type)
302    
303     applied_rule = self.portal.portal_simulation.newContent(
304     portal_type='Applied Rule',
305     causality_value = order
306     )
307     order_movement_list = (
308     applied_rule.newContent(
309     portal_type='Simulation Movement',
310     order_value = order_line_1,
311     delivery_value = delivery_1_line),
312     applied_rule.newContent(
313     portal_type='Simulation Movement',
314     order_value = order_line_2,
315     delivery_value = delivery_2_line),
316     )
317    
318     movement_list = [
319     q.newContent(portal_type='Applied Rule') \
320     .newContent(portal_type='Simulation Movement') \
321     for q in order_movement_list
322     ]
323    
324     self.builder.newContent(
325     portal_type='Delivery Causality Assignment Movement Group',
326     collect_order_group='delivery')
327    
328     movement_group_node = self.builder.collectMovement(movement_list)
329     group_list = movement_group_node.getGroupList()
330    
331     self.assertEquals(1, len(group_list))
332     self.assertEquals(dict(causality_list=[delivery_1.getRelativeUrl(),
333     delivery_2.getRelativeUrl()]),
334     group_list[0].getGroupEditDict())
335    
336     class TestDuplicatedKeyRaiseException(MovementGroupTestCase):
337     """Test, that it is not allowed to have more than one movement group to update
338     same key during building process"""
339     document_portal_type = 'Sale Order'
340     def test(self):
341     from Products.ERP5.Document.OrderBuilder import DuplicatedPropertyDictKeysError
342     order = self.portal.getDefaultModule(self.document_portal_type) \
343     .newContent(portal_type=self.document_portal_type)
344     applied_rule = self.portal.portal_simulation.newContent(
345     portal_type='Applied Rule',
346     causality_value = order
347     )
348    
349     movement_list = (
350     applied_rule.newContent(portal_type='Simulation Movement'),
351     applied_rule.newContent(portal_type='Simulation Movement')
352     )
353    
354     self.builder.newContent(
355     portal_type='Order Movement Group',
356     collect_order_group='delivery')
357    
358     self.builder.newContent(
359     portal_type='Order Movement Group',
360     collect_order_group='delivery')
361    
362     movement_relative_url_list = [q.getRelativeUrl() for q in movement_list]
363     self.assertRaises(
364     DuplicatedPropertyDictKeysError,
365     self.builder.build,
366     movement_relative_url_list = movement_relative_url_list
367     )
368    
369 luke 26457 class TestCategoryMovementGroup(MovementGroupTestCase):
370     def test_category_movement_group_grouping(self):
371     movement_list = ( self.folder.newContent(
372     temp_object=1,
373     portal_type='Simulation Movement',
374     source='1'),
375     self.folder.newContent(
376     temp_object=1,
377     portal_type='Simulation Movement',
378     source='1'))
379     self.builder.newContent(
380     portal_type='Category Movement Group',
381     collect_order_group='delivery',
382     tested_property_list=('source',))
383     movement_group_node = self.builder.collectMovement(movement_list)
384     group_list = movement_group_node.getGroupList()
385     self.assertEquals(1, len(group_list))
386     self.assertEquals(dict(source_list=['1']),
387     group_list[0].getGroupEditDict())
388    
389     def test_category_movement_group_separating(self):
390     movement_list = ( self.folder.newContent(
391     temp_object=1,
392     portal_type='Simulation Movement',
393     source='1'),
394     self.folder.newContent(
395     temp_object=1,
396     portal_type='Simulation Movement',
397     source='2'))
398     self.builder.newContent(
399     portal_type='Category Movement Group',
400     collect_order_group='delivery',
401     tested_property_list=('source',))
402     movement_group_node = self.builder.collectMovement(movement_list)
403     group_list = movement_group_node.getGroupList()
404     self.assertEquals(2, len(group_list))
405     self.assertEquals(1, len([group for group in group_list if
406     group.getGroupEditDict() == dict(source_list=['1'])]))
407     self.assertEquals(1, len([group for group in group_list if
408     group.getGroupEditDict() == dict(source_list=['2'])]))
409    
410     def test_category_movement_group_and_separating(self):
411     movement_list = ( self.folder.newContent(
412     temp_object=1,
413     portal_type='Simulation Movement',
414     destination='A',
415     source='1'),
416     self.folder.newContent(
417     temp_object=1,
418     destination='A',
419     portal_type='Simulation Movement',
420     source='2'))
421     self.builder.newContent(
422     portal_type='Category Movement Group',
423     collect_order_group='delivery',
424     tested_property_list=('destination', 'source'))
425     movement_group_node = self.builder.collectMovement(movement_list)
426     group_list = movement_group_node.getGroupList()
427     self.assertEquals(2, len(group_list))
428     self.assertEquals(1, len([group for group in group_list if
429     group.getGroupEditDict() == dict(destination_list=['A'],
430     source_list=['1'])]))
431     self.assertEquals(1, len([group for group in group_list if
432     group.getGroupEditDict() == dict(destination_list=['A'],
433     source_list=['2'])]))
434    
435 yusei 26508
436     class TestMovementGroupCommonAPI(unittest.TestCase):
437    
438     def test_separateMethod(self):
439     """Make sure that _separate method works if argument is an empty list."""
440     import Products.ERP5Type.Document
441     for name in Products.ERP5Type.Document.__dict__:
442     if name[0].isupper() and name.endswith('MovementGroup'):
443     module = getattr(Products.ERP5Type.Document, name)
444     class_ = getattr(module, name)
445     instance = class_('dummy')
446     self.assertEqual(instance._separate([]), [])
447    
448    
449 jerome 24256 def test_suite():
450     suite = unittest.TestSuite()
451     suite.addTest(unittest.makeSuite(TestPropertyMovementGroup))
452 jerome 24257 suite.addTest(unittest.makeSuite(TestPropertyAssignmentMovementGroup))
453 luke 26181 suite.addTest(unittest.makeSuite(TestOrderMovementGroup))
454     suite.addTest(unittest.makeSuite(TestOrderMovementGroupDelivery))
455     suite.addTest(unittest.makeSuite(TestDeliveryCausalityAssignmentMovementGroup))
456     suite.addTest(unittest.makeSuite(TestDuplicatedKeyRaiseException))
457 luke 26457 suite.addTest(unittest.makeSuite(TestCategoryMovementGroup))
458 yusei 26508 suite.addTest(unittest.makeSuite(TestMovementGroupCommonAPI))
459 jerome 24256 return suite
460 luke 26181

  ViewVC Help
Powered by ViewVC 1.1.2