def create_visitor_id(visitor_id, options): """Creates new VisitorId""" if not visitor_id: visitor_id = VisitorId() if not options: options = {} device_id = options.get("device_id") visitor = options.get("visitor") if not visitor_id.tnt_id: visitor_id.tnt_id = device_id if not visitor_id.marketing_cloud_visitor_id: visitor_id.marketing_cloud_visitor_id = get_marketing_cloud_visitor_id(visitor) visitor_id.customer_ids = get_customer_ids(visitor_id.customer_ids, visitor) return visitor_id
def test_get_or_create_visitor_id_uses_tnt_id(self): customer_id = CustomerId(id="custId123", integration_code="A", authenticated_state=AuthenticatedState.UNKNOWN) visitor_id = VisitorId(tnt_id="tnt123", customer_ids=[customer_id], third_party_id="thirtPartyId123") result = get_or_create_visitor_id(visitor_id) self.assertEqual(result, "tnt123")
def get_visitor_id(request, customer_ids=None): tnt_id = request.args.get("tntId") third_party_id = request.args.get("thirdPartyId") mcid = request.args.get("mcid") return VisitorId(tnt_id=tnt_id or None, third_party_id=third_party_id or None, marketing_cloud_visitor_id=mcid or None, customer_ids=customer_ids or None)
def create_id_response(_id): """Create VisitorId""" if not _id: return None return VisitorId( tnt_id=_id.get("tntId"), third_party_id=_id.get("thirdPartyId"), marketing_cloud_visitor_id=_id.get("marketingCloudVisitorId"))
def test_valid_visitor_id_existing_customer_id(self): customer_ids = [ CustomerId(id="custId123", integration_code="A", authenticated_state=AuthenticatedState.AUTHENTICATED) ] visitor_id = VisitorId(customer_ids=customer_ids) result = valid_visitor_id(visitor_id, LOCATION_HINT) self.assertEqual(visitor_id, result)
def create_visitor_id(_id): """Creates new VisitorId""" if not _id: return None return VisitorId( tnt_id=_id.get("tntId"), third_party_id=_id.get("thirdPartyId"), marketing_cloud_visitor_id=_id.get("marketingCloudVisitorId"), customer_ids=create_customer_ids(_id.get("customerIds")))
def test_compute_allocation_generate_visitor_id(self): visitor_id = None allocation = compute_allocation(CLIENT_ID, ACTIVITY_ID, visitor_id, SALT) self.assertTrue(isinstance(allocation, float)) self.assertTrue(allocation >= 0) self.assertTrue(allocation < 100) visitor_id = VisitorId() allocation = compute_allocation(CLIENT_ID, ACTIVITY_ID, visitor_id, SALT) self.assertTrue(isinstance(allocation, float)) self.assertTrue(allocation >= 0) self.assertTrue(allocation < 100)
def test_valid_visitor_id_existing_tnt_id(self): customer_ids = [ CustomerId(id="custId123", integration_code="A", authenticated_state=AuthenticatedState.AUTHENTICATED) ] visitor_id = VisitorId(tnt_id="tnt123", third_party_id="thirdParty123", marketing_cloud_visitor_id="mcid123", customer_ids=customer_ids) result = valid_visitor_id(visitor_id, LOCATION_HINT) self.assertEqual(visitor_id, result)
def test_valid_visitor_id_invalid_customer_id(self): customer_ids = [ CustomerId(id="custIdUnknown", integration_code="A", authenticated_state=AuthenticatedState.UNKNOWN), CustomerId(id="custIdLoggedOut", integration_code="A", authenticated_state=AuthenticatedState.LOGGED_OUT) ] visitor_id = VisitorId(customer_ids=customer_ids) result = valid_visitor_id(visitor_id, LOCATION_HINT) self.assertIsNotNone(result.tnt_id)
def valid_visitor_id(visitor_id, target_location_hint): """ :param visitor_id: (delivery_api_client.Model.visitor_id.VisitorId) visitor ID object :param target_location_hint: (str) Target location hint :return: (delivery_api_client.Model.visitor_id.VisitorId) updated copy of visitor ID object """ result = deepcopy(visitor_id) if visitor_id else VisitorId() if _no_ids(result): location_hint = ".{}_0".format(target_location_hint) if target_location_hint \ and is_string(target_location_hint) else "" result.tnt_id = "{}{}".format(create_uuid(), location_hint) return result
def test_get_or_create_visitor_id_never_uses_customer_id(self): customer_ids = [ CustomerId(id="custId123unknown", integration_code="A", authenticated_state=AuthenticatedState.UNKNOWN), CustomerId(id="custId123loggedout", integration_code="A", authenticated_state=AuthenticatedState.LOGGED_OUT), CustomerId(id="custId123authenticated", integration_code="A", authenticated_state=AuthenticatedState.AUTHENTICATED) ] visitor_id = VisitorId(customer_ids=customer_ids) result = get_or_create_visitor_id(visitor_id) self.assertTrue(isinstance(result, str)) self.assertGreater(len(result), 0) self.assertIsNot(result, "custId123unknown") self.assertIsNot(result, "custId123loggedout") self.assertIsNot(result, "custId123authenticated")
def process_response(session_id, cluster, request, response, decisioning_method=DecisioningMethod.SERVER_SIDE.value, decisioning_engine=None): """Process Delivery API response :return (TargetDeliveryResponse) Returns response envelope """ _id = response.id or VisitorId() edge_host = response.edge_host result = TargetDeliveryResponse( target_cookie=get_target_cookie(session_id, _id), target_location_hint_cookie=get_target_location_hint_cookie(cluster, edge_host), analytics_details=get_analytics_details(response), trace=get_trace_details(response), response_tokens=get_response_tokens(response), meta=get_response_meta( request, decisioning_method, decisioning_engine ), response=response) return remove_empty_values(result)
"channel": ChannelType.WEB, "address": { "url": "http://local-target-test:8080/" }, "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:73.0) Gecko/20100101 Firefox/73.0" }, "prefetch": { "mboxes": [{ "name": "mbox-something", "index": 1 }] } }) TARGET_REQUEST.id = VisitorId() class TestNotificationProvider(unittest.TestCase): """TestNotificationProvider""" def setUp(self): self.mock_notify = Mock() self.provider = NotificationProvider(TARGET_REQUEST, None, self.mock_notify) def test_send_notifications_display_type(self): event_token = "B8C2FP2IuBgmeJcDfXHjGpNWHtnQtQrJfmRrQugEa2qCnQ9Y9OaLL2gsdrWQTvE54PwSz67rmXWmSnkXpSSS2Q==" options = [ Option(content="<h1>it's firefox</h1>", type=OptionType.HTML, event_token=event_token)
def test_valid_visitor_id_existing_third_party(self): visitor_id = VisitorId(third_party_id="thirdParty123") result = valid_visitor_id(visitor_id, LOCATION_HINT) self.assertEqual(visitor_id, result)
def test_compute_allocation_third_party_id(self): visitor_id = VisitorId(third_party_id="thirtPartyId123") allocation = compute_allocation(CLIENT_ID, ACTIVITY_ID, visitor_id, SALT) self.assertEqual(allocation, 73.15)
def test_compute_allocation_tnt_id_with_location_hint(self): visitor_id = VisitorId(tnt_id="tntId123.28_0") allocation = compute_allocation(CLIENT_ID, ACTIVITY_ID, visitor_id, SALT) self.assertEqual(allocation, 21.94)
def test_compute_allocation_ecid(self): visitor_id = VisitorId(marketing_cloud_visitor_id="ecid123") allocation = compute_allocation(CLIENT_ID, ACTIVITY_ID, visitor_id, SALT) self.assertEqual(allocation, 29.06)
def test_valid_visitor_id_existing_ecid(self): visitor_id = VisitorId(marketing_cloud_visitor_id="mcid123") result = valid_visitor_id(visitor_id, LOCATION_HINT) self.assertEqual(visitor_id, result)
def test_valid_visitor_id_generate_tnt_id(self): visitor_id = VisitorId() result = valid_visitor_id(visitor_id, LOCATION_HINT) self.assertIsNotNone(result.tnt_id)