From f96e90162673c4fee3cd9ef2dbd384cf30436efb Mon Sep 17 00:00:00 2001
From: Alexandre Boeglin <alex@nexedi.com>
Date: Tue, 12 Feb 2008 16:10:26 +0000
Subject: [PATCH] Test that the default pricing model can deal with purchase
 and sale supplies, with and without source or destination set.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@19276 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testResource.py | 85 ++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

diff --git a/product/ERP5/tests/testResource.py b/product/ERP5/tests/testResource.py
index c82a5d9b1f..db70e00741 100644
--- a/product/ERP5/tests/testResource.py
+++ b/product/ERP5/tests/testResource.py
@@ -33,6 +33,7 @@ from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from AccessControl.SecurityManagement import newSecurityManager
 from zLOG import LOG
 from Products.ERP5Type.tests.Sequence import SequenceList
+from DateTime import DateTime
 
 
 class TestResource(ERP5TypeTestCase):
@@ -47,6 +48,7 @@ class TestResource(ERP5TypeTestCase):
   node_portal_type = 'Organisation'
   sale_supply_portal_type = 'Sale Supply'
   sale_supply_line_portal_type = 'Sale Supply Line'
+  purchase_supply_line_portal_type = 'Purchase Supply Line'
   sale_supply_cell_portal_type = 'Sale Supply Cell'
   variation_base_category_list = ['colour', 'size', 'morphology',
                                   'industrial_phase']
@@ -731,6 +733,89 @@ class TestResource(ERP5TypeTestCase):
         self.assertEquals(base_price, 
                           product.getPrice())
   
+  def test_12_getPurchaseVsSalePrice(self, quiet=0, run=run_all_test):
+    """
+    Test the pricing model with purchase and sale supply lines, and with
+    source/destination.
+    """
+    if not run: return
+    # Initialize variables
+    product_module = self.portal.getDefaultModule(self.product_portal_type)
+    organisation_module = self.getOrganisationModule()
+    currency_module = self.getCurrencyModule()
+    sale_order_module = self.portal.getDefaultModule("Sale Order")
+    purchase_order_module = self.portal.getDefaultModule("Purchase Order")
+    # Create currency and product
+    currency = currency_module.newContent(
+                     portal_type="Currency",
+                     title='A great currency')
+    product = product_module.newContent(
+        portal_type=self.product_portal_type,
+        title="yet another product")
+    # Create organisations
+    orga1 = organisation_module.newContent(
+        portal_type="Organisation",
+        title="orga1")
+    orga2 = organisation_module.newContent(
+        portal_type="Organisation",
+        title="orga2")
+    # Create sale supply lines
+    product.newContent(
+        portal_type=self.sale_supply_line_portal_type,
+        base_price=100.0,
+        destination_value=orga1)
+    product.newContent(
+        portal_type=self.sale_supply_line_portal_type,
+        base_price=200.0,
+        destination_value=orga2)
+    product.newContent(
+        portal_type=self.sale_supply_line_portal_type,
+        base_price=400.0)
+    # Create purchase supply lines
+    product.newContent(
+        portal_type=self.purchase_supply_line_portal_type,
+        base_price=10.0,
+        source_value=orga1)
+    product.newContent(
+        portal_type=self.purchase_supply_line_portal_type,
+        base_price=20.0,
+        source_value=orga2)
+    product.newContent(
+        portal_type=self.purchase_supply_line_portal_type,
+        base_price=40.0)
+    # Create sale order and check price
+    sale_order = sale_order_module.newContent(
+        portal_type="Sale Order",
+        start_date=DateTime(),
+        stop_date=DateTime())
+    sale_order_line = sale_order.newContent(
+        portal_type="Sale Order Line",
+        resource_value=product)
+    get_transaction().commit()
+    self.tic()
+    self.assertEquals(sale_order_line.getPrice(), 400.0)
+    sale_order.setDestinationValue(orga2)
+    get_transaction().commit()
+    self.tic()
+    sale_order_line.setPrice(None)
+    self.assertEquals(sale_order_line.getPrice(), 200.0)
+    # Create purchase order and check price
+    purchase_order = purchase_order_module.newContent(
+        portal_type="Purchase Order",
+        start_date=DateTime(),
+        stop_date=DateTime())
+    purchase_order_line = purchase_order.newContent(
+        portal_type="Purchase Order Line",
+        resource_value=product)
+    get_transaction().commit()
+    self.tic()
+    self.assertEquals(purchase_order_line.getPrice(), 40.0)
+    purchase_order.setSourceValue(orga2)
+    get_transaction().commit()
+    self.tic()
+    purchase_order_line.setPrice(None)
+    self.assertEquals(purchase_order_line.getPrice(), 20.0)
+  
   def testQuantityPrecision(self):
     """test how to define quantity precision on resources.
     """
-- 
2.30.9