Commit 74c8bf40 by Peter Fogg

Add acceptance tests for affiliate cookie tracking.

ECOM-4329
parent 7b9e15f5
"""
Tests for affiliate tracking cookies.
"""
from unittest import TestCase
from selenium import webdriver
from acceptance_tests.config import (
BASIC_AUTH_USERNAME, BASIC_AUTH_PASSWORD, ECOMMERCE_URL_ROOT, MARKETING_SITE_URL_ROOT, LMS_URL_ROOT
)
def _with_basic_auth(url):
"""
If basic auth parameters have been provided, return the given URL
with auth added. Otherwise, just returns the URL unchanged.
"""
if BASIC_AUTH_USERNAME and BASIC_AUTH_PASSWORD:
return url.replace('://', '://{username}:{password}@'.format(
username=BASIC_AUTH_USERNAME,
password=BASIC_AUTH_PASSWORD
))
return url
class AffiliateCookieTestMixin(object):
"""
Test mixin for affiliate tracking cookies. Classes inheriting from
this should also inherit from TestCase and define a `url` property
which will be used to test cookie tracking.
"""
cookie_name = "affiliate_id"
cookie_value = "test_partner"
def setUp(self):
super().setUp()
self.browser = webdriver.Firefox()
def tearDown(self):
super().tearDown()
self.browser.quit()
def test_without_query(self):
"""Verify that no cookie is set without affiliate query parameters."""
self.browser.get(self.url)
self.assertIsNone(self.browser.get_cookie(self.cookie_name))
def test_with_query(self):
"""Verify that GTM drops a cookie when the correct query parameters are present."""
self.browser.get(
'{root}?utm_source={partner}&utm_medium=affiliate_partner'.format(
root=self.url, partner=self.cookie_value
)
)
cookie = self.browser.get_cookie(self.cookie_name)
self.assertIsNotNone(cookie)
self.assertEqual(cookie['value'], self.cookie_value)
def test_with_query_wrong_medium(self):
"""Verify that requests without utm_medium=affiliate_partner do not get a cookie."""
self.browser.get('{root}?utm_source={partner}&utm_medium=nope'.format(
root=self.url,
partner=self.cookie_value
))
self.assertIsNone(self.browser.get_cookie(self.cookie_name))
class MarketingSiteCookieTest(AffiliateCookieTestMixin, TestCase):
"""Cookie tests for the marketing site."""
url = MARKETING_SITE_URL_ROOT
class LmsCookieTest(AffiliateCookieTestMixin, TestCase):
"""Cookie tests for the LMS."""
url = _with_basic_auth(LMS_URL_ROOT + '/login')
class EcommerceCookieTest(AffiliateCookieTestMixin, TestCase):
"""Cookie tests for ecommerce."""
url = ECOMMERCE_URL_ROOT + '/basket/'
......@@ -11,3 +11,10 @@ if not API_ACCESS_TOKEN:
CATALOG_ID = int(os.environ.get('CATALOG_ID', 1))
COURSE_ID = os.environ.get('COURSE_ID', 'edX/DemoX')
COURSE_RUN_ID = os.environ.get('COURSE_RUN_ID', 'course-v1:edX+DemoX+Demo_Course')
MARKETING_SITE_URL_ROOT = os.environ.get('MARKETING_SITE_URL_ROOT', 'https://stage.edx.org')
LMS_URL_ROOT = os.environ.get('LMS_URL_ROOT', 'https://courses.stage.edx.org')
ECOMMERCE_URL_ROOT = os.environ.get('ECOMMERCE_URL_ROOT', 'https://ecommerce.stage.edx.org')
BASIC_AUTH_USERNAME = os.environ.get('BASIC_AUTH_USERNAME', '')
BASIC_AUTH_PASSWORD = os.environ.get('BASIC_AUTH_PASSWORD', '')
......@@ -11,4 +11,5 @@ mock==1.3.0
nose-ignore-docstring==0.2
pep8==1.6.2
responses==0.5.0
selenium==2.53.2
testfixtures==4.7.0
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment