| 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 | 
|---|