예제 #1
0
def test_valid_click_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}
    full_tracking_result = {}

    class TestClickView(tracking_django.ClickTrackingView):
        def notify_tracking_event(self, tracking_result):
            full_tracking_result.update(
                tracking_result.to_json_dict()._asdict())
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_click_tracking_url(DEFAULT_URL_TO_TRACK,
                                 metadata=DEFAULT_METADATA,
                                 configuration=configuration)
    path = get_click_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()
    request.META["HTTP_X_REAL_IP"] = "10.10.240.22"
    request.META["HTTP_USER_AGENT"] = "Firefox"

    response = TestClickView.as_view()(request, path)

    assert EXPECTED_METADATA == result_metadata
    assert request_data ==\
        {"user_agent": "Firefox", "user_ip": "10.10.240.22"}
    assert response.status_code == 302
    assert response["Location"] == DEFAULT_ENCODED_URL_TO_TRACK
    assert not full_tracking_result["is_open_tracking"]
    assert full_tracking_result["is_click_tracking"]
예제 #2
0
def test_invalid_open_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}
    request_path = []

    class TestOpenView(tracking_django.OpenTrackingView):
        def notify_decoding_error(self, error, request):
            request_path.append(request.path)

        def notify_tracking_event(self, tracking_result):
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_open_tracking_url(metadata=DEFAULT_METADATA,
                                configuration=configuration)
    path = get_open_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()
    request.path = path + "bbb"

    with pytest.raises(Http404):
        TestOpenView.as_view()(request, path + "bbb")

    assert not result_metadata
    assert not request_data
    assert request_path[0].endswith("bbb")
예제 #3
0
def test_valid_click_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}
    full_tracking_result = {}

    class TestClickView(tracking_django.ClickTrackingView):

        def notify_tracking_event(self, tracking_result):
            full_tracking_result.update(
                tracking_result.to_json_dict()._asdict())
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_click_tracking_url(
        DEFAULT_URL_TO_TRACK, metadata=DEFAULT_METADATA,
        configuration=configuration)
    path = get_click_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()
    request.META["HTTP_X_REAL_IP"] = "10.10.240.22"
    request.META["HTTP_USER_AGENT"] = "Firefox"

    response = TestClickView.as_view()(request, path)

    assert EXPECTED_METADATA == result_metadata
    assert request_data ==\
        {"user_agent": "Firefox", "user_ip": "10.10.240.22"}
    assert response.status_code == 302
    assert response["Location"] == DEFAULT_ENCODED_URL_TO_TRACK
    assert not full_tracking_result["is_open_tracking"]
    assert full_tracking_result["is_click_tracking"]
예제 #4
0
def test_valid_open_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}
    full_tracking_result = {}

    class TestOpenView(tracking_django.OpenTrackingView):
        def notify_tracking_event(self, tracking_result):
            full_tracking_result.update(
                tracking_result.to_json_dict()._asdict())
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_open_tracking_url(metadata=DEFAULT_METADATA,
                                configuration=configuration)
    path = get_open_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()
    request.META["HTTP_X_REAL_IP"] = "10.10.240.22"
    request.META["HTTP_USER_AGENT"] = "Firefox"

    response = TestOpenView.as_view()(request, path)

    assert EXPECTED_METADATA == result_metadata
    assert request_data ==\
        {"user_agent": "Firefox", "user_ip": "10.10.240.22"}
    assert response.status_code == 200
    assert response.content == TRACKING_PIXEL
    assert response["Content-Type"] == PNG_MIME_TYPE
    assert full_tracking_result["is_open_tracking"]
    assert not full_tracking_result["is_click_tracking"]
예제 #5
0
def test_invalid_open_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}
    request_path = []

    class TestOpenView(tracking_django.OpenTrackingView):

        def notify_decoding_error(self, error, request):
            request_path.append(request.path)

        def notify_tracking_event(self, tracking_result):
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_open_tracking_url(
        metadata=DEFAULT_METADATA, configuration=configuration)
    path = get_open_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()
    request.path = path + "bbb"

    with pytest.raises(Http404):
        TestOpenView.as_view()(request, path + "bbb")

    assert not result_metadata
    assert not request_data
    assert request_path[0].endswith("bbb")
