| OLD | NEW |
| 1 # This file is part of the Adblock Plus web scripts, | 1 # This file is part of the Adblock Plus web scripts, |
| 2 # Copyright (C) 2006-present eyeo GmbH | 2 # Copyright (C) 2006-present eyeo GmbH |
| 3 # | 3 # |
| 4 # Adblock Plus is free software: you can redistribute it and/or modify | 4 # Adblock Plus is free software: you can redistribute it and/or modify |
| 5 # it under the terms of the GNU General Public License version 3 as | 5 # it under the terms of the GNU General Public License version 3 as |
| 6 # published by the Free Software Foundation. | 6 # published by the Free Software Foundation. |
| 7 # | 7 # |
| 8 # Adblock Plus is distributed in the hope that it will be useful, | 8 # Adblock Plus is distributed in the hope that it will be useful, |
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 class TestNotification(unittest.TestCase): | 23 class TestNotification(unittest.TestCase): |
| 24 def setUp(self): | 24 def setUp(self): |
| 25 self.load_notifications_patcher = mock.patch('sitescripts.notifications.
web.notification.load_notifications') | 25 self.load_notifications_patcher = mock.patch('sitescripts.notifications.
web.notification.load_notifications') |
| 26 self.load_notifications_mock = self.load_notifications_patcher.start() | 26 self.load_notifications_mock = self.load_notifications_patcher.start() |
| 27 | 27 |
| 28 def tearDown(self): | 28 def tearDown(self): |
| 29 self.load_notifications_patcher.stop() | 29 self.load_notifications_patcher.stop() |
| 30 | 30 |
| 31 def test_no_group(self): | 31 def test_no_group(self): |
| 32 self.load_notifications_mock.return_value = [ | 32 self.load_notifications_mock.return_value = [ |
| 33 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}} | 33 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 34 ] | 34 ] |
| 35 result = json.loads(notification.notification({}, lambda *args: None)) | 35 result = json.loads(notification.notification({}, lambda *args: None)) |
| 36 self.assertEqual(len(result['notifications']), 1) | 36 self.assertEqual(len(result['notifications']), 1) |
| 37 self.assertEqual(result['notifications'][0]['id'], '1') | 37 self.assertEqual(result['notifications'][0]['id'], '1') |
| 38 self.assertFalse('-' in result['version']) | 38 self.assertFalse('-' in result['version']) |
| 39 | 39 |
| 40 def test_not_in_group(self): | 40 def test_not_in_group(self): |
| 41 self.load_notifications_mock.return_value = [ | 41 self.load_notifications_mock.return_value = [ |
| 42 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 42 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 43 {'id': 'a', 'variants': [ | 43 {'id': 'a', 'variants': [ |
| 44 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 44 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 45 ]} | 45 ]}, |
| 46 ] | 46 ] |
| 47 result = json.loads(notification.notification({ | 47 result = json.loads(notification.notification({ |
| 48 'QUERY_STRING': 'lastVersion=197001010000-a/0' | 48 'QUERY_STRING': 'lastVersion=197001010000-a/0', |
| 49 }, lambda *args: None)) | 49 }, lambda *args: None)) |
| 50 self.assertEqual(len(result['notifications']), 1) | 50 self.assertEqual(len(result['notifications']), 1) |
| 51 self.assertEqual(result['notifications'][0]['id'], '1') | 51 self.assertEqual(result['notifications'][0]['id'], '1') |
| 52 self.assertRegexpMatches(result['version'], r'-a/0') | 52 self.assertRegexpMatches(result['version'], r'-a/0') |
| 53 | 53 |
| 54 def test_in_group(self): | 54 def test_in_group(self): |
| 55 self.load_notifications_mock.return_value = [ | 55 self.load_notifications_mock.return_value = [ |
| 56 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 56 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 57 {'id': 'a', 'variants': [ | 57 {'id': 'a', 'variants': [ |
| 58 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 58 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 59 ]} | 59 ]}, |
| 60 ] | 60 ] |
| 61 result = json.loads(notification.notification({ | 61 result = json.loads(notification.notification({ |
| 62 'QUERY_STRING': 'lastVersion=197001010000-a/1' | 62 'QUERY_STRING': 'lastVersion=197001010000-a/1', |
| 63 }, lambda *args: None)) | 63 }, lambda *args: None)) |
| 64 self.assertEqual(len(result['notifications']), 1) | 64 self.assertEqual(len(result['notifications']), 1) |
| 65 self.assertEqual(result['notifications'][0]['id'], 'a') | 65 self.assertEqual(result['notifications'][0]['id'], 'a') |
| 66 self.assertRegexpMatches(result['version'], r'-a/1') | 66 self.assertRegexpMatches(result['version'], r'-a/1') |
| 67 | 67 |
| 68 def test_not_in_one_of_many_groups(self): | 68 def test_not_in_one_of_many_groups(self): |
| 69 self.load_notifications_mock.return_value = [ | 69 self.load_notifications_mock.return_value = [ |
| 70 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 70 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 71 {'id': 'a', 'variants': [ | 71 {'id': 'a', 'variants': [ |
| 72 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 72 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 73 ]}, | 73 ]}, |
| 74 {'id': 'b', 'variants': [ | 74 {'id': 'b', 'variants': [ |
| 75 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 75 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 76 ]}, | 76 ]}, |
| 77 {'id': 'c', 'variants': [ | 77 {'id': 'c', 'variants': [ |
| 78 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 78 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 79 ]} | 79 ]}, |
| 80 ] | 80 ] |
| 81 result = json.loads(notification.notification({ | 81 result = json.loads(notification.notification({ |
| 82 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/0-c/0' | 82 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/0-c/0', |
| 83 }, lambda *args: None)) | 83 }, lambda *args: None)) |
| 84 self.assertEqual(len(result['notifications']), 1) | 84 self.assertEqual(len(result['notifications']), 1) |
| 85 self.assertEqual(result['notifications'][0]['id'], '1') | 85 self.assertEqual(result['notifications'][0]['id'], '1') |
| 86 self.assertRegexpMatches(result['version'], r'-a/0-b/0-c/0') | 86 self.assertRegexpMatches(result['version'], r'-a/0-b/0-c/0') |
| 87 | 87 |
| 88 def test_in_one_of_many_groups(self): | 88 def test_in_one_of_many_groups(self): |
| 89 self.load_notifications_mock.return_value = [ | 89 self.load_notifications_mock.return_value = [ |
| 90 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 90 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 91 {'id': 'a', 'variants': [ | 91 {'id': 'a', 'variants': [ |
| 92 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 92 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 93 ]}, | 93 ]}, |
| 94 {'id': 'b', 'variants': [ | 94 {'id': 'b', 'variants': [ |
| 95 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 95 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 96 ]}, | 96 ]}, |
| 97 {'id': 'c', 'variants': [ | 97 {'id': 'c', 'variants': [ |
| 98 {'title': {'en-US': ''}, 'message': {'en-US': ''}} | 98 {'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 99 ]} | 99 ]}, |
| 100 ] | 100 ] |
| 101 result = json.loads(notification.notification({ | 101 result = json.loads(notification.notification({ |
| 102 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1-c/0' | 102 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1-c/0', |
| 103 }, lambda *args: None)) | 103 }, lambda *args: None)) |
| 104 self.assertEqual(len(result['notifications']), 1) | 104 self.assertEqual(len(result['notifications']), 1) |
| 105 self.assertEqual(result['notifications'][0]['id'], 'b') | 105 self.assertEqual(result['notifications'][0]['id'], 'b') |
| 106 self.assertRegexpMatches(result['version'], r'-a/0-b/1-c/0') | 106 self.assertRegexpMatches(result['version'], r'-a/0-b/1-c/0') |
| 107 | 107 |
| 108 def test_not_put_in_group(self): | 108 def test_not_put_in_group(self): |
| 109 self.load_notifications_mock.return_value = [ | 109 self.load_notifications_mock.return_value = [ |
| 110 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 110 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 111 {'id': 'a', 'variants': [ | 111 {'id': 'a', 'variants': [ |
| 112 {'sample': 0, 'title': {'en-US': ''}, 'message': {'en-US': ''}} | 112 {'sample': 0, 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 113 ]} | 113 ]}, |
| 114 ] | 114 ] |
| 115 result = json.loads(notification.notification({ | 115 result = json.loads(notification.notification({ |
| 116 'QUERY_STRING': 'lastVersion=197001010000' | 116 'QUERY_STRING': 'lastVersion=197001010000', |
| 117 }, lambda *args: None)) | 117 }, lambda *args: None)) |
| 118 self.assertEqual(len(result['notifications']), 1) | 118 self.assertEqual(len(result['notifications']), 1) |
| 119 self.assertEqual(result['notifications'][0]['id'], '1') | 119 self.assertEqual(result['notifications'][0]['id'], '1') |
| 120 self.assertRegexpMatches(result['version'], r'-a/0') | 120 self.assertRegexpMatches(result['version'], r'-a/0') |
| 121 | 121 |
| 122 def test_put_in_group(self): | 122 def test_put_in_group(self): |
| 123 self.load_notifications_mock.return_value = [ | 123 self.load_notifications_mock.return_value = [ |
| 124 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 124 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 125 {'id': 'a', 'variants': [ | 125 {'id': 'a', 'variants': [ |
| 126 {'sample': 1, 'title': {'en-US': ''}, 'message': {'en-US': ''}} | 126 {'sample': 1, 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 127 ]} | 127 ]}, |
| 128 ] | 128 ] |
| 129 result = json.loads(notification.notification({ | 129 result = json.loads(notification.notification({ |
| 130 'QUERY_STRING': 'lastVersion=197001010000' | 130 'QUERY_STRING': 'lastVersion=197001010000', |
| 131 }, lambda *args: None)) | 131 }, lambda *args: None)) |
| 132 self.assertEqual(len(result['notifications']), 1) | 132 self.assertEqual(len(result['notifications']), 1) |
| 133 self.assertEqual(result['notifications'][0]['id'], 'a') | 133 self.assertEqual(result['notifications'][0]['id'], 'a') |
| 134 self.assertRegexpMatches(result['version'], r'-a/1') | 134 self.assertRegexpMatches(result['version'], r'-a/1') |
| 135 | 135 |
| 136 def test_notification_variant_merged(self): | 136 def test_notification_variant_merged(self): |
| 137 self.load_notifications_mock.return_value = [ | 137 self.load_notifications_mock.return_value = [ |
| 138 { | 138 { |
| 139 'id': 'a', | 139 'id': 'a', |
| 140 'title': {'en-US': 'default'}, | 140 'title': {'en-US': 'default'}, |
| 141 'message': {'en-US': 'default'}, | 141 'message': {'en-US': 'default'}, |
| 142 'variants': [ | 142 'variants': [ |
| 143 {'sample': 1, 'message': {'en-US': 'variant'}} | 143 {'sample': 1, 'message': {'en-US': 'variant'}}, |
| 144 ] | 144 ], |
| 145 } | 145 }, |
| 146 ] | 146 ] |
| 147 result = json.loads(notification.notification({}, lambda *args: None)) | 147 result = json.loads(notification.notification({}, lambda *args: None)) |
| 148 self.assertEqual(len(result['notifications']), 1) | 148 self.assertEqual(len(result['notifications']), 1) |
| 149 self.assertEqual(result['notifications'][0]['id'], 'a') | 149 self.assertEqual(result['notifications'][0]['id'], 'a') |
| 150 self.assertEqual(result['notifications'][0]['title']['en-US'], 'default'
) | 150 self.assertEqual(result['notifications'][0]['title']['en-US'], 'default'
) |
| 151 self.assertEqual(result['notifications'][0]['message']['en-US'], 'varian
t') | 151 self.assertEqual(result['notifications'][0]['message']['en-US'], 'varian
t') |
| 152 self.assertFalse('variants' in result['notifications'][0]) | 152 self.assertFalse('variants' in result['notifications'][0]) |
| 153 self.assertFalse('sample' in result['notifications'][0]) | 153 self.assertFalse('sample' in result['notifications'][0]) |
| 154 | 154 |
| 155 def test_no_variant_no_notifications(self): | 155 def test_no_variant_no_notifications(self): |
| 156 self.load_notifications_mock.return_value = [ | 156 self.load_notifications_mock.return_value = [ |
| 157 {'id': 'a', 'variants': [{'sample': 0}]} | 157 {'id': 'a', 'variants': [{'sample': 0}]}, |
| 158 ] | 158 ] |
| 159 result = json.loads(notification.notification({}, lambda *args: None)) | 159 result = json.loads(notification.notification({}, lambda *args: None)) |
| 160 self.assertEqual(len(result['notifications']), 0) | 160 self.assertEqual(len(result['notifications']), 0) |
| 161 | 161 |
| 162 @mock.patch('random.random') | 162 @mock.patch('random.random') |
| 163 def test_probability_distribution_single_group(self, random_call): | 163 def test_probability_distribution_single_group(self, random_call): |
| 164 self.load_notifications_mock.return_value = [ | 164 self.load_notifications_mock.return_value = [ |
| 165 { | 165 { |
| 166 'id': 'a', | 166 'id': 'a', |
| 167 'variants': [ | 167 'variants': [ |
| 168 {'sample': 0.5, 'title': {'en-US': '1'}, 'message': {'en-US'
: ''}}, | 168 {'sample': 0.5, 'title': {'en-US': '1'}, 'message': {'en-US'
: ''}}, |
| 169 {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US
': ''}}, | 169 {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US
': ''}}, |
| 170 {'sample': 0.25, 'title': {'en-US': '3'}, 'message': {'en-US
': ''}} | 170 {'sample': 0.25, 'title': {'en-US': '3'}, 'message': {'en-US
': ''}}, |
| 171 ] | 171 ], |
| 172 } | 172 }, |
| 173 ] | 173 ] |
| 174 random_call.return_value = 0 | 174 random_call.return_value = 0 |
| 175 result = json.loads(notification.notification({}, lambda *args: None)) | 175 result = json.loads(notification.notification({}, lambda *args: None)) |
| 176 self.assertEqual(len(result['notifications']), 1) | 176 self.assertEqual(len(result['notifications']), 1) |
| 177 self.assertEqual(result['notifications'][0]['title']['en-US'], '1') | 177 self.assertEqual(result['notifications'][0]['title']['en-US'], '1') |
| 178 self.assertRegexpMatches(result['version'], r'-a/1') | 178 self.assertRegexpMatches(result['version'], r'-a/1') |
| 179 random_call.return_value = 0.5 | 179 random_call.return_value = 0.5 |
| 180 result = json.loads(notification.notification({}, lambda *args: None)) | 180 result = json.loads(notification.notification({}, lambda *args: None)) |
| 181 self.assertEqual(len(result['notifications']), 1) | 181 self.assertEqual(len(result['notifications']), 1) |
| 182 self.assertEqual(result['notifications'][0]['title']['en-US'], '1') | 182 self.assertEqual(result['notifications'][0]['title']['en-US'], '1') |
| (...skipping 19 matching lines...) Expand all Loading... |
| 202 self.assertEqual(result['notifications'][0]['title']['en-US'], '3') | 202 self.assertEqual(result['notifications'][0]['title']['en-US'], '3') |
| 203 self.assertRegexpMatches(result['version'], r'-a/3') | 203 self.assertRegexpMatches(result['version'], r'-a/3') |
| 204 | 204 |
| 205 @mock.patch('random.random') | 205 @mock.patch('random.random') |
| 206 def test_probability_distribution_multiple_groups(self, random_call): | 206 def test_probability_distribution_multiple_groups(self, random_call): |
| 207 self.load_notifications_mock.return_value = [ | 207 self.load_notifications_mock.return_value = [ |
| 208 { | 208 { |
| 209 'id': 'a', | 209 'id': 'a', |
| 210 'variants': [ | 210 'variants': [ |
| 211 {'sample': 0.25, 'title': {'en-US': '1'}, 'message': {'en-US
': ''}}, | 211 {'sample': 0.25, 'title': {'en-US': '1'}, 'message': {'en-US
': ''}}, |
| 212 {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US
': ''}} | 212 {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US
': ''}}, |
| 213 ] | 213 ], |
| 214 }, | 214 }, |
| 215 { | 215 { |
| 216 'id': 'b', | 216 'id': 'b', |
| 217 'variants': [ | 217 'variants': [ |
| 218 {'sample': 0.25, 'title': {'en-US': '1'}, 'message': {'en-US
': ''}}, | 218 {'sample': 0.25, 'title': {'en-US': '1'}, 'message': {'en-US
': ''}}, |
| 219 {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US
': ''}} | 219 {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US
': ''}}, |
| 220 ] | 220 ], |
| 221 } | 221 }, |
| 222 ] | 222 ] |
| 223 random_call.return_value = 0 | 223 random_call.return_value = 0 |
| 224 result = json.loads(notification.notification({}, lambda *args: None)) | 224 result = json.loads(notification.notification({}, lambda *args: None)) |
| 225 self.assertEqual(len(result['notifications']), 1) | 225 self.assertEqual(len(result['notifications']), 1) |
| 226 self.assertEqual(result['notifications'][0]['id'], 'a') | 226 self.assertEqual(result['notifications'][0]['id'], 'a') |
| 227 self.assertEqual(result['notifications'][0]['title']['en-US'], '1') | 227 self.assertEqual(result['notifications'][0]['title']['en-US'], '1') |
| 228 self.assertRegexpMatches(result['version'], r'-a/1-b/0') | 228 self.assertRegexpMatches(result['version'], r'-a/1-b/0') |
| 229 random_call.return_value = 0.251 | 229 random_call.return_value = 0.251 |
| 230 result = json.loads(notification.notification({}, lambda *args: None)) | 230 result = json.loads(notification.notification({}, lambda *args: None)) |
| 231 self.assertEqual(len(result['notifications']), 1) | 231 self.assertEqual(len(result['notifications']), 1) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 251 lambda *args: None) | 251 lambda *args: None) |
| 252 notification.notification({'QUERY_STRING': 'lastVersion=-'}, | 252 notification.notification({'QUERY_STRING': 'lastVersion=-'}, |
| 253 lambda *args: None) | 253 lambda *args: None) |
| 254 notification.notification({'QUERY_STRING': 'lastVersion=-/'}, | 254 notification.notification({'QUERY_STRING': 'lastVersion=-/'}, |
| 255 lambda *args: None) | 255 lambda *args: None) |
| 256 notification.notification({'QUERY_STRING': 'lastVersion=-//'}, | 256 notification.notification({'QUERY_STRING': 'lastVersion=-//'}, |
| 257 lambda *args: None) | 257 lambda *args: None) |
| 258 | 258 |
| 259 def test_version_header_present(self): | 259 def test_version_header_present(self): |
| 260 self.load_notifications_mock.return_value = [ | 260 self.load_notifications_mock.return_value = [ |
| 261 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}} | 261 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 262 ] | 262 ] |
| 263 response_header_map = {} | 263 response_header_map = {} |
| 264 | 264 |
| 265 def start_response(status, response_headers): | 265 def start_response(status, response_headers): |
| 266 for name, value in response_headers: | 266 for name, value in response_headers: |
| 267 response_header_map[name] = value | 267 response_header_map[name] = value |
| 268 result = json.loads(notification.notification({}, start_response)) | 268 result = json.loads(notification.notification({}, start_response)) |
| 269 self.assertEqual(result['version'], | 269 self.assertEqual(result['version'], |
| 270 response_header_map['ABP-Notification-Version']) | 270 response_header_map['ABP-Notification-Version']) |
| 271 | 271 |
| 272 def test_default_group_notification_returned_if_valid(self): | 272 def test_default_group_notification_returned_if_valid(self): |
| 273 self.load_notifications_mock.return_value = [ | 273 self.load_notifications_mock.return_value = [ |
| 274 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 274 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 275 { | 275 { |
| 276 'id': 'a', | 276 'id': 'a', |
| 277 'title': {'en-US': '0'}, | 277 'title': {'en-US': '0'}, |
| 278 'message': {'en-US': '0'}, | 278 'message': {'en-US': '0'}, |
| 279 'variants': [ | 279 'variants': [ |
| 280 {'title': {'en-US': '1'}, 'message': {'en-US': '1'}} | 280 {'title': {'en-US': '1'}, 'message': {'en-US': '1'}}, |
| 281 ] | 281 ], |
| 282 } | 282 }, |
| 283 ] | 283 ] |
| 284 result = json.loads(notification.notification({ | 284 result = json.loads(notification.notification({ |
| 285 'QUERY_STRING': 'lastVersion=197001010000-a/0' | 285 'QUERY_STRING': 'lastVersion=197001010000-a/0', |
| 286 }, lambda *args: None)) | 286 }, lambda *args: None)) |
| 287 self.assertEqual(len(result['notifications']), 2) | 287 self.assertEqual(len(result['notifications']), 2) |
| 288 self.assertEqual(result['notifications'][0]['id'], '1') | 288 self.assertEqual(result['notifications'][0]['id'], '1') |
| 289 self.assertEqual(result['notifications'][1]['id'], 'a') | 289 self.assertEqual(result['notifications'][1]['id'], 'a') |
| 290 self.assertEqual(result['notifications'][1]['title']['en-US'], '0') | 290 self.assertEqual(result['notifications'][1]['title']['en-US'], '0') |
| 291 self.assertNotIn('variants', result['notifications'][1]) | 291 self.assertNotIn('variants', result['notifications'][1]) |
| 292 self.assertRegexpMatches(result['version'], r'-a/0') | 292 self.assertRegexpMatches(result['version'], r'-a/0') |
| 293 | 293 |
| 294 def test_default_group_notification_not_returned_if_invalid(self): | 294 def test_default_group_notification_not_returned_if_invalid(self): |
| 295 self.load_notifications_mock.return_value = [ | 295 self.load_notifications_mock.return_value = [ |
| 296 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 296 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 297 { | 297 { |
| 298 'id': 'a', | 298 'id': 'a', |
| 299 'title': {'en-US': '0'}, | 299 'title': {'en-US': '0'}, |
| 300 'variants': [ | 300 'variants': [ |
| 301 {'title': {'en-US': '1'}, 'message': {'en-US': '1'}} | 301 {'title': {'en-US': '1'}, 'message': {'en-US': '1'}}, |
| 302 ] | 302 ], |
| 303 } | 303 }, |
| 304 ] | 304 ] |
| 305 result = json.loads(notification.notification({ | 305 result = json.loads(notification.notification({ |
| 306 'QUERY_STRING': 'lastVersion=197001010000-a/0' | 306 'QUERY_STRING': 'lastVersion=197001010000-a/0', |
| 307 }, lambda *args: None)) | 307 }, lambda *args: None)) |
| 308 self.assertEqual(len(result['notifications']), 1) | 308 self.assertEqual(len(result['notifications']), 1) |
| 309 self.assertEqual(result['notifications'][0]['id'], '1') | 309 self.assertEqual(result['notifications'][0]['id'], '1') |
| 310 self.assertRegexpMatches(result['version'], r'-a/0') | 310 self.assertRegexpMatches(result['version'], r'-a/0') |
| 311 | 311 |
| 312 def test_invalid_notification_not_returned(self): | 312 def test_invalid_notification_not_returned(self): |
| 313 self.load_notifications_mock.return_value = [ | 313 self.load_notifications_mock.return_value = [ |
| 314 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, | 314 {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 315 {'id': '2', 'title': {'en-US': ''}, 'message': {}}, | 315 {'id': '2', 'title': {'en-US': ''}, 'message': {}}, |
| 316 {'id': '3', 'title': {}, 'message': {'en-US': ''}}, | 316 {'id': '3', 'title': {}, 'message': {'en-US': ''}}, |
| 317 {'id': '4', 'title': {}}, | 317 {'id': '4', 'title': {}}, |
| 318 {'id': '5', 'message': {}}, | 318 {'id': '5', 'message': {}}, |
| 319 {'id': '6'} | 319 {'id': '6'}, |
| 320 ] | 320 ] |
| 321 result = json.loads(notification.notification({}, lambda *args: None)) | 321 result = json.loads(notification.notification({}, lambda *args: None)) |
| 322 self.assertEqual(len(result['notifications']), 1) | 322 self.assertEqual(len(result['notifications']), 1) |
| 323 self.assertEqual(result['notifications'][0]['id'], '1') | 323 self.assertEqual(result['notifications'][0]['id'], '1') |
| 324 | 324 |
| 325 def test_stays_in_group_when_notification_present(self): | 325 def test_stays_in_group_when_notification_present(self): |
| 326 self.load_notifications_mock.return_value = [ | 326 self.load_notifications_mock.return_value = [ |
| 327 {'id': 'a'} | 327 {'id': 'a'}, |
| 328 ] | 328 ] |
| 329 result = json.loads(notification.notification({ | 329 result = json.loads(notification.notification({ |
| 330 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1' | 330 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1', |
| 331 }, lambda *args: None)) | 331 }, lambda *args: None)) |
| 332 self.assertEqual(len(result['notifications']), 0) | 332 self.assertEqual(len(result['notifications']), 0) |
| 333 self.assertRegexpMatches(result['version'], r'-a/0') | 333 self.assertRegexpMatches(result['version'], r'-a/0') |
| 334 | 334 |
| 335 def test_leaves_group_when_notification_absent(self): | 335 def test_leaves_group_when_notification_absent(self): |
| 336 self.load_notifications_mock.return_value = [] | 336 self.load_notifications_mock.return_value = [] |
| 337 result = json.loads(notification.notification({ | 337 result = json.loads(notification.notification({ |
| 338 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1' | 338 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1', |
| 339 }, lambda *args: None)) | 339 }, lambda *args: None)) |
| 340 self.assertEqual(len(result['notifications']), 0) | 340 self.assertEqual(len(result['notifications']), 0) |
| 341 self.assertRegexpMatches(result['version'], r'[^-]*') | 341 self.assertRegexpMatches(result['version'], r'[^-]*') |
| 342 | 342 |
| 343 def test_stays_in_group_when_notification_inactive(self): | 343 def test_stays_in_group_when_notification_inactive(self): |
| 344 self.load_notifications_mock.return_value = [ | 344 self.load_notifications_mock.return_value = [ |
| 345 {'id': 'a', 'inactive': True} | 345 {'id': 'a', 'inactive': True}, |
| 346 ] | 346 ] |
| 347 result = json.loads(notification.notification({ | 347 result = json.loads(notification.notification({ |
| 348 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1' | 348 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1', |
| 349 }, lambda *args: None)) | 349 }, lambda *args: None)) |
| 350 self.assertEqual(len(result['notifications']), 0) | 350 self.assertEqual(len(result['notifications']), 0) |
| 351 self.assertRegexpMatches(result['version'], r'-a/0') | 351 self.assertRegexpMatches(result['version'], r'-a/0') |
| 352 | 352 |
| 353 def test_stays_in_group_when_notification_inactive_assign_new_group(self): | 353 def test_stays_in_group_when_notification_inactive_assign_new_group(self): |
| 354 # See: https://issues.adblockplus.org/ticket/5827 | 354 # See: https://issues.adblockplus.org/ticket/5827 |
| 355 self.load_notifications_mock.return_value = [ | 355 self.load_notifications_mock.return_value = [ |
| 356 {'id': '1', 'inactive': True}, | 356 {'id': '1', 'inactive': True}, |
| 357 {'id': '2', 'variants': [ | 357 {'id': '2', 'variants': [ |
| 358 {'sample': 1, 'title': {'en-US': '2.1'}, 'message': {'en-US': '2
.1'}}, | 358 {'sample': 1, 'title': {'en-US': '2.1'}, 'message': {'en-US': '2
.1'}}, |
| 359 ]}, | 359 ]}, |
| 360 ] | 360 ] |
| 361 result = json.loads(notification.notification({ | 361 result = json.loads(notification.notification({ |
| 362 'QUERY_STRING': 'lastVersion=197001010000-1/0' | 362 'QUERY_STRING': 'lastVersion=197001010000-1/0', |
| 363 }, lambda *args: None)) | 363 }, lambda *args: None)) |
| 364 self.assertEqual(len(result['notifications']), 1) | 364 self.assertEqual(len(result['notifications']), 1) |
| 365 self.assertRegexpMatches(result['version'], r'-1/0-2/1') | 365 self.assertRegexpMatches(result['version'], r'-1/0-2/1') |
| 366 | 366 |
| 367 def test_inactive_notifications_not_returned(self): | 367 def test_inactive_notifications_not_returned(self): |
| 368 self.load_notifications_mock.return_value = [ | 368 self.load_notifications_mock.return_value = [ |
| 369 {'id': 'a', 'title': {'en-US': ''}, 'message': {'en-US': ''}, 'inact
ive': True}, | 369 {'id': 'a', 'title': {'en-US': ''}, 'message': {'en-US': ''}, 'inact
ive': True}, |
| 370 {'id': 'b', 'title': {'en-US': ''}, 'message': {'en-US': ''}, 'inact
ive': False}, | 370 {'id': 'b', 'title': {'en-US': ''}, 'message': {'en-US': ''}, 'inact
ive': False}, |
| 371 {'id': 'c', 'title': {'en-US': ''}, 'message': {'en-US': ''}} | 371 {'id': 'c', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| 372 ] | 372 ] |
| 373 result = json.loads(notification.notification({}, lambda *args: None)) | 373 result = json.loads(notification.notification({}, lambda *args: None)) |
| 374 self.assertEqual(len(result['notifications']), 2) | 374 self.assertEqual(len(result['notifications']), 2) |
| 375 self.assertEqual(result['notifications'][0]['id'], 'b') | 375 self.assertEqual(result['notifications'][0]['id'], 'b') |
| 376 self.assertEqual(result['notifications'][1]['id'], 'c') | 376 self.assertEqual(result['notifications'][1]['id'], 'c') |
| 377 | 377 |
| 378 def test_inactive_notification_variant_not_returned(self): | 378 def test_inactive_notification_variant_not_returned(self): |
| 379 self.load_notifications_mock.return_value = [ | 379 self.load_notifications_mock.return_value = [ |
| 380 {'id': 'a', 'inactive': True} | 380 {'id': 'a', 'inactive': True}, |
| 381 ] | 381 ] |
| 382 result = json.loads(notification.notification({ | 382 result = json.loads(notification.notification({ |
| 383 'QUERY_STRING': 'lastVersion=197001010000-a/1' | 383 'QUERY_STRING': 'lastVersion=197001010000-a/1', |
| 384 }, lambda *args: None)) | 384 }, lambda *args: None)) |
| 385 self.assertEqual(len(result['notifications']), 0) | 385 self.assertEqual(len(result['notifications']), 0) |
| 386 | 386 |
| 387 | 387 |
| 388 if __name__ == '__main__': | 388 if __name__ == '__main__': |
| 389 unittest.main() | 389 unittest.main() |
| OLD | NEW |