def test_sponsors(): """ Do an end-to-end sponsor check. """ opportunities = DataFrame({ "AccountId": ["A01", "B01", "A01", "B01", "B01"], "Amount": [5, 20, 4, 40, 30], "CloseDate": ['2009-01-02', '2009-01-03', '2009-01-04', '2010-01-02', '2010-01-02'], "RecordTypeId": ['01216000001IhIEAA0', '01216000001IhIEAA0', '01216000001IhmxAAC', '01216000001IhmxAAC', '01216000001IhmxAAC'], "Type": ['Standard', 'In-Kind', '', 'In-Kind', ''], }) accounts = DataFrame({ "AccountId": ["A01", "B01"], "Text_For_Donor_Wall__c": ["Donor A", "Donor B"], "Website": ['http://A01.com', 'http://B01.com'], }) expected = """{ "2009": [ { "events_revenue": "$4", "digital_in_kind": "$0", "sponsor": "Donor A", "url": "http://A01.com", "events_in_kind": "$0", "total": "$9", "digital_revenue": "$5" }, { "events_revenue": "$0", "digital_in_kind": "$20", "sponsor": "Donor B", "url": "http://B01.com", "events_in_kind": "$0", "total": "$20", "digital_revenue": "$0" } ], "2010": [ { "events_revenue": "$30", "digital_in_kind": "$0", "sponsor": "Donor B", "url": "http://B01.com", "events_in_kind": "$40", "total": "$70", "digital_revenue": "$0" } ], "all-time": [ { "events_revenue": "$4", "digital_in_kind": "$0", "sponsor": "Donor A", "url": "http://A01.com", "events_in_kind": "$0", "total": "$9", "digital_revenue": "$5" }, { "events_revenue": "$30", "digital_in_kind": "$20", "sponsor": "Donor B", "url": "http://B01.com", "events_in_kind": "$40", "total": "$90", "digital_revenue": "$0" } ] } """ actual = convert_sponsors(opportunities=opportunities, accounts=accounts) assert json.loads(actual) == json.loads(expected)
def test_sponsors_sort_order(): """ Confirm that sponsors are sorted by their name, not ID. """ opportunities = DataFrame({ "AccountId": ["A01", "B01", "C01"], "Amount": [20, 20, 20], "CloseDate": ['2009-01-02', '2009-01-02', '2009-01-02'], "RecordTypeId": ['01216000001IhIEAA0', '01216000001IhIEAA0', '01216000001IhIEAA0'], "Type": ['Standard', 'Standard', 'Standard'], }) accounts = DataFrame({ "AccountId": ["A01", "B01", "C01"], "Text_For_Donor_Wall__c": ["Donor Z", "Donor A", "Donor B"], "Website": ['http://Z01.com', 'http://A01.com', 'http://B01.com'], }) expected = """ { "2009": [ { "url": "http://A01.com", "events_in_kind": "$0", "digital_revenue": "$20", "digital_in_kind": "$0", "sponsor": "Donor A", "events_revenue": "$0", "total": "$20" }, { "url": "http://B01.com", "events_in_kind": "$0", "digital_revenue": "$20", "digital_in_kind": "$0", "sponsor": "Donor B", "events_revenue": "$0", "total": "$20" }, { "url": "http://Z01.com", "events_in_kind": "$0", "digital_revenue": "$20", "digital_in_kind": "$0", "sponsor": "Donor Z", "events_revenue": "$0", "total": "$20" } ], "all-time": [ { "url": "http://A01.com", "events_in_kind": "$0", "digital_revenue": "$20", "digital_in_kind": "$0", "sponsor": "Donor A", "events_revenue": "$0", "total": "$20" }, { "url": "http://B01.com", "events_in_kind": "$0", "digital_revenue": "$20", "digital_in_kind": "$0", "sponsor": "Donor B", "events_revenue": "$0", "total": "$20" }, { "url": "http://Z01.com", "events_in_kind": "$0", "digital_revenue": "$20", "digital_in_kind": "$0", "sponsor": "Donor Z", "events_revenue": "$0", "total": "$20" } ] } """ actual = convert_sponsors(opportunities=opportunities, accounts=accounts) assert json.loads(actual) == json.loads(expected)
sleep(3) bulk.close_job(job) rows = bulk.get_batch_result_iter(job, batch, parse_csv=True) accts = DataFrame.from_dict(list(rows)) accts.rename(columns={'Id': 'AccountId'}, inplace=True) return opps, accts # Circles print "Fetching Circle data..." generate_circle_data() # Sponsors opps, accts = sf_data(sponsors_query) print "Transforming and exporting to JSON..." json_output = convert_sponsors(opportunities=opps, accounts=accts) print "Saving sponsors to S3..." push_to_s3(filename='sponsors.json', contents=json_output) # Donors opps, accounts = sf_data(donors_query) print "Transforming and exporting to JSON..." json_output = convert_donors(opportunities=opps, accounts=accts) print "Saving donors to S3..." push_to_s3(filename='donors.json', contents=json_output)