Beispiel #1
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")
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"]
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")
Beispiel #4
0
def test_minimal_encrypted_get_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        metadata=DEFAULT_METADATA,
        encryption_bytestring_key=DEFAULT_ENCRYPTION_KEY,
    )
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    tracking_result = get_open_tracking_result(
        path,
        request_data=DEFAULT_REQUEST_DATA,
        default_metadata=DEFAULT_DEFAULT_METADATA,
        webhook_url=DEFAULT_WEBHOOK_URL,
        encryption_bytestring_key=DEFAULT_ENCRYPTION_KEY,
    )

    expected_metadata = copy.copy(DEFAULT_DEFAULT_METADATA)
    expected_metadata.update(DEFAULT_METADATA)

    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data == DEFAULT_REQUEST_DATA
    assert tracking_result.metadata == expected_metadata
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
Beispiel #5
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"]
def test_basic_encrypted_get_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        encryption_bytestring_key=DEFAULT_ENCRYPTION_KEY)
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)
    key = Fernet(DEFAULT_ENCRYPTION_KEY)

    # Can decrypt without raising an exception
    value = key.decrypt(path.encode("utf-8"))
    # We can only assert if the value is truthy because the value is encrypted
    # with a different salt each time.
    assert value
def test_basic_encrypted_get_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        encryption_bytestring_key=DEFAULT_ENCRYPTION_KEY)
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)
    key = Fernet(DEFAULT_ENCRYPTION_KEY)

    # Can decrypt without raising an exception
    value = key.decrypt(path.encode("utf-8"))
    # We can only assert if the value is truthy because the value is encrypted
    # with a different salt each time.
    assert value
Beispiel #8
0
def test_in_config_open_tracking_url_to_json():
    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)

    tracking_result = get_open_tracking_result(
        path, webhook_url=DEFAULT_WEBHOOK_URL).to_json_dict()
    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data is None
    assert tracking_result.metadata == DEFAULT_METADATA
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
def test_in_config_open_tracking_full_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        metadata=DEFAULT_METADATA)

    tracking_result = get_open_tracking_result(
        url, webhook_url=DEFAULT_WEBHOOK_URL,
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data is None
    assert tracking_result.metadata == DEFAULT_METADATA
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
def test_in_config_open_tracking_url_to_json():
    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)

    tracking_result = get_open_tracking_result(
        path, webhook_url=DEFAULT_WEBHOOK_URL).to_json_dict()
    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data is None
    assert tracking_result.metadata == DEFAULT_METADATA
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
    def email_encoding(self, template_id, campaign_id, segment_id):
        try:
            click_tracking_url = pytracking.get_open_tracking_url(
                {
                    "template_id": template_id,
                    "segment_id": segment_id,
                    "campaign_id": campaign_id
                },
                base_open_tracking_url=EMAIL_OPEN_URL,
                include_webhook_url=False,
                encryption_bytestring_key=self.key)

            return click_tracking_url
        except Exception as e:
            logging.warning(
                '[EmailTracking] :: email_encoding() :: Got exception: ' % e)
Beispiel #12
0
def test_in_config_open_tracking_full_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        metadata=DEFAULT_METADATA)

    tracking_result = get_open_tracking_result(
        url,
        webhook_url=DEFAULT_WEBHOOK_URL,
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data is None
    assert tracking_result.metadata == DEFAULT_METADATA
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
Beispiel #13
0
def test_send_webhook_open():
    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)

    tracking_result = get_open_tracking_result(path, webhook_url=DEFAULT_WEBHOOK_URL)

    payload = {
        "is_open_tracking": True,
        "is_click_tracking": False,
        "metadata": DEFAULT_METADATA,
        "request_data": None,
        "timestamp": tracking_result.timestamp,
    }

    with patch("pytracking.webhook.requests.post") as mocked_post:
        pytracking.webhook.send_webhook(tracking_result)

        mocked_post.assert_called_once_with(DEFAULT_WEBHOOK_URL, json=payload, timeout=DEFAULT_TIMEOUT_SECONDS)
Beispiel #14
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
Beispiel #15
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 test_embedded_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        webhook_url=DEFAULT_WEBHOOK_URL,
        include_webhook_url=True,
        default_metadata=DEFAULT_DEFAULT_METADATA,
        include_default_metadata=True,
        metadata=DEFAULT_METADATA)
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    tracking_result = get_open_tracking_result(
        path, request_data=DEFAULT_REQUEST_DATA,
        include_default_metadata=True,
        include_webhook_url=True)

    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data == DEFAULT_REQUEST_DATA
    assert tracking_result.metadata == EXPECTED_METADATA
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
Beispiel #17
0
def test_embedded_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        webhook_url=DEFAULT_WEBHOOK_URL,
        include_webhook_url=True,
        default_metadata=DEFAULT_DEFAULT_METADATA,
        include_default_metadata=True,
        metadata=DEFAULT_METADATA)
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    tracking_result = get_open_tracking_result(
        path,
        request_data=DEFAULT_REQUEST_DATA,
        include_default_metadata=True,
        include_webhook_url=True)

    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data == DEFAULT_REQUEST_DATA
    assert tracking_result.metadata == EXPECTED_METADATA
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
Beispiel #18
0
def test_minimal_encrypted_get_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        metadata=DEFAULT_METADATA,
        encryption_bytestring_key=DEFAULT_ENCRYPTION_KEY)
    path = get_open_tracking_url_path(
        url, base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)

    tracking_result = get_open_tracking_result(
        path,
        request_data=DEFAULT_REQUEST_DATA,
        default_metadata=DEFAULT_DEFAULT_METADATA,
        webhook_url=DEFAULT_WEBHOOK_URL,
        encryption_bytestring_key=DEFAULT_ENCRYPTION_KEY)

    expected_metadata = copy.copy(DEFAULT_DEFAULT_METADATA)
    expected_metadata.update(DEFAULT_METADATA)

    assert tracking_result.tracked_url is None
    assert tracking_result.webhook_url == DEFAULT_WEBHOOK_URL
    assert tracking_result.request_data == DEFAULT_REQUEST_DATA
    assert tracking_result.metadata == expected_metadata
    assert tracking_result.is_open_tracking
    assert not tracking_result.is_click_tracking
msg['Subject'] = "grande"
body = "bla bla bla"
msg.attach(MIMEText(body, 'plain'))

server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('*****@*****.**', 'xxxxxx')
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)

print('DONE')

# Pytracking Implementation
open_tracking_url = pytracking.get_open_tracking_url(
    {"customer_id": 1},
    base_open_tracking_url="https://trackingdomain.com/path/",
    webhook_url="http://requestb.in/123",
    include_webhook_url=True)

print("open_tracking_url : ", open_tracking_url)

tracking_result = pytracking.get_open_tracking_result(
    open_tracking_url,
    base_open_tracking_url="https://trackingdomain.com/path/")
print("tracking_result : ", tracking_result)

from pytracking.webhook import send_webhook
send_webhook(tracking_result)
Beispiel #20
0
def test_basic_get_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)
    assert url == "https://a.b.com/tracking/open/e30="
Beispiel #21
0
        emailCont.append(line)
    else:
        break
htmlBody = ""
for line in emailCont:
    htmlBody = htmlBody + "<p>" + line + "</p> "
htmlBody = htmlBody + webhook

root = etree.HTML(htmlBody)
htmlText = etree.tostring(root)
pytrackHtml = adapt_html(htmlText,
                         extra_metadata={"customer_id": 1},
                         click_tracking=True,
                         open_tracking=True)
emailBod = MIMEText(pytrackHtml, 'html')
open_tracking_url = pytracking.get_open_tracking_url(
    {"customer_id": 1}, configuration=configuration)
tracking_result = pytracking.get_open_tracking_result(
    open_tracking_url,
    base_open_tracking_url="http://mehltrej.pythonanywhere.com/")
msg.attach(emailBod)

#Send email

try:
    print("Attempting to connect")
    smtpObj = smtplib.SMTP(emailHost, emailPort)
    print("Successful connection")
    print("Attemping to connect to email")
    try:
        smtpObj.ehlo()
        smtpObj.starttls()
Beispiel #22
0
def test_basic_get_open_tracking_url_append_slash():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL,
        append_slash=True)
    assert url == "https://a.b.com/tracking/open/e30=/"
def test_basic_get_open_tracking_url():
    url = get_open_tracking_url(
        base_open_tracking_url=DEFAULT_BASE_OPEN_TRACKING_URL)
    assert url == "https://a.b.com/tracking/open/e30="