| Index: sitescripts/notifications/test/notification.py |
| diff --git a/sitescripts/notifications/test/notification.py b/sitescripts/notifications/test/notification.py |
| index e566ceb27979a59670022da7baf8bf346cf7da5e..6cf349c5c65b75c33950c9ca6e28ebe56ae22b17 100644 |
| --- a/sitescripts/notifications/test/notification.py |
| +++ b/sitescripts/notifications/test/notification.py |
| @@ -13,253 +13,273 @@ |
| # You should have received a copy of the GNU General Public License |
| # along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| +import os |
| import json |
| import mock |
| import unittest |
| +import tempfile |
| +import shutil |
| +import time |
| +import subprocess |
| + |
| +from sitescripts.utils import get_config |
| import sitescripts.notifications.web.notification as notification |
| +mock_time = mock.Mock() |
| +mock_time.return_value = time.gmtime(0) |
| + |
| class TestNotification(unittest.TestCase): |
| def setUp(self): |
| - self.load_notifications_patcher = mock.patch('sitescripts.notifications.web.notification.load_notifications') |
| - self.load_notifications_mock = self.load_notifications_patcher.start() |
| + self.repo_dir = tempfile.mkdtemp('md_repo') |
|
wspee
2017/10/09 09:12:03
As discussed: This created a new repository for ev
Vasily Kuznetsov
2017/10/09 22:29:11
Hm. Now after I looked at the whole test suite it
wspee
2017/10/10 09:03:53
No worries. Half of it was based on my assumptions
|
| + subprocess.check_call(['hg', 'init'], cwd=self.repo_dir) |
| + |
| + open(os.path.join(self.repo_dir, '.hgignore'), 'w+').close() |
| + |
| + subprocess.check_call( |
| + ['hg', 'commit', '-q', '-m "Initial commit"', '-A'], |
| + cwd=self.repo_dir) |
| + |
| + config = get_config() |
| + self._notification_repository_orig = config.get( |
| + 'notifications', 'repository') |
| + get_config().set('notifications', 'repository', self.repo_dir) |
| def tearDown(self): |
| - self.load_notifications_patcher.stop() |
| + shutil.rmtree(self.repo_dir) |
| + get_config().set( |
| + 'notifications', 'repository', self._notification_repository_orig) |
| + |
| + def add_notifications(self, notifications): |
| + for id_, content in notifications: |
| + with open(os.path.join(self.repo_dir, id_), 'w+') as f: |
| + f.write(content) |
| + f.flush() |
| + |
| + subprocess.check_call( |
| + ['hg', 'commit', '-q', '-m', id_, '-A'], |
| + cwd=self.repo_dir) |
| def test_no_group(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n')]) |
| + |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| self.assertEqual(result['notifications'][0]['id'], '1') |
| self.assertFalse('-' in result['version']) |
| def test_not_in_group(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - {'id': 'a', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', '[1]\ntitle.en-US = 2\nmessage.en-US = 2\nsample = 1'), |
| + ]) |
| + |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0' |
| + 'QUERY_STRING': 'lastVersion=197001010000-2/0' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| self.assertEqual(result['notifications'][0]['id'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/0') |
| + self.assertRegexpMatches(result['version'], r'-2/0') |
| def test_in_group(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - {'id': 'a', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1\nsample = 1'), |
| + ]) |
| + |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/1' |
| + 'QUERY_STRING': 'lastVersion=197001010000-2/1' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'a') |
| - self.assertRegexpMatches(result['version'], r'-a/1') |
| + self.assertEqual(result['notifications'][0]['id'], '2') |
| + self.assertRegexpMatches(result['version'], r'-2/1') |
| def test_not_in_one_of_many_groups(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - {'id': 'a', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]}, |
| - {'id': 'b', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]}, |
| - {'id': 'c', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1\nsample = 1'), |
| + ('3', '[1]\ntitle.en-US = 3.1\nmessage.en-US = 3.1\nsample = 1'), |
| + ('4', '[1]\ntitle.en-US = 4.1\nmessage.en-US = 4.1\nsample = 1'), |
| + ]) |
| + |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/0-c/0' |
| + 'QUERY_STRING': 'lastVersion=197001010000-2/0-3/0-4/0' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| self.assertEqual(result['notifications'][0]['id'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/0-b/0-c/0') |
| + self.assertRegexpMatches(result['version'], r'-2/0-3/0-4/0') |
| def test_in_one_of_many_groups(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - {'id': 'a', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]}, |
| - {'id': 'b', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]}, |
| - {'id': 'c', 'variants': [ |
| - {'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1\nsample = 1'), |
| + ('3', '[1]\ntitle.en-US = 3.1\nmessage.en-US = 3.1\nsample = 1'), |
| + ('4', '[1]\ntitle.en-US = 4.1\nmessage.en-US = 4.1\nsample = 1'), |
| + ]) |
| + |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1-c/0' |
| + 'QUERY_STRING': 'lastVersion=197001010000-2/0-3/1-4/0' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'b') |
| - self.assertRegexpMatches(result['version'], r'-a/0-b/1-c/0') |
| + self.assertEqual(result['notifications'][0]['id'], '3') |
| + self.assertRegexpMatches(result['version'], r'-2/0-3/1-4/0') |
| def test_not_put_in_group(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - {'id': 'a', 'variants': [ |
| - {'sample': 0, 'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]} |
| - ] |
| + self.add_notifications([ |
|
Vasily Kuznetsov
2017/10/09 22:29:11
There is and was a lot of code duplication in this
wspee
2017/10/10 09:03:53
Acknowledged.
|
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1\nsample = 0'), |
| + ]) |
| + |
| result = json.loads(notification.notification({ |
| 'QUERY_STRING': 'lastVersion=197001010000' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| self.assertEqual(result['notifications'][0]['id'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/0') |
| + self.assertRegexpMatches(result['version'], r'-2/0') |
| def test_put_in_group(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - {'id': 'a', 'variants': [ |
| - {'sample': 1, 'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ]} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1\nsample = 1'), |
| + ]) |
| + |
| result = json.loads(notification.notification({ |
| 'QUERY_STRING': 'lastVersion=197001010000' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'a') |
| - self.assertRegexpMatches(result['version'], r'-a/1') |
| - |
| - def test_notification_variant_merged(self): |
|
wspee
2017/10/09 09:12:03
This "merging" is not possible with the notificati
|
| - self.load_notifications_mock.return_value = [ |
| - { |
| - 'id': 'a', |
| - 'title': {'en-US': 'default'}, |
| - 'message': {'en-US': 'default'}, |
| - 'variants': [ |
| - {'sample': 1, 'message': {'en-US': 'variant'}} |
| - ] |
| - } |
| - ] |
| - result = json.loads(notification.notification({}, lambda *args: None)) |
| - self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'a') |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], 'default') |
| - self.assertEqual(result['notifications'][0]['message']['en-US'], 'variant') |
| - self.assertFalse('variants' in result['notifications'][0]) |
| - self.assertFalse('sample' in result['notifications'][0]) |
| + self.assertEqual(result['notifications'][0]['id'], '2') |
| + self.assertRegexpMatches(result['version'], r'-2/1') |
| def test_no_variant_no_notifications(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': 'a', 'variants': [{'sample': 0}]} |
| - ] |
| + self.add_notifications([ |
| + ('1', '[1]\ntitle.en-US = 1\nmessage.en-US = 1\nsample = 0'), |
| + ]) |
| + |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 0) |
| @mock.patch('random.random') |
| def test_probability_distribution_single_group(self, random_call): |
| - self.load_notifications_mock.return_value = [ |
| - { |
| - 'id': 'a', |
| - 'variants': [ |
| - {'sample': 0.5, 'title': {'en-US': '1'}, 'message': {'en-US': ''}}, |
| - {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US': ''}}, |
| - {'sample': 0.25, 'title': {'en-US': '3'}, 'message': {'en-US': ''}} |
| - ] |
| - } |
| - ] |
| + self.add_notifications([ |
| + ('1', '[1]\n' |
| + 'title.en-US = 1.1\n' |
| + 'message.en-US = 1.1\n' |
| + 'sample = 0.5\n' |
| + '[2]\n' |
| + 'title.en-US = 1.2\n' |
| + 'message.en-US = 1.2\n' |
| + 'sample = 0.25\n' |
| + '[3]\n' |
| + 'title.en-US = 1.3\n' |
| + 'message.en-US = 1.3\n' |
| + 'sample = 0.25\n') |
| + ]) |
| + |
| random_call.return_value = 0 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/1') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.1') |
| + self.assertRegexpMatches(result['version'], r'-1/1') |
| random_call.return_value = 0.5 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/1') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.1') |
| + self.assertRegexpMatches(result['version'], r'-1/1') |
| random_call.return_value = 0.51 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '2') |
| - self.assertRegexpMatches(result['version'], r'-a/2') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.2') |
| + self.assertRegexpMatches(result['version'], r'-1/2') |
| random_call.return_value = 0.75 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '2') |
| - self.assertRegexpMatches(result['version'], r'-a/2') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.2') |
| + self.assertRegexpMatches(result['version'], r'-1/2') |
| random_call.return_value = 0.751 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '3') |
| - self.assertRegexpMatches(result['version'], r'-a/3') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.3') |
| + self.assertRegexpMatches(result['version'], r'-1/3') |
| random_call.return_value = 1 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '3') |
| - self.assertRegexpMatches(result['version'], r'-a/3') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.3') |
| + self.assertRegexpMatches(result['version'], r'-1/3') |
| @mock.patch('random.random') |
| def test_probability_distribution_multiple_groups(self, random_call): |
| - self.load_notifications_mock.return_value = [ |
| - { |
| - 'id': 'a', |
| - 'variants': [ |
| - {'sample': 0.25, 'title': {'en-US': '1'}, 'message': {'en-US': ''}}, |
| - {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US': ''}} |
| - ] |
| - }, |
| - { |
| - 'id': 'b', |
| - 'variants': [ |
| - {'sample': 0.25, 'title': {'en-US': '1'}, 'message': {'en-US': ''}}, |
| - {'sample': 0.25, 'title': {'en-US': '2'}, 'message': {'en-US': ''}} |
| - ] |
| - } |
| - ] |
| + self.add_notifications([ |
| + ('1', '[1]\n' |
| + 'title.en-US = 1.1\n' |
| + 'message.en-US = 1.1\n' |
| + 'sample = 0.25\n' |
| + '[2]\n' |
| + 'title.en-US = 1.2\n' |
| + 'message.en-US = 1.2\n' |
| + 'sample = 0.25\n'), |
| + ('2', '[1]\n' |
| + 'title.en-US = 2.1\n' |
| + 'message.en-US = 2.1\n' |
| + 'sample = 0.25\n' |
| + '[2]\n' |
| + 'title.en-US = 2.2\n' |
| + 'message.en-US = 2.1\n' |
| + 'sample = 0.25\n') |
| + ]) |
| + |
| random_call.return_value = 0 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'a') |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/1-b/0') |
| + self.assertEqual(result['notifications'][0]['id'], '1') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.1') |
| + self.assertRegexpMatches(result['version'], r'-1/1-2/0') |
| random_call.return_value = 0.251 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'a') |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '2') |
| - self.assertRegexpMatches(result['version'], r'-a/2-b/0') |
| + self.assertEqual(result['notifications'][0]['id'], '1') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '1.2') |
| + self.assertRegexpMatches(result['version'], r'-1/2-2/0') |
| random_call.return_value = 0.51 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'b') |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/0-b/1') |
| + self.assertEqual(result['notifications'][0]['id'], '2') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '2.1') |
| + self.assertRegexpMatches(result['version'], r'-1/0-2/1') |
| random_call.return_value = 0.751 |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| - self.assertEqual(result['notifications'][0]['id'], 'b') |
| - self.assertEqual(result['notifications'][0]['title']['en-US'], '2') |
| - self.assertRegexpMatches(result['version'], r'-a/0-b/2') |
| + self.assertEqual(result['notifications'][0]['id'], '2') |
| + self.assertEqual(result['notifications'][0]['title']['en-US'], '2.2') |
| + self.assertRegexpMatches(result['version'], r'-1/0-2/2') |
| + @mock.patch('time.gmtime', mock_time) |
| def test_invalid_last_version(self): |
| - self.load_notifications_mock.return_value = [] |
| notification.notification({'QUERY_STRING': 'lastVersion='}, |
| lambda *args: None) |
| + result = json.loads(notification.notification({}, lambda *args: None)) |
| + self.assertEqual(result['version'], '197001010000') |
| + |
| notification.notification({'QUERY_STRING': 'lastVersion=-'}, |
| lambda *args: None) |
| + result = json.loads(notification.notification({}, lambda *args: None)) |
| + self.assertEqual(result['version'], '197001010000') |
| + |
| notification.notification({'QUERY_STRING': 'lastVersion=-/'}, |
| lambda *args: None) |
| + result = json.loads(notification.notification({}, lambda *args: None)) |
| + self.assertEqual(result['version'], '197001010000') |
| + |
| notification.notification({'QUERY_STRING': 'lastVersion=-//'}, |
| lambda *args: None) |
| + result = json.loads(notification.notification({}, lambda *args: None)) |
| + self.assertEqual(result['version'], '197001010000') |
| def test_version_header_present(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n') |
| + ]) |
| response_header_map = {} |
| def start_response(status, response_headers): |
| @@ -270,101 +290,103 @@ class TestNotification(unittest.TestCase): |
| response_header_map['ABP-Notification-Version']) |
| def test_default_group_notification_returned_if_valid(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - { |
| - 'id': 'a', |
| - 'title': {'en-US': '0'}, |
| - 'message': {'en-US': '0'}, |
| - 'variants': [ |
| - {'title': {'en-US': '1'}, 'message': {'en-US': '1'}} |
| - ] |
| - } |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', 'title.en-US = 2\nmessage.en-US = 2\n' |
| + '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1'), |
| + ]) |
| + |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0' |
| + 'QUERY_STRING': 'lastVersion=197001010000-2/0' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 2) |
| self.assertEqual(result['notifications'][0]['id'], '1') |
| - self.assertEqual(result['notifications'][1]['id'], 'a') |
| - self.assertEqual(result['notifications'][1]['title']['en-US'], '0') |
| + self.assertEqual(result['notifications'][1]['id'], '2') |
| + self.assertEqual(result['notifications'][1]['title']['en-US'], '2') |
| self.assertNotIn('variants', result['notifications'][1]) |
| - self.assertRegexpMatches(result['version'], r'-a/0') |
| + self.assertRegexpMatches(result['version'], r'-2/0') |
| def test_default_group_notification_not_returned_if_invalid(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - { |
| - 'id': 'a', |
| - 'title': {'en-US': '0'}, |
| - 'variants': [ |
| - {'title': {'en-US': '1'}, 'message': {'en-US': '1'}} |
| - ] |
| - } |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', 'title.en-US = 2\n' |
| + '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1'), |
| + ]) |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0' |
| + 'QUERY_STRING': 'lastVersion=197001010000-2/0' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| self.assertEqual(result['notifications'][0]['id'], '1') |
| - self.assertRegexpMatches(result['version'], r'-a/0') |
| + self.assertRegexpMatches(result['version'], r'-2/0') |
| def test_invalid_notification_not_returned(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': '1', 'title': {'en-US': ''}, 'message': {'en-US': ''}}, |
| - {'id': '2', 'title': {'en-US': ''}, 'message': {}}, |
|
wspee
2017/10/09 09:12:03
This is not possible with the parser, so I removed
|
| - {'id': '3', 'title': {}, 'message': {'en-US': ''}}, |
| - {'id': '4', 'title': {}}, |
| - {'id': '5', 'message': {}}, |
| - {'id': '6'} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'title.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', 'title.en-US = 2\n'), |
| + ('3', 'title.en-US = \n'), |
| + ('4', 'message.en-US = \n'), |
| + ('5', '\n'), |
| + ]) |
| + |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 1) |
| self.assertEqual(result['notifications'][0]['id'], '1') |
| def test_stays_in_group_when_notification_present(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': 'a'} |
| - ] |
| + self.add_notifications([ |
| + ('1', '\n'), |
| + ]) |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1' |
| + 'QUERY_STRING': 'lastVersion=197001010000-1/0-2/1' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 0) |
| - self.assertRegexpMatches(result['version'], r'-a/0') |
| + self.assertRegexpMatches(result['version'], r'-1/0') |
| def test_leaves_group_when_notification_absent(self): |
| - self.load_notifications_mock.return_value = [] |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1' |
| + 'QUERY_STRING': 'lastVersion=197001010000-1/0-2/1' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 0) |
| self.assertRegexpMatches(result['version'], r'[^-]*') |
| def test_stays_in_group_when_notification_inactive(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': 'a', 'inactive': True} |
| - ] |
| + self.add_notifications( |
| + [('1', 'inactive = true\ntitle.en-US = 1\nmessage.en-US = 1\n')]) |
| result = json.loads(notification.notification({ |
| - 'QUERY_STRING': 'lastVersion=197001010000-a/0-b/1' |
| + 'QUERY_STRING': 'lastVersion=197001010000-1/0-2/1' |
| }, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 0) |
| - self.assertRegexpMatches(result['version'], r'-a/0') |
| + self.assertRegexpMatches(result['version'], r'-1/0') |
| + |
| + def test_stays_in_group_when_notification_inactive_assign_new_group(self): |
| + # See: https://issues.adblockplus.org/ticket/5827 |
| + self.add_notifications([ |
| + ('1', 'inactive = true\ntitle.en-US = 1.1\nmessage.en-US = 1.1'), |
| + ('2', '[1]\ntitle.en-US = 2.1\nmessage.en-US = 2.1\nsample = 1\n'), |
| + ]) |
| + result = json.loads(notification.notification({ |
| + 'QUERY_STRING': 'lastVersion=197001010000-1/0' |
| + }, lambda *args: None)) |
| + |
| + self.assertEqual(len(result['notifications']), 1) |
| + self.assertRegexpMatches(result['version'], r'-1/0-2/1') |
| def test_inactive_notifications_not_returned(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': 'a', 'title': {'en-US': ''}, 'message': {'en-US': ''}, 'inactive': True}, |
| - {'id': 'b', 'title': {'en-US': ''}, 'message': {'en-US': ''}, 'inactive': False}, |
| - {'id': 'c', 'title': {'en-US': ''}, 'message': {'en-US': ''}} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'inactive = true\ntitle.en-US = 1\nmessage.en-US = 1\n'), |
| + ('2', 'inactive = false\ntitle.en-US = 2\nmessage.en-US = 2\n'), |
| + ('3', 'title.en-US = 3\nmessage.en-US = 3\n'), |
| + ]) |
| + |
| result = json.loads(notification.notification({}, lambda *args: None)) |
| self.assertEqual(len(result['notifications']), 2) |
| - self.assertEqual(result['notifications'][0]['id'], 'b') |
| - self.assertEqual(result['notifications'][1]['id'], 'c') |
| + self.assertEqual(result['notifications'][0]['id'], '2') |
| + self.assertEqual(result['notifications'][1]['id'], '3') |
| def test_inactive_notification_variant_not_returned(self): |
| - self.load_notifications_mock.return_value = [ |
| - {'id': 'a', 'inactive': True} |
| - ] |
| + self.add_notifications([ |
| + ('1', 'inactive = true\ntitle.en-US = 1\nmessage.en-US = 1\n'), |
| + ]) |
| result = json.loads(notification.notification({ |
| 'QUERY_STRING': 'lastVersion=197001010000-a/1' |
| }, lambda *args: None)) |