def test_get_offers_execute(self): setup_mock("execute", responses) opts = deepcopy(self.get_offers_options) execute = { "mboxes": [{ "name": "cart", "index": 1 }], "pageLoad": { "product": { "id": "123", "categoryId": "456" }, "order": { "id": "111", "total": 100 } } } opts["request"]["prefetch"] = None opts["request"]["execute"] = execute opts["request"] = create_delivery_request(opts["request"]) result = self.client.get_offers(opts) self.assertEqual(len(responses.calls), 1) validate_response(self, result)
def test_get_offers_sync(self): setup_mock("default", responses) opts = deepcopy(self.get_offers_options) opts["request"] = create_delivery_request(opts["request"]) result = self.client.get_offers(opts) self.assertEqual(len(responses.calls), 1) validate_response(self, result)
def test_get_offers_prefetch(self): setup_mock("prefetch", responses) opts = deepcopy(self.get_offers_options) prefetch = { "mboxes": [{ "name": "cart", "index": 1 }], "pageLoad": { "product": { "id": "123", "categoryId": "456" }, "order": { "id": "111", "total": 100 } }, "views": [{ "product": { "id": "123", "categoryId": "456" }, "order": { "id": "111", "total": 100 } }] } opts["request"]["execute"] = None opts["request"]["prefetch"] = prefetch opts["request"] = create_delivery_request(opts["request"]) result = self.client.get_offers(opts) expected_metrics = [{ "type": "click", "selector": "#parent", "eventToken": "xydsb1vdkls", "analytics": { "payload": { "pe": "tnt", "tnta": "347565:1:0|2,347565:1:0|1" } } }] self.assertEqual(len(responses.calls), 1) validate_response(self, result) delivery_response = result.get("response") validate_metrics(delivery_response.prefetch.metrics, expected_metrics) response_tokens = result.get("response_tokens") self.assertIsNotNone(response_tokens) self.assertEqual(len(response_tokens), 2) for response_token in response_tokens: self.assertIsNotNone(response_token.get("activity.id")) self.assertIsNotNone(response_token.get("experience.id"))
def test_send_notifications_sync(self): setup_mock("notifications", responses) opts = deepcopy(self.send_notifications_options) opts["request"] = create_delivery_request(opts["request"]) result = self.client.send_notifications(opts) self.assertEqual(len(responses.calls), 1) validate_response(self, result)
def test_get_offers_target_cookie(self): setup_mock("default", responses) opts = deepcopy(self.get_offers_options) opts["request"] = create_delivery_request(opts["request"]) opts["target_cookie"] = "PC#1.5_9#9596233214|b#2#1296233214" result = self.client.get_offers(opts) self.assertEqual(len(responses.calls), 1) validate_response(self, result) self.assertIsNotNone(result.get("target_cookie")) self.assertIsNotNone(result.get("target_location_hint_cookie"))
def test_get_offers_customer_ids(self): setup_mock("customer_ids", responses) opts = deepcopy(self.get_offers_options) customer_ids = [{ "id": "999", "integrationCode": "foo", "authenticatedState": "authenticated" }] opts["request"]["id"]["customerIds"] = customer_ids opts["request"] = create_delivery_request(opts["request"]) result = self.client.get_offers(opts) self.assertEqual(len(responses.calls), 1) validate_response(self, result)
def test_get_offers_with_preview(self): setup_mock("default", responses) opts = deepcopy(self.get_offers_options) opts["request"]["preview"] = {"token": "sdfdlbys3355"} opts["request"] = create_delivery_request(opts["request"]) request_spy = spy_decorator(ApiClient.request) with patch.object(ApiClient, "request", request_spy): result = self.client.get_offers(opts) # validate Delivery API request expected_req_preview = request_spy.mock.call_args[1]["body"][ "preview"] self.assertEqual(expected_req_preview.get("token"), "sdfdlbys3355") # validate Delivery API response self.assertEqual(len(responses.calls), 1) validate_response(self, result)
def test_get_offers_with_trace(self): setup_mock("debug_trace", responses) opts = deepcopy(self.get_offers_options) opts["request"]["trace"] = { "authorizationToken": "token", "usage": { "a": "b", "c": "d" } } opts["request"] = create_delivery_request(opts["request"]) request_spy = spy_decorator(ApiClient.request) with patch.object(ApiClient, "request", request_spy): result = self.client.get_offers(opts) # validate Delivery API request expected_req_trace = request_spy.mock.call_args[1]["body"]["trace"] self.assertTrue(isinstance(expected_req_trace, dict)) self.assertEqual(expected_req_trace.get("authorizationToken"), "token") self.assertEqual(expected_req_trace.get("usage"), { "a": "b", "c": "d" }) # validate Delivery API response self.assertEqual(len(responses.calls), 1) validate_response(self, result) if not result.get("response").execute.mboxes: self.fail("Expected execute mboxes in DeliveryResponse") for mbox in result.get("response").execute.mboxes: self.assertIsNotNone(mbox.trace) if not result.get("response").prefetch.mboxes: self.fail("Expected prefetch mboxes in DeliveryResponse") for mbox in result.get("response").prefetch.mboxes: self.assertIsNotNone(mbox.trace)
def verify_callback(result): self.assertEqual(len(responses.calls), 1) validate_response(self, result) shared["has_response"] = True