예제 #6
0
def test_valid_open_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}
    full_tracking_result = {}

    class TestOpenView(tracking_django.OpenTrackingView):

        def notify_tracking_event(self, tracking_result):
            full_tracking_result.update(
                tracking_result.to_json_dict()._asdict())
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_open_tracking_url(
        metadata=DEFAULT_METADATA, configuration=configuration)
    path = get_open_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()
    request.META["HTTP_X_REAL_IP"] = "10.10.240.22"
    request.META["HTTP_USER_AGENT"] = "Firefox"

    response = TestOpenView.as_view()(request, path)

    assert EXPECTED_METADATA == result_metadata
    assert request_data ==\
        {"user_agent": "Firefox", "user_ip": "10.10.240.22"}
    assert response.status_code == 200
    assert response.content == TRACKING_PIXEL
    assert response["Content-Type"] == PNG_MIME_TYPE
    assert full_tracking_result["is_open_tracking"]
    assert not full_tracking_result["is_click_tracking"]
예제 #7
0
def test_empty_click_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}

    class TestClickView(tracking_django.ClickTrackingView):

        def notify_tracking_event(self, tracking_result):
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_click_tracking_url(
        "", metadata=DEFAULT_METADATA,
        configuration=configuration)
    path = get_click_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()

    with pytest.raises(Http404):
        TestClickView.as_view()(request, path)

    # No tracking
    assert not result_metadata
    assert not request_data
예제 #8
0
def test_get_tracking_result(setup_django):
    configuration = tracking_django.get_configuration_from_settings()

    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        metadata=DEFAULT_METADATA)
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    request = FakeDjangoRequest()
    request.META["HTTP_X_REAL_IP"] = "10.10.240.22"
    request.META["HTTP_USER_AGENT"] = "Firefox"

    tracking_result = tracking_django.get_tracking_result(
        request, path, True, configuration)

    assert tracking_result.request_data ==\
        {"user_agent": "Firefox", "user_ip": "10.10.240.22"}
    assert tracking_result.metadata == EXPECTED_METADATA
예제 #9
0
def test_get_tracking_result(setup_django):
    configuration = tracking_django.get_configuration_from_settings()

    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        metadata=DEFAULT_METADATA)
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    request = FakeDjangoRequest()
    request.META["HTTP_X_REAL_IP"] = "10.10.240.22"
    request.META["HTTP_USER_AGENT"] = "Firefox"

    tracking_result = tracking_django.get_tracking_result(
        request, path, True, configuration)

    assert tracking_result.request_data ==\
        {"user_agent": "Firefox", "user_ip": "10.10.240.22"}
    assert tracking_result.metadata == EXPECTED_METADATA
def add_tracking_info(email: post_office_models.Email,
                      click_tracking: bool = False,
                      open_tracking: bool = False) -> post_office_models.Email:
    msg_id = email.headers.get('Message-ID', None)

    # TODO: add expectation

    html_message = adapt_html(
        '<html><body>%s</body></html>' % email.html_message,
        extra_metadata={
            'tenant': db_connection.tenant.id,
            'id': msg_id,
        },
        click_tracking=click_tracking,
        open_tracking=open_tracking,
        configuration=get_configuration_from_settings(),
    )

    email.html_message = html_message

    if email.id:
        email.save()

    return email
예제 #11
0
def test_empty_click_tracking_view(setup_django):
    result_metadata = {}
    request_data = {}

    class TestClickView(tracking_django.ClickTrackingView):
        def notify_tracking_event(self, tracking_result):
            result_metadata.update(tracking_result.metadata)
            request_data.update(tracking_result.request_data)

    configuration = tracking_django.get_configuration_from_settings()

    url = get_click_tracking_url("",
                                 metadata=DEFAULT_METADATA,
                                 configuration=configuration)
    path = get_click_tracking_url_path(url, configuration=configuration)

    request = FakeDjangoRequest()

    with pytest.raises(Http404):
        TestClickView.as_view()(request, path)

    # No tracking
    assert not result_metadata
    assert not request_data