[Erp5-report] r28209 - /erp5/trunk/products/ERP5/tests/testERP5Commerce.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Jul 29 17:05:26 CEST 2009


Author: vincentd
Date: Wed Jul 29 17:05:23 2009
New Revision: 28209

URL: http://svn.erp5.org?rev=28209&view=rev
Log:
Add parts of the paypal implementation, actually can't work without good security (unquote all commented lines to see the problem)

Modified:
    erp5/trunk/products/ERP5/tests/testERP5Commerce.py

Modified: erp5/trunk/products/ERP5/tests/testERP5Commerce.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testERP5Commerce.py?rev=28209&r1=28208&r2=28209&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testERP5Commerce.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testERP5Commerce.py [utf8] Wed Jul 29 17:05:23 2009
@@ -31,6 +31,7 @@
 from Testing import ZopeTestCase
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from AccessControl.SecurityManagement import newSecurityManager
+from AccessControl.SecurityManagement import getSecurityManager
 from zLOG import LOG
 import transaction
 import urllib
@@ -144,6 +145,49 @@
     self.clearModule(self.portal.sale_order_module)
     self.clearModule(self.portal.currency_module)
     self.portal.portal_caches.clearAllCache()
+
+  def createDefaultOrganisation(self):
+    """
+      Create Seller organisation
+    """
+    self.organisation_module = self.portal.getDefaultModule('Organisation')
+    if 'seller' not in self.organisation_module.objectIds():
+        self.nexedi = self.organisation_module.newContent(
+        title="Seller",
+        group='seller',
+        role='internal',
+        id='seller',
+      )
+
+  def createTestUser(self, first_name, last_name, reference, group,
+                     destination_project=None, id=None):
+    """
+      Create a user with the given parameters
+    """
+    # Do not create an already existing user - XXX why is this needed after all ? (JPS)
+    if self.portal.portal_catalog.getResultValue(portal_type='Person',
+                 reference=reference) is not None:
+      return
+    
+    self.person_module = self.getPersonModule()
+    person = self.person_module.newContent(
+      first_name=first_name,
+      last_name=last_name,
+      reference=reference,
+      password='secret',
+      career_role='internal',
+      id=id or reference,
+    )
+
+    # Set the assignment
+    assignment = person.newContent(portal_type='Assignment')
+    assignment.edit(function='', destination_value= getattr(self, 'seller', None),
+                    start_date='1972-01-01', stop_date='2999-12-31',
+                    group=group, destination_project=destination_project)
+    assignment.open()
+
+    get_transaction().commit()
+    self.tic()
 
   def changeUser(self, name):
     user_folder = self.getPortal().acl_users
@@ -215,7 +259,16 @@
     supply_line.setPricedQuantity(1)
     supply_line.setDefaultResourceValue(product)
     supply_line.setPriceCurrency('currency_module/1')
-    
+
+  def createUser(self, name, role_list):
+    user_folder = self.getPortal().acl_users
+    user_folder._doAddUser(name, 'password', role_list, [])
+
+  def changeUser(self, user_id):
+    user_folder = self.getPortal().acl_users
+    user = user_folder.getUserById(user_id).__of__(user_folder)
+    newSecurityManager(None, user)
+
   def setupWebSite(self, **kw):
     """
       Setup Web Site
@@ -236,8 +289,19 @@
                                                 **kw)
     transaction.commit()
     self.tic()
+
     web_site.WebSite_setupECommerceWebSite()
     self.initialiseSupplyLine()
+
+    transaction.commit()
+    self.tic()
+
+    self.createDefaultOrganisation()
+    self.createTestUser(first_name="Web",
+                        last_name='master',
+                        reference='webmaster',
+                        group=None)
+    #XXX INSERT security here 
     return web_site
     
   def test_01_AddResourceToShoppingCart(self, quiet=0, run=run_all_test):
@@ -707,31 +771,51 @@
     
     #1 initialise a website
     web_site = self.setupWebSite()
-
-    #2 login    
+    web_site.setProperty('ecommerce_paypal_username', 'user')
+    web_site.setProperty('ecommerce_paypal_password', 'pass')
+    web_site.setProperty('ecommerce_paypal_signature', 'signature')
+
+    #2 login and activate a cart
+    #self.changeUser('webmaster')
+    request = self.app.REQUEST
+    request.set('session_id', SESSION_ID)
 
     #3 add a product in the cart
-
+    default_product = self.getDefaultProduct()
+    portal.Resource_addToShoppingCart(default_product, 1)
+    get_transaction().commit()
+    self.tic()
+    
     #4 chose a shipping for the cart
+    shipping_resource_list = portal.SaleOrder_getAvailableShippingResourceList()
+    #XXX apply it to the cart
 
     #5 : paypal step 1 : get a new token
-    #token = web_site.WebSite_getNewPaypalToken()    
-    #self.assertNotEquals(token, None)
+    token = web_site.WebSite_getNewPaypalToken()    
+    self.assertNotEquals(token, None)
 
     #6 : paypal step 2 : go to paypal and confirm this token
-
+    # PayerID is normaly set in the request when paypal redirect to the instance
+    request.set('PayerID', 'THEPAYERID')
+    
     #7 : paypal step 3 : check if this token is confirmed by paypal
-    # use WebSection_checkPaypalIdentification
-
+    error = web_site.WebSection_checkPaypalIdentification()
+    self.assertEquals(error, None)
+    self.assertTrue('/checkout' in request.RESPONSE.getHeader('location'))
+    
     #8 : paypal step 4 : validate the payment
-    # use WebSection_doPaypalPayment
-
+    self.assertEquals(1, len(portal.SaleOrder_getShoppingCartItemList()))
+    self.assertEquals(0, len(portal.sale_order_module.contentValues()))
+    #web_site.WebSection_doPaypalPayment(token=token)
+    #get_transaction().commit()
+    #self.tic()
+    
     #9 check if sale order created
-
-    #10 check sale order price and status
-
-    #11 clean
+    #self.assertEquals(0, len(portal.SaleOrder_getShoppingCartItemList()))
+    #self.assertEquals(1, len(portal.sale_order_module.contentValues()))
+
     custom_skin.manage_delObjects([method_id])
+    self.changeUser('ivan')
     
 import unittest
 def test_suite():




More information about the Erp5-report mailing list