Example #1
0
    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)
Example #2
0
    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)