From 7f93d4837c8f81244cbedb82edd46d4f891abeea Mon Sep 17 00:00:00 2001
From: Fabien Morin <fabien@nexedi.com>
Date: Mon, 7 Dec 2009 16:49:04 +0000
Subject: [PATCH] initial import of testApparelModel

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31130 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testApparelModel.py | 163 +++++++++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 product/ERP5/tests/testApparelModel.py

diff --git a/product/ERP5/tests/testApparelModel.py b/product/ERP5/tests/testApparelModel.py
new file mode 100644
index 0000000000..a05ce1ef93
--- /dev/null
+++ b/product/ERP5/tests/testApparelModel.py
@@ -0,0 +1,163 @@
+##############################################################################
+#
+# Copyright (c) 2009, 2010 Nexedi SA and Contributors. All Rights Reserved.
+#          Fabien Morin <fabien@nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+import unittest
+from Products.ERP5Type.tests.utils import reindex
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from zLOG import LOG
+import transaction
+
+class TestApparelModel(ERP5TypeTestCase):
+
+  def getTitle(self):
+    return "Apparel Model"
+
+  def getBusinessTemplateList(self):
+    return (
+      'erp5_base',
+      'erp5_pdm',
+      'erp5_trade',
+      'erp5_apparel')
+
+  def afterSetUp(self):
+    """Prepare the test."""
+    self.createCategories()
+
+  @reindex
+  def createCategories(self):
+    """Create the categories for our test. """
+    # create categories
+    for cat_string in self.getNeededCategoryList() :
+      base_cat = cat_string.split("/")[0]
+      # if base_cat not exist, create it
+      if getattr(self.getPortal().portal_categories, base_cat, None) == None:
+        self.getPortal().portal_categories.newContent(\
+                                          portal_type='Base Category',
+                                          id=base_cat)
+      path = self.getPortal().portal_categories[base_cat]
+      for cat in cat_string.split("/")[1:] :
+        if not cat in path.objectIds() :
+          path = path.newContent(
+                    portal_type='Category',
+                    id=cat,
+                    title=cat.replace('_', ' ').title(),)
+        else:
+          path = path[cat]
+    # check categories have been created
+    for cat_string in self.getNeededCategoryList() :
+      self.assertNotEquals(None,
+                self.getCategoryTool().restrictedTraverse(cat_string),
+                cat_string)
+
+  def getNeededCategoryList(self):
+    """return a list of categories that should be created."""
+    return ('composition/acrylique',
+            'composition/elasthane',
+           )
+
+  def test_checkCopyComposition(self):
+    '''
+    Check that it's possible to copy composition from a model, and that cells
+    are well created.
+    '''
+    # defin an apparel fabric
+    apparel_fabric_module = self.getPortal().getDefaultModule('Apparel Fabric')
+    apparel_fabric = apparel_fabric_module.newContent(portal_type=\
+        'Apparel Fabric')
+    apparel_fabric.setCategoryList(('composition/acrylique', 'composition/elasthane'))
+    apparel_fabric.updateCellRange(base_id='composition')
+
+    # create composition cells
+    acrylique = apparel_fabric.newCell('composition/acrylique',
+        base_id='composition', portal_type='Mapped Value')
+    acrylique.setQuantity(0.88)
+    elasthane = apparel_fabric.newCell('composition/elasthane',
+        base_id='composition', portal_type='Mapped Value')
+    elasthane.setQuantity(0.12)
+
+    # add some color variations
+    fabric_color1 = apparel_fabric.newContent(portal_type='Apparel Fabric Colour Variation',
+        title='Bleu ciel')
+    fabric_color2 = apparel_fabric.newContent(portal_type='Apparel Fabric Colour Variation',
+        title='Volcano')
+
+    # create an Apparel Colour Range
+    apparel_colour_range_module = self.getPortal().getDefaultModule(\
+        'Apparel Colour Range')
+    apparel_colour_range = apparel_colour_range_module.newContent(portal_type=\
+        'Apparel Colour Range')
+    color1 = apparel_colour_range.newContent(title='Blue',
+        portal_type='Apparel Colour Range Variation')
+    color2 = apparel_colour_range.newContent(title='Red',
+        portal_type='Apparel Colour Range Variation')
+
+    variation1 = color1.newContent(title='Ocean', int_index=2,
+        portal_type='Apparel Colour Range Variation Line')
+    variation2 = color1.newContent(title='Volcano', int_index=1,
+        portal_type='Apparel Colour Range Variation Line')
+
+    variation1.setSpecialiseValue(fabric_color1)
+    variation2.setSpecialiseValue(fabric_color2)
+
+    # create an Apparel Model
+    apparel_model_module = self.getPortal().getDefaultModule(\
+        'Apparel Model')
+    apparel_model = apparel_model_module.newContent(portal_type='Apparel Model')
+    apparel_model.setSpecialiseValue(apparel_colour_range)
+    apparel_model.ApparelModel_copyComposition()
+
+    # check the cells have been copied
+    self.assertEquals(len(apparel_model.contentValues(portal_type=\
+        'Mapped Value')), 2)
+    self.assertNotEquals(apparel_model.getCell('composition/acrylique',
+      base_id='composition'), None)
+    cell1 = apparel_model.getCell('composition/acrylique',
+                                  base_id='composition')
+    self.assertEqual(cell1.getQuantity(), 0.88)
+    self.assertNotEquals(apparel_model.getCell('composition/elasthane',
+      base_id='composition'), None)
+    cell1 = apparel_model.getCell('composition/elasthane',
+                                  base_id='composition')
+    self.assertEqual(cell1.getQuantity(), 0.12)
+
+    # check indexes are present
+    self.assertTrue(apparel_model.index.has_key('composition'))
+    self.assertTrue(apparel_model.index['composition'][0].has_key('composition/elasthane'))
+    self.assertTrue(apparel_model.index['composition'][0].has_key('composition/acrylique'))
+
+  def test_checkCopyColourRangeVariation(self):
+    '''
+    Check that it's possible to copy colour range variation from a model, and
+    that cells are well created.
+    '''
+    pass
+
+
+def test_suite():
+  suite = unittest.TestSuite()
+  suite.addTest(unittest.makeSuite(TestApparelModel))
+  return suite
-- 
2.30.9