def test_track_ecommerce_transaction_no_items(self, mok_complete_payload): mokEmitter = self.create_patch('snowplow_tracker.Emitter') e = mokEmitter() with ContractsDisabled(): mok_complete_payload.side_effect = mocked_complete_payload t = Tracker(e) ctx = SelfDescribingJson("test.context.schema", {"user": "******"}) evTstamp = 1399021242030 t.track_ecommerce_transaction("1234", 10, "transAffiliation", 2.5, 1.5, "transCity", "transState", "transCountry", "transCurrency", context=[ctx], tstamp=evTstamp) self.assertEqual(mok_complete_payload.call_count, 1) completeArgsList = mok_complete_payload.call_args_list[0][0] self.assertEqual(len(completeArgsList), 4) actualPayloadArg = completeArgsList[0] actualContextArg = completeArgsList[1] actualTstampArg = completeArgsList[2] actualPairs = actualPayloadArg.nv_pairs expectedPairs = { "e": "tr", "tr_id": "1234", "tr_tt": 10, "tr_af": "transAffiliation", "tr_tx": 2.5, "tr_sh": 1.5, "tr_ci": "transCity", "tr_st": "transState", "tr_co": "transCountry", "tr_cu": "transCurrency" } self.assertDictEqual(actualPairs, expectedPairs) self.assertIs(actualContextArg[0], ctx) self.assertEqual(actualTstampArg, evTstamp)
def test_track_ecommerce_transaction_with_items(self, mok_complete_payload, mok_track_trans_item): mokEmitter = self.create_patch('snowplow_tracker.Emitter') e = mokEmitter() with ContractsDisabled(): mok_complete_payload.side_effect = mocked_complete_payload mok_track_trans_item.side_effect = mocked_track_trans_item t = Tracker(e) ctx = SelfDescribingJson("test.context.schema", {"user": "******"}) evTstamp = 1399021242030 transItems = [{ "sku": "sku1234", "quantity": 3, "price": 3.14 }, { "sku": "sku5678", "quantity": 1, "price": 2.72 }] t.track_ecommerce_transaction("1234", 10, "transAffiliation", 2.5, 1.5, "transCity", "transState", "transCountry", "transCurrency", items=transItems, context=[ctx], tstamp=evTstamp) # Transaction callCompleteArgsList = mok_complete_payload.call_args_list firstCallArgsList = callCompleteArgsList[0][0] self.assertEqual(len(firstCallArgsList), 4) actualPayloadArg = firstCallArgsList[0] actualContextArg = firstCallArgsList[1] actualTstampArg = firstCallArgsList[2] actualPairs = actualPayloadArg.nv_pairs expectedTransPairs = { "e": "tr", "tr_id": "1234", "tr_tt": 10, "tr_af": "transAffiliation", "tr_tx": 2.5, "tr_sh": 1.5, "tr_ci": "transCity", "tr_st": "transState", "tr_co": "transCountry", "tr_cu": "transCurrency" } self.assertDictEqual(actualPairs, expectedTransPairs) self.assertIs(actualContextArg[0], ctx) self.assertEqual(actualTstampArg, evTstamp) # Items calls_to_track_trans_item = mok_track_trans_item.call_count self.assertEqual(calls_to_track_trans_item, 2) callTrackItemsArgsList = mok_track_trans_item.call_args_list # 1st item firstItemCallArgs = callTrackItemsArgsList[0][0] self.assertEqual((), firstItemCallArgs) firstItemCallKwargs = callTrackItemsArgsList[0][1] expectedFirstItemPairs = { 'tstamp': evTstamp, 'order_id': '1234', 'currency': 'transCurrency', 'sku': 'sku1234', 'quantity': 3, "price": 3.14, 'event_subject': None } self.assertDictEqual(firstItemCallKwargs, expectedFirstItemPairs) # 2nd item secItemCallArgs = callTrackItemsArgsList[1][0] self.assertEqual((), secItemCallArgs) secItemCallKwargs = callTrackItemsArgsList[1][1] expectedSecItemPairs = { 'tstamp': evTstamp, 'order_id': '1234', 'currency': 'transCurrency', 'sku': 'sku5678', 'quantity': 1, "price": 2.72, 'event_subject': None } self.assertDictEqual(secItemCallKwargs, expectedSecItemPairs)