/[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 38604 - (hide annotations)
Thu Sep 23 18:30:37 2010 UTC (2 years, 7 months ago) by jm
File MIME type: text/x-python
File size: 21031 byte(s)
Fix and speed up testMovementGroup
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 jm 38604 import os
30 jerome 24256 import unittest
31     from DateTime import DateTime
32 jm 38604 from Products.ERP5.mixin.builder import DuplicatedPropertyDictKeysError
33 jerome 24256 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
34    
35     class MovementGroupTestCase(ERP5TypeTestCase):
36 jm 38604
37     def getPortalName(self):
38     """ID of the portal. """
39     return os.environ.get('erp5_tests_portal_id') or 'movement_group_test'
40    
41 jerome 24256 def getBusinessTemplateList(self):
42 jm 38604 return ('erp5_base', 'erp5_pdm', 'erp5_simulation', 'erp5_trade')
43 jerome 24256
44     def afterSetUp(self):
45     self.builder = self.portal.portal_deliveries.newContent(
46 luke 26181 portal_type='Delivery Builder',
47     delivery_module = 'internal_packing_list_module',
48     delivery_portal_type = 'Internal Packing List',
49     delivery_line_portal_type = 'Internal Packing List Line',
50     delivery_cell_portal_type = 'Internal Packing List Cell',
51     )
52 jerome 24256 self.folder = self.portal.portal_simulation.newContent(
53     portal_type='Applied Rule')
54    
55     class TestPropertyMovementGroup(MovementGroupTestCase):
56     def test_property_movement_group_grouping(self):
57     movement_list = ( self.folder.newContent(
58     temp_object=1,
59     portal_type='Simulation Movement',
60     start_date=DateTime(2001, 1, 1)),
61     self.folder.newContent(
62     temp_object=1,
63     portal_type='Simulation Movement',
64     start_date=DateTime(2001, 1, 1)))
65     self.builder.newContent(
66     portal_type='Property Movement Group',
67     collect_order_group='delivery',
68     tested_property_list=('start_date',))
69     movement_group_node = self.builder.collectMovement(movement_list)
70     group_list = movement_group_node.getGroupList()
71     self.assertEquals(1, len(group_list))
72     self.assertEquals(dict(start_date=DateTime(2001, 1, 1)),
73     group_list[0].getGroupEditDict())
74    
75     def test_property_movement_group_separating(self):
76     movement_list = ( self.folder.newContent(
77     temp_object=1,
78     portal_type='Simulation Movement',
79     start_date=DateTime(2001, 1, 1)),
80     self.folder.newContent(
81     temp_object=1,
82     portal_type='Simulation Movement',
83     start_date=DateTime(2001, 1, 2)))
84     self.builder.newContent(
85     portal_type='Property Movement Group',
86     collect_order_group='delivery',
87     tested_property_list=('start_date',))
88     movement_group_node = self.builder.collectMovement(movement_list)
89     group_list = movement_group_node.getGroupList()
90     self.assertEquals(2, len(group_list))
91     self.assertEquals(1, len([group for group in group_list if
92     group.getGroupEditDict() == dict(start_date=DateTime(2001, 1, 1))]))
93     self.assertEquals(1, len([group for group in group_list if
94     group.getGroupEditDict() == dict(start_date=DateTime(2001, 1, 2))]))
95    
96     def test_property_movement_group_and_separating(self):
97     movement_list = ( self.folder.newContent(
98     temp_object=1,
99     portal_type='Simulation Movement',
100     title='A',
101     start_date=DateTime(2001, 1, 1)),
102     self.folder.newContent(
103     temp_object=1,
104     title='A',
105     portal_type='Simulation Movement',
106     start_date=DateTime(2001, 1, 2)))
107     self.builder.newContent(
108     portal_type='Property Movement Group',
109     collect_order_group='delivery',
110     tested_property_list=('start_date', 'title'))
111     movement_group_node = self.builder.collectMovement(movement_list)
112     group_list = movement_group_node.getGroupList()
113     self.assertEquals(2, len(group_list))
114     self.assertEquals(1, len([group for group in group_list if
115     group.getGroupEditDict() == dict(title='A',
116     start_date=DateTime(2001, 1, 1))]))
117     self.assertEquals(1, len([group for group in group_list if
118     group.getGroupEditDict() == dict(title='A',
119     start_date=DateTime(2001, 1, 2))]))
120    
121    
122 jerome 24257 class TestPropertyAssignmentMovementGroup(MovementGroupTestCase):
123     def test_property_assignment_movement_group_max(self):
124     movement_list = ( self.folder.newContent(
125     temp_object=1,
126     portal_type='Simulation Movement',
127     start_date=DateTime(2001, 1, 1)),
128     self.folder.newContent(
129     temp_object=1,
130     portal_type='Simulation Movement',
131     start_date=DateTime(2001, 1, 2)))
132     self.builder.newContent(
133     portal_type='Property Assignment Movement Group',
134     collect_order_group='delivery',
135     tested_property_list=('start_date',),
136     grouping_method='max',)
137     movement_group_node = self.builder.collectMovement(movement_list)
138     group_list = movement_group_node.getGroupList()
139     self.assertEquals(1, len(group_list))
140     self.assertEquals(dict(start_date=DateTime(2001, 1, 2)),
141     group_list[0].getGroupEditDict())
142 jerome 24256
143 jerome 24257 def test_property_assignment_movement_group_min(self):
144     movement_list = ( self.folder.newContent(
145     temp_object=1,
146     portal_type='Simulation Movement',
147     start_date=DateTime(2001, 1, 1)),
148     self.folder.newContent(
149     temp_object=1,
150     portal_type='Simulation Movement',
151     start_date=DateTime(2001, 1, 2)))
152     self.builder.newContent(
153     portal_type='Property Assignment Movement Group',
154     collect_order_group='delivery',
155     tested_property_list=('start_date',),
156     grouping_method='min',)
157     movement_group_node = self.builder.collectMovement(movement_list)
158     group_list = movement_group_node.getGroupList()
159     self.assertEquals(1, len(group_list))
160     self.assertEquals(dict(start_date=DateTime(2001, 1, 1)),
161     group_list[0].getGroupEditDict())
162    
163     def test_property_assignment_movement_group_avg(self):
164     movement_list = ( self.folder.newContent(
165     temp_object=1,
166     portal_type='Simulation Movement',
167     int_index=1,),
168     self.folder.newContent(
169     temp_object=1,
170     portal_type='Simulation Movement',
171     int_index=3,),)
172     self.builder.newContent(
173     portal_type='Property Assignment Movement Group',
174     collect_order_group='delivery',
175     tested_property_list=('int_index',),
176     grouping_method='avg',)
177     movement_group_node = self.builder.collectMovement(movement_list)
178     group_list = movement_group_node.getGroupList()
179     self.assertEquals(1, len(group_list))
180     self.assertEquals(dict(int_index=2),
181     group_list[0].getGroupEditDict())
182    
183     def test_property_assignment_movement_group_common_match(self):
184     movement_list = ( self.folder.newContent(
185     temp_object=1,
186     portal_type='Simulation Movement',
187     start_date=DateTime(2001, 1, 1)),
188     self.folder.newContent(
189     temp_object=1,
190     portal_type='Simulation Movement',
191     start_date=DateTime(2001, 1, 1)))
192     self.builder.newContent(
193     portal_type='Property Assignment Movement Group',
194     collect_order_group='delivery',
195     tested_property_list=('start_date',),
196     grouping_method='common',)
197     movement_group_node = self.builder.collectMovement(movement_list)
198     group_list = movement_group_node.getGroupList()
199     self.assertEquals(1, len(group_list))
200     self.assertEquals(dict(start_date=DateTime(2001, 1, 1)),
201     group_list[0].getGroupEditDict())
202    
203     def test_property_assignment_movement_group_common_doesnot_match(self):
204     movement_list = ( self.folder.newContent(
205     temp_object=1,
206     portal_type='Simulation Movement',
207     start_date=DateTime(2001, 1, 1)),
208     self.folder.newContent(
209     temp_object=1,
210     portal_type='Simulation Movement',
211     start_date=DateTime(2001, 1, 2)))
212     self.builder.newContent(
213     portal_type='Property Assignment Movement Group',
214     collect_order_group='delivery',
215     tested_property_list=('start_date',),
216     grouping_method='common',)
217     movement_group_node = self.builder.collectMovement(movement_list)
218     group_list = movement_group_node.getGroupList()
219     self.assertEquals(1, len(group_list))
220     self.assertEquals(dict(), group_list[0].getGroupEditDict())
221    
222 luke 26181 class TestOrderMovementGroup(MovementGroupTestCase):
223     """Tests Order Movement Group - grouping and separating by
224     root Applied Rule Causality, in case if that causality is Order"""
225     document_portal_type = 'Sale Order'
226     def test_order_movement_group_grouping(self):
227     order = self.portal.getDefaultModule(self.document_portal_type) \
228     .newContent(portal_type=self.document_portal_type)
229     applied_rule = self.portal.portal_simulation.newContent(
230     portal_type='Applied Rule',
231     causality_value = order
232     )
233 jerome 24257
234 luke 26181 movement_list = (
235     applied_rule.newContent(portal_type='Simulation Movement'),
236     applied_rule.newContent(portal_type='Simulation Movement')
237     )
238    
239     self.builder.newContent(
240     portal_type='Order Movement Group',
241     collect_order_group='delivery')
242    
243     movement_group_node = self.builder.collectMovement(movement_list)
244     group_list = movement_group_node.getGroupList()
245     self.assertEquals(1, len(group_list))
246     self.assertEquals(dict(causality_list=[order.getRelativeUrl()]),
247     group_list[0].getGroupEditDict())
248    
249     def test_order_movement_group_separating(self):
250     order_1 = self.portal.getDefaultModule(self.document_portal_type) \
251     .newContent(portal_type=self.document_portal_type)
252     applied_rule_1 = self.portal.portal_simulation.newContent(
253     portal_type='Applied Rule',
254     causality_value = order_1
255     )
256    
257     order_2 = self.portal.getDefaultModule(self.document_portal_type) \
258     .newContent(portal_type=self.document_portal_type)
259     applied_rule_2 = self.portal.portal_simulation.newContent(
260     portal_type='Applied Rule',
261     causality_value = order_2
262     )
263    
264     movement_list = (
265     applied_rule_1.newContent(portal_type='Simulation Movement'),
266     applied_rule_2.newContent(portal_type='Simulation Movement')
267     )
268    
269     self.builder.newContent(
270     portal_type='Order Movement Group',
271     collect_order_group='delivery')
272    
273     movement_group_node = self.builder.collectMovement(movement_list)
274     group_list = movement_group_node.getGroupList()
275     self.assertEquals(2, len(group_list))
276     self.assertEquals(1, len([group for group in group_list if
277     group.getGroupEditDict() == dict(causality_list=[order_1.getRelativeUrl()])]))
278     self.assertEquals(1, len([group for group in group_list if
279     group.getGroupEditDict() == dict(causality_list=[order_2.getRelativeUrl()])]))
280    
281     class TestOrderMovementGroupDelivery(TestOrderMovementGroup):
282     """Tests Order Movement Group - grouping and separating by
283     root Applied Rule Causality, in case if that causality is Delivery"""
284     document_portal_type = 'Sale Packing List'
285    
286     class TestDeliveryCausalityAssignmentMovementGroup(MovementGroupTestCase):
287     """Tests Delivery Causality Assignment Movement Group
288     This Movement Group never separates"""
289     order_portal_type = 'Sale Order'
290     order_line_portal_type = 'Sale Order Line'
291     delivery_portal_type = 'Sale Packing List'
292     delivery_line_portal_type = 'Sale Packing List Line'
293    
294     def test_delivery_causality_assignment_movement_group(self):
295     order = self.portal.getDefaultModule(self.order_portal_type) \
296     .newContent(portal_type=self.order_portal_type)
297     order_line_1 = order.newContent(portal_type=self.order_line_portal_type)
298     order_line_2 = order.newContent(portal_type=self.order_line_portal_type)
299    
300     delivery_1 = self.portal.getDefaultModule(self.delivery_portal_type) \
301     .newContent(portal_type=self.delivery_portal_type)
302     delivery_1_line = delivery_1.newContent(portal_type=self.delivery_line_portal_type)
303    
304     delivery_2 = self.portal.getDefaultModule(self.delivery_portal_type) \
305     .newContent(portal_type=self.delivery_portal_type)
306     delivery_2_line = delivery_2.newContent(portal_type=self.delivery_line_portal_type)
307    
308     applied_rule = self.portal.portal_simulation.newContent(
309     portal_type='Applied Rule',
310     causality_value = order
311     )
312     order_movement_list = (
313     applied_rule.newContent(
314     portal_type='Simulation Movement',
315     order_value = order_line_1,
316     delivery_value = delivery_1_line),
317     applied_rule.newContent(
318     portal_type='Simulation Movement',
319     order_value = order_line_2,
320     delivery_value = delivery_2_line),
321     )
322    
323     movement_list = [
324     q.newContent(portal_type='Applied Rule') \
325     .newContent(portal_type='Simulation Movement') \
326     for q in order_movement_list
327     ]
328    
329     self.builder.newContent(
330     portal_type='Delivery Causality Assignment Movement Group',
331     collect_order_group='delivery')
332    
333     movement_group_node = self.builder.collectMovement(movement_list)
334     group_list = movement_group_node.getGroupList()
335    
336     self.assertEquals(1, len(group_list))
337     self.assertEquals(dict(causality_list=[delivery_1.getRelativeUrl(),
338     delivery_2.getRelativeUrl()]),
339     group_list[0].getGroupEditDict())
340    
341     class TestDuplicatedKeyRaiseException(MovementGroupTestCase):
342     """Test, that it is not allowed to have more than one movement group to update
343     same key during building process"""
344     document_portal_type = 'Sale Order'
345     def test(self):
346     order = self.portal.getDefaultModule(self.document_portal_type) \
347     .newContent(portal_type=self.document_portal_type)
348     applied_rule = self.portal.portal_simulation.newContent(
349     portal_type='Applied Rule',
350     causality_value = order
351     )
352    
353     movement_list = (
354     applied_rule.newContent(portal_type='Simulation Movement'),
355     applied_rule.newContent(portal_type='Simulation Movement')
356     )
357    
358     self.builder.newContent(
359     portal_type='Order Movement Group',
360     collect_order_group='delivery')
361    
362     self.builder.newContent(
363     portal_type='Order Movement Group',
364     collect_order_group='delivery')
365    
366     movement_relative_url_list = [q.getRelativeUrl() for q in movement_list]
367     self.assertRaises(
368     DuplicatedPropertyDictKeysError,
369     self.builder.build,
370     movement_relative_url_list = movement_relative_url_list
371     )
372    
373 luke 26457 class TestCategoryMovementGroup(MovementGroupTestCase):
374     def test_category_movement_group_grouping(self):
375     movement_list = ( self.folder.newContent(
376     temp_object=1,
377     portal_type='Simulation Movement',
378     source='1'),
379     self.folder.newContent(
380     temp_object=1,
381     portal_type='Simulation Movement',
382     source='1'))
383     self.builder.newContent(
384     portal_type='Category Movement Group',
385     collect_order_group='delivery',
386     tested_property_list=('source',))
387     movement_group_node = self.builder.collectMovement(movement_list)
388     group_list = movement_group_node.getGroupList()
389     self.assertEquals(1, len(group_list))
390     self.assertEquals(dict(source_list=['1']),
391     group_list[0].getGroupEditDict())
392    
393     def test_category_movement_group_separating(self):
394     movement_list = ( self.folder.newContent(
395     temp_object=1,
396     portal_type='Simulation Movement',
397     source='1'),
398     self.folder.newContent(
399     temp_object=1,
400     portal_type='Simulation Movement',
401     source='2'))
402     self.builder.newContent(
403     portal_type='Category Movement Group',
404     collect_order_group='delivery',
405     tested_property_list=('source',))
406     movement_group_node = self.builder.collectMovement(movement_list)
407     group_list = movement_group_node.getGroupList()
408     self.assertEquals(2, len(group_list))
409     self.assertEquals(1, len([group for group in group_list if
410     group.getGroupEditDict() == dict(source_list=['1'])]))
411     self.assertEquals(1, len([group for group in group_list if
412     group.getGroupEditDict() == dict(source_list=['2'])]))
413    
414     def test_category_movement_group_and_separating(self):
415     movement_list = ( self.folder.newContent(
416     temp_object=1,
417     portal_type='Simulation Movement',
418     destination='A',
419     source='1'),
420     self.folder.newContent(
421     temp_object=1,
422     destination='A',
423     portal_type='Simulation Movement',
424     source='2'))
425     self.builder.newContent(
426     portal_type='Category Movement Group',
427     collect_order_group='delivery',
428     tested_property_list=('destination', 'source'))
429     movement_group_node = self.builder.collectMovement(movement_list)
430     group_list = movement_group_node.getGroupList()
431     self.assertEquals(2, len(group_list))
432     self.assertEquals(1, len([group for group in group_list if
433     group.getGroupEditDict() == dict(destination_list=['A'],
434     source_list=['1'])]))
435     self.assertEquals(1, len([group for group in group_list if
436     group.getGroupEditDict() == dict(destination_list=['A'],
437     source_list=['2'])]))
438    
439 yusei 26508
440 jm 38604 class TestMovementGroupCommonAPI(MovementGroupTestCase):
441 yusei 26508
442     def test_separateMethod(self):
443     """Make sure that _separate method works if argument is an empty list."""
444     import Products.ERP5Type.Document
445     for name in Products.ERP5Type.Document.__dict__:
446     if name[0].isupper() and name.endswith('MovementGroup'):
447     module = getattr(Products.ERP5Type.Document, name)
448     class_ = getattr(module, name)
449     instance = class_('dummy')
450     self.assertEqual(instance._separate([]), [])
451    
452    
453 jerome 24256 def test_suite():
454     suite = unittest.TestSuite()
455     suite.addTest(unittest.makeSuite(TestPropertyMovementGroup))
456 jerome 24257 suite.addTest(unittest.makeSuite(TestPropertyAssignmentMovementGroup))
457 luke 26181 suite.addTest(unittest.makeSuite(TestOrderMovementGroup))
458     suite.addTest(unittest.makeSuite(TestOrderMovementGroupDelivery))
459     suite.addTest(unittest.makeSuite(TestDeliveryCausalityAssignmentMovementGroup))
460     suite.addTest(unittest.makeSuite(TestDuplicatedKeyRaiseException))
461 luke 26457 suite.addTest(unittest.makeSuite(TestCategoryMovementGroup))
462 yusei 26508 suite.addTest(unittest.makeSuite(TestMovementGroupCommonAPI))
463 jerome 24256 return suite
464 luke 26181

  ViewVC Help
Powered by ViewVC 1.1.2