def test_not_ajax_request(self): req = RequestFactory().get('/', {'source': 'malibu'}) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 400) assert 'cache-control' not in resp data = json.loads(resp.content) self.assertEqual(data['error'], 'Resource only available via XHR')
def test_campaign_data_too_long(self): """If the code is too long then the utm_campaign value should be truncated""" params = { 'utm_source': 'brandt', 'utm_medium': 'aether', 'utm_content': 'A144_A000_0000000', 'utm_campaign': 'The%7cDude%7cabides%7cI%7cdont%7cknow%7cabout%7cyou%7c' 'but%7cI%7ctake%7ccomfort%7cin%7cthat' * 2, } final_params = { 'source': 'brandt', 'medium': 'aether', 'campaign': 'The|Dude|abides|I|dont|know|about|you|but|I|take|comfort|in|' 'thatThe|Dude|abides|I|dont|know|about_', 'content': 'A144_A000_0000000', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? code = querystringsafe_base64.decode(data['attribution_code']) assert len(code) <= 200 attrs = parse_qs(code) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '5f4f928ad022b15ce10d6dc962e21e12bbfba924d73a2605f3085760d3f93923')
def test_no_valid_param_names(self): req = self._get_request({'dude': 'abides'}) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 400) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) self.assertEqual(data['error'], 'no params')
def test_handles_referrer_utf8(self): """Should ignore non-ascii domain names. We were getting exceptions when the view was trying to base64 encode non-ascii domain names in the referrer. The whitelist for bouncer doesn't include any such domains anyway, so we should just ignore them. """ params = {'referrer': 'http://youtubê.com/sorry/'} final_params = { 'source': 'www.mozilla.org', 'medium': '(none)', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '1cdbee664f4e9ea32f14510995b41729a80eddc94cf26dc3c74894c6264c723c')
def test_no_valid_param_data(self): params = {'utm_source': 'br@ndt', 'utm_medium': 'ae<t>her'} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 400) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) self.assertEqual(data['error'], 'no params')
def test_other_data_too_long_not_campaign(self): """If the code is too long but not utm_campaign return error""" params = { 'utm_source': 'brandt', 'utm_campaign': 'dude', 'utm_content': 'A144_A000_0000000', 'utm_medium': 'The%7cDude%7cabides%7cI%7cdont%7cknow%7cabout%7cyou%7c' 'but%7cI%7ctake%7ccomfort%7cin%7cthat' * 2, } final_params = {'error': 'Invalid code'} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 400) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) self.assertDictEqual(data, final_params)
def test_no_valid_param_names(self): final_params = { 'source': 'www.mozilla.org', 'medium': '(none)', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request({'dude': 'abides'}) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '1cdbee664f4e9ea32f14510995b41729a80eddc94cf26dc3c74894c6264c723c')
def test_no_valid_param_names(self): final_params = { 'source': 'www.mozilla.org', 'medium': '(none)', 'campaign': '(not set)', 'content': '(not set)', 'timestamp': '12345', } req = self._get_request({'dude': 'abides'}) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '153c1e8b7d4a582fa245d57d9c28ca9d6bcb65957e41924f826f1e7a5a2f8de9')
def test_handles_referrer_no_source(self): params = {'referrer': 'https://example.com:5000/searchin', 'utm_medium': 'aether'} final_params = { 'source': 'example.com:5000', 'medium': 'referral', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '70e177b822f24fa9f8bc8e1caa382204632b3b2548db19bb32b97042c0ef0d47')
def test_some_valid_param_data(self): params = {'utm_source': 'brandt', 'utm_content': 'ae<t>her'} final_params = { 'source': 'brandt', 'medium': '(direct)', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '37946edae923b50f31f9dc10013dc0d23bed7dc6272611e12af46ff7a8d9d7dc')
def test_returns_valid_data(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} final_params = { 'source': 'brandt', 'medium': 'aether', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], 'abcbb028f97d08b7f85d194e6d51b8a2d96823208fdd167ff5977786b562af66')
def test_returns_valid_data(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} final_params = { 'source': 'brandt', 'medium': 'aether', 'campaign': '(not set)', 'content': '(not set)', 'timestamp': '12345', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=31536000' data = json.loads(resp.content) # will it blend? attrs = parse_qs(unquote_plus(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '59c7743ece9b60b4fd1e9816c85deb22b3550d86ef3b0cf1592e835f58ff2d96')
def test_handles_referrer_no_source(self): params = {'referrer': 'https://example.com:5000/searchin', 'utm_medium': 'aether'} final_params = { 'source': 'example.com:5000', 'medium': 'referral', 'campaign': '(not set)', 'content': '(not set)', 'timestamp': '12345', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '6b3dbb178e9abc22db66530df426b17db8590e8251fc153ba443e81ca60e355e')
def test_returns_valid_data(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} final_params = { 'source': 'brandt', 'medium': 'aether', 'campaign': '(not set)', 'content': '(not set)', 'timestamp': '12345', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], 'ab55c9b24e230f08d3ad50bf9a3a836ef4405cfb6919cb1df8efe208be38e16d')
def test_handles_referrer(self): params = {'utm_source': 'brandt', 'referrer': 'https://duckduckgo.com/privacy'} final_params = { 'source': 'brandt', 'medium': '(direct)', 'campaign': '(not set)', 'content': '(not set)', 'timestamp': '12345', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=31536000' data = json.loads(resp.content) # will it blend? attrs = parse_qs(unquote_plus(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], 'f9335b128511aed0109ecf21bb364d7637feca0b1ffcebbf7490e4966f71eca0')
def test_some_valid_param_data(self): params = {'utm_source': 'brandt', 'utm_content': 'ae<t>her'} final_params = { 'source': 'brandt', 'medium': '(direct)', 'campaign': '(not set)', 'content': '(not set)', 'timestamp': '12345', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs(querystringsafe_base64.decode(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], 'bd6c54115eb1f331b64bec83225a667fa0e16090d7d6abb33dab6305cd858a9d')
def test_handles_referrer_no_source(self): params = {'referrer': 'https://example.com:5000/searchin', 'utm_medium': 'aether'} final_params = { 'source': 'example.com:5000', 'medium': 'referral', 'campaign': '(not set)', 'content': '(not set)', 'timestamp': '12345', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=31536000' data = json.loads(resp.content) # will it blend? attrs = parse_qs(unquote_plus(data['attribution_code'])) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual(data['attribution_sig'], '18e26666e63a0742926cf9e9e62154085cc12c5058831b2d3196c298d87c7e52')
def test_no_valid_param_data(self): params = {'utm_source': 'br@ndt', 'utm_medium': 'ae<t>her'} final_params = { 'source': 'www.mozilla.org', 'medium': '(none)', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs( querystringsafe_base64.decode(data['attribution_code'].encode()).decode() ) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual( data['attribution_sig'], '1cdbee664f4e9ea32f14510995b41729a80eddc94cf26dc3c74894c6264c723c', )
def test_returns_valid_data(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} final_params = { 'source': 'brandt', 'medium': 'aether', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs( querystringsafe_base64.decode(data['attribution_code'].encode()).decode() ) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual( data['attribution_sig'], 'abcbb028f97d08b7f85d194e6d51b8a2d96823208fdd167ff5977786b562af66', )
def test_some_valid_param_data(self): params = {'utm_source': 'brandt', 'utm_content': 'ae<t>her'} final_params = { 'source': 'brandt', 'medium': '(direct)', 'campaign': '(not set)', 'content': '(not set)', } req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 200) assert resp['cache-control'] == 'max-age=300' data = json.loads(resp.content) # will it blend? attrs = parse_qs( querystringsafe_base64.decode(data['attribution_code'].encode()).decode() ) # parse_qs returns a dict with lists for values attrs = {k: v[0] for k, v in attrs.items()} self.assertDictEqual(attrs, final_params) self.assertEqual( data['attribution_sig'], '37946edae923b50f31f9dc10013dc0d23bed7dc6272611e12af46ff7a8d9d7dc', )
def test_no_hmac_key_set(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 403) assert resp['cache-control'] == 'max-age=300'
def test_rate_limit_disabled(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 429) assert resp['cache-control'] == 'max-age=300'
def test_no_hmac_key_set(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 403) assert resp['cache-control'] == 'max-age=300'
def test_rate_limit_disabled(self): params = {'utm_source': 'brandt', 'utm_medium': 'aether'} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 429) assert resp['cache-control'] == 'max-age=300'
def test_rate_limit_disabled(self): params = {"utm_source": "brandt", "utm_medium": "aether"} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 429) assert resp["cache-control"] == "max-age=300"
def test_no_hmac_key_set(self): params = {"utm_source": "brandt", "utm_medium": "aether"} req = self._get_request(params) resp = views.stub_attribution_code(req) self.assertEqual(resp.status_code, 403) assert resp["cache-control"] == "max-age=300"