jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/351215 )

Change subject: Normalize subscr_ messages from SAR files
......................................................................


Normalize subscr_ messages from SAR files

Oops, missed these in the first round of normalization fixes!

Bug: T164226
Change-Id: Ied710a6f34a0c6ecb007a517849765cd564037cc
---
M audit/paypal/SarFile.py
A audit/paypal/tests/data/classic_subscr_cancel.csv
A audit/paypal/tests/data/classic_subscr_signup.csv
A audit/paypal/tests/test_sar_file.py
4 files changed, 102 insertions(+), 21 deletions(-)

Approvals:
  XenoRyet: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/audit/paypal/SarFile.py b/audit/paypal/SarFile.py
index f86e8e6..3f864f0 100644
--- a/audit/paypal/SarFile.py
+++ b/audit/paypal/SarFile.py
@@ -4,10 +4,11 @@
 '''
 
 from process.logging import Logger as log
-from process.globals import config
-from queue.redis_wrap import Redis
+import process.globals
+import queue.redis_wrap
 import ppreport
-from civicrm.civicrm import Civicrm
+
+import civicrm.civicrm
 
 
 class SarFile(object):
@@ -48,7 +49,9 @@
 
     def __init__(self, path):
         self.path = path
-        self.crm = Civicrm(config.civicrm_db)
+        self.config = process.globals.get_config()
+        print(self.config)
+        self.crm = civicrm.civicrm.Civicrm(self.config.civicrm_db)
 
     def parse(self):
         ppreport.read(self.path, self.VERSION, self.parse_line, 
self.column_headers)
@@ -70,50 +73,60 @@
             raise RuntimeError("Message is missing some important fields: 
[{fields}]".format(fields=", ".join(missing_fields)))
 
         names = row['Subscription Payer Name'].split(' ')
+        date = ppreport.parse_date(row['Subscription Creation Date'])
 
         out = {
             'subscr_id': row['Subscription ID'],
-            'mc_currency': row['Subscription Currency'],
-            'mc_amount3': float(row['Period 3 Amount']) / 100,
-            'period3': row['Subscription Period 3'],
-            'subscr_date': row['Subscription Creation Date'],
-            'payer_email': row['Subscription Payer email address'],
+            'currency': row['Subscription Currency'],
+            'gross': float(row['Period 3 Amount']) / 100,
+            'email': row['Subscription Payer email address'],
             'first_name': names[0],
             'last_name': " ".join(names[1:]),
-            'address_street': row['Shipping Address Line1'],
-            'address_city': row['Shipping Address City'],
-            'address_zip': row['Shipping Address Zip'],
-            'address_state': row['Shipping Address State'],
-            'address_country_code': row['Shipping Address Country'],
-            'gateway': 'paypal',
+            'street_address': row['Shipping Address Line1'],
+            'city': row['Shipping Address City'],
+            'postal_code': row['Shipping Address Zip'],
+            'state_province': row['Shipping Address State'],
+            'country': row['Shipping Address Country'],
+            'gateway': 'paypal',  # TODO: Express checkout
         }
 
         # FIXME what historical evil caused...
         if row['Subscription Period 3'] != "1 M":
             raise RuntimeError("Unknown subscription period 
{period}".format(period=row['Subscription Period 3']))
+        else:
+            out['frequency_interval'] = '1'
+            out['frequency_unit'] = 'month'
+
+        log_params = {
+            'id': out['subscr_id'],
+            'date': row['Subscription Creation Date'],
+        }
 
         if row['Subscription Action Type'] == 'S0000':
             out['txn_type'] = 'subscr_signup'
+            out['start_date'] = date
+            out['create_date'] = date
             if self.crm.subscription_exists(out['subscr_id']):
-                
log.info("-Duplicate\t{id}\t{date}\tsubscr_signup".format(id=out['subscr_id'], 
date=out['subscr_date']))
+                
log.info("-Duplicate\t{id}\t{date}\tsubscr_signup".format(**log_params))
                 return
         elif row['Subscription Action Type'] == 'S0100':
-            
log.info("-Ignored\t{id}\t{date}\tsubscr_modify".format(id=out['subscr_id'], 
date=out['subscr_date']))
+            
log.info("-Ignored\t{id}\t{date}\tsubscr_modify".format(**log_params))
             return
         elif row['Subscription Action Type'] == 'S0200':
             out['txn_type'] = 'subscr_cancel'
-            out['cancel_date'] = out['subscr_date']
+            out['cancel_date'] = date
         elif row['Subscription Action Type'] == 'S0300':
             out['txn_type'] = 'subscr_eot'
 
-        if config.no_thankyou:
+        if self.config.no_thankyou:
             out['thankyou_date'] = 0
 
-        log.info("+Sending\t{id}\t{date}\t{type}".format(id=out['subscr_id'], 
date=out['subscr_date'], type=out['txn_type']))
+        log_params['type'] = out['txn_type']
+        log.info("+Sending\t{id}\t{date}\t{type}".format(**log_params))
         self.send(out)
 
     def send(self, msg):
         if not self.redis:
-            self.redis = Redis()
+            self.redis = queue.redis_wrap.Redis()
 
         self.redis.send('recurring', msg)
diff --git a/audit/paypal/tests/data/classic_subscr_cancel.csv 
b/audit/paypal/tests/data/classic_subscr_cancel.csv
new file mode 100644
index 0000000..39be7aa
--- /dev/null
+++ b/audit/paypal/tests/data/classic_subscr_cancel.csv
@@ -0,0 +1,2 @@
+"CH","Subscription ID","Subscription Action Type","Subscription 
Currency","Subscription Creation Date","Subscription Period 1","Period 1 
Amount","Subscription Period 2","Period 2 Amount","Subscription Period 
3","Period 3 Amount","Recurring","Recurrence number","Subscription Payer PayPal 
Account ID","Subscription Payer email address","Subscription Payer 
Name","Subscription Payer Business Name","Shipping Address Line1","Shipping 
Address City","Shipping Address State","Shipping Address Zip","Shipping Address 
Country","Subscription Description","Subscription Memo","Subscription Custom 
Field"
+"SB","S-7J123456DS987654B","S0200","EUR",2017/04/30 01:00:00 
-0700,"","","","","1 
M","300","N",-1,"D8ABCDE6ZYXWV","[email protected]","Donantus 
Recurricus","Donantus Recurricus","Rue Faux, 
41","Paris","Paris","12345","FR","Donacion Recourante","","12345678"
diff --git a/audit/paypal/tests/data/classic_subscr_signup.csv 
b/audit/paypal/tests/data/classic_subscr_signup.csv
new file mode 100644
index 0000000..97ac980
--- /dev/null
+++ b/audit/paypal/tests/data/classic_subscr_signup.csv
@@ -0,0 +1,2 @@
+"CH","Subscription ID","Subscription Action Type","Subscription 
Currency","Subscription Creation Date","Subscription Period 1","Period 1 
Amount","Subscription Period 2","Period 2 Amount","Subscription Period 
3","Period 3 Amount","Recurring","Recurrence number","Subscription Payer PayPal 
Account ID","Subscription Payer email address","Subscription Payer 
Name","Subscription Payer Business Name","Shipping Address Line1","Shipping 
Address City","Shipping Address State","Shipping Address Zip","Shipping Address 
Country","Subscription Description","Subscription Memo","Subscription Custom 
Field"
+"SB","S-7J123456DS987654B","S0000","EUR",2017/04/30 01:00:00 
-0700,"","","","","1 
M","300","N",-1,"D8ABCDE6ZYXWV","[email protected]","Donantus 
Recurricus","Donantus Recurricus","Rue Faux, 
41","Paris","Paris","12345","FR","Donacion Recourante","","12345678"
diff --git a/audit/paypal/tests/test_sar_file.py 
b/audit/paypal/tests/test_sar_file.py
new file mode 100644
index 0000000..be2c50c
--- /dev/null
+++ b/audit/paypal/tests/test_sar_file.py
@@ -0,0 +1,64 @@
+import csv
+from mock import patch
+import nose.tools
+import os
+
+import audit.paypal.SarFile
+
+# weird thing we have to do to get better assert_equals feedback
+nose.tools.assert_equals.im_class.maxDiff = None
+
+
+def get_csv_row(filename):
+    path = os.path.dirname(__file__) + "/data/" + filename + ".csv"
+    with open(path, 'r') as datafile:
+        r = csv.DictReader(datafile)
+        return r.next()
+
+
+@patch("queue.redis_wrap.Redis")
+@patch("civicrm.civicrm.Civicrm")
+@patch("process.globals.get_config")
+def test_subscr_signup(MockConfig, MockCivicrm, MockRedis):
+    '''
+    Test that subscr_signup messages are correctly filed
+    '''
+    row = get_csv_row("classic_subscr_signup")
+
+    MockConfig.return_value.no_thankyou = False
+    MockCivicrm().subscription_exists.return_value = False
+
+    parser = audit.paypal.SarFile.SarFile("dummy_path")
+
+    parser.parse_line(row)
+
+    # Did we send it?
+    args = MockRedis().send.call_args
+    expected = {'subscr_id': 'S-7J123456DS987654B', 'txn_type': 
'subscr_signup', 'currency': 'EUR', 'gross': 3.0, 'frequency_unit': 'month', 
'frequency_interval': '1', 'create_date': 1493539200, 'start_date': 1493539200, 
'email': '[email protected]', 'first_name': 'Donantus', 'last_name': 
'Recurricus', 'street_address': 'Rue Faux, 41', 'city': 'Paris', 
'state_province': 'Paris', 'country': 'FR', 'postal_code': '12345', 'gateway': 
'paypal'}
+    nose.tools.assert_equals('recurring', args[0][0])
+    actual = args[0][1]
+    nose.tools.assert_equals(expected, actual)
+
+
+@patch("queue.redis_wrap.Redis")
+@patch("civicrm.civicrm.Civicrm")
+@patch("process.globals.get_config")
+def test_subscr_cancel(MockConfig, MockCivicrm, MockRedis):
+    '''
+    Test that subscr_cancel messages are correctly filed
+    '''
+    row = get_csv_row("classic_subscr_cancel")
+
+    MockConfig.return_value.no_thankyou = False
+    MockCivicrm().subscription_exists.return_value = True
+
+    parser = audit.paypal.SarFile.SarFile("dummy_path")
+
+    parser.parse_line(row)
+
+    # Did we send it?
+    args = MockRedis().send.call_args
+    expected = {'subscr_id': 'S-7J123456DS987654B', 'txn_type': 
'subscr_cancel', 'currency': 'EUR', 'gross': 3.0, 'frequency_unit': 'month', 
'frequency_interval': '1', 'cancel_date': 1493539200, 'email': 
'[email protected]', 'first_name': 'Donantus', 'last_name': 
'Recurricus', 'street_address': 'Rue Faux, 41', 'city': 'Paris', 
'state_province': 'Paris', 'country': 'FR', 'postal_code': '12345', 'gateway': 
'paypal'}
+    nose.tools.assert_equals('recurring', args[0][0])
+    actual = args[0][1]
+    nose.tools.assert_equals(expected, actual)

-- 
To view, visit https://gerrit.wikimedia.org/r/351215
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ied710a6f34a0c6ecb007a517849765cd564037cc
Gerrit-PatchSet: 2
Gerrit-Project: wikimedia/fundraising/tools
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
Gerrit-Reviewer: XenoRyet <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to