| Index: sitescripts/notifications/test/notification.py | 
| =================================================================== | 
| --- a/sitescripts/notifications/test/notification.py | 
| +++ b/sitescripts/notifications/test/notification.py | 
| @@ -30,7 +30,9 @@ | 
| self.load_notifications_patcher.stop() | 
|  | 
| def test_no_group(self): | 
| -    self.load_notifications_mock.return_value = [{"id": "1"}] | 
| +    self.load_notifications_mock.return_value = [ | 
| +      {"id": "1", "title": {}, "message": {}} | 
| +    ] | 
| result = json.loads(notification.notification({}, lambda *args: None)) | 
| self.assertEqual(len(result["notifications"]), 1) | 
| self.assertEqual(result["notifications"][0]["id"], "1") | 
| @@ -38,11 +40,8 @@ | 
|  | 
| def test_not_in_group(self): | 
| self.load_notifications_mock.return_value = [ | 
| -      {"id": "1"}, | 
| -      { | 
| -        "id": "a", | 
| -        "variants": [{}] | 
| -      } | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      {"id": "a", "variants": [{"title": {}, "message": {}}]} | 
| ] | 
| result = json.loads(notification.notification({ | 
| "QUERY_STRING": "lastVersion=197001010000-a/0" | 
| @@ -53,11 +52,8 @@ | 
|  | 
| def test_in_group(self): | 
| self.load_notifications_mock.return_value = [ | 
| -      {"id": "1"}, | 
| -      { | 
| -        "id": "a", | 
| -        "variants": [{}] | 
| -      } | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      {"id": "a", "variants": [{"title": {}, "message": {}}]} | 
| ] | 
| result = json.loads(notification.notification({ | 
| "QUERY_STRING": "lastVersion=197001010000-a/1" | 
| @@ -68,19 +64,10 @@ | 
|  | 
| def test_not_in_one_of_many_groups(self): | 
| self.load_notifications_mock.return_value = [ | 
| -      {"id": "1"}, | 
| -      { | 
| -        "id": "a", | 
| -        "variants": [{}] | 
| -      }, | 
| -      { | 
| -        "id": "b", | 
| -        "variants": [{}] | 
| -      }, | 
| -      { | 
| -        "id": "c", | 
| -        "variants": [{}] | 
| -      } | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      {"id": "a", "variants": [{"title": {}, "message": {}}]}, | 
| +      {"id": "b", "variants": [{"title": {}, "message": {}}]}, | 
| +      {"id": "c", "variants": [{"title": {}, "message": {}}]} | 
| ] | 
| result = json.loads(notification.notification({ | 
| "QUERY_STRING": "lastVersion=197001010000-a/0-b/0-c/0" | 
| @@ -91,19 +78,10 @@ | 
|  | 
| def test_in_one_of_many_groups(self): | 
| self.load_notifications_mock.return_value = [ | 
| -      {"id": "1"}, | 
| -      { | 
| -        "id": "a", | 
| -        "variants": [{}] | 
| -      }, | 
| -      { | 
| -        "id": "b", | 
| -        "variants": [{}] | 
| -      }, | 
| -      { | 
| -        "id": "c", | 
| -        "variants": [{}] | 
| -      } | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      {"id": "a", "variants": [{"title": {}, "message": {}}]}, | 
| +      {"id": "b", "variants": [{"title": {}, "message": {}}]}, | 
| +      {"id": "c", "variants": [{"title": {}, "message": {}}]} | 
| ] | 
| result = json.loads(notification.notification({ | 
| "QUERY_STRING": "lastVersion=197001010000-a/0-b/1-c/0" | 
| @@ -114,11 +92,8 @@ | 
|  | 
| def test_not_put_in_group(self): | 
| self.load_notifications_mock.return_value = [ | 
| -      {"id": "1"}, | 
| -      { | 
| -        "id": "a", | 
| -        "variants": [{"sample": 0}] | 
| -      } | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      {"id": "a", "variants": [{"sample": 0, "title": {}, "message": {}}]} | 
| ] | 
| result = json.loads(notification.notification({ | 
| "QUERY_STRING": "lastVersion=197001010000" | 
| @@ -129,11 +104,8 @@ | 
|  | 
| def test_put_in_group(self): | 
| self.load_notifications_mock.return_value = [ | 
| -      {"id": "1"}, | 
| -      { | 
| -        "id": "a", | 
| -        "variants": [{"sample": 1}] | 
| -      } | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      {"id": "a", "variants": [{"sample": 1, "title": {}, "message": {}}]} | 
| ] | 
| result = json.loads(notification.notification({ | 
| "QUERY_STRING": "lastVersion=197001010000" | 
| @@ -146,32 +118,24 @@ | 
| self.load_notifications_mock.return_value = [ | 
| { | 
| "id": "a", | 
| -        "title.en-GB": "default", | 
| -        "message.en-GB": "default", | 
| -        "message.de-DE": "vorgabe", | 
| +        "title": {"en-US": "default"}, | 
| +        "message": {"en-US": "default"}, | 
| "variants": [ | 
| -          { | 
| -            "sample": 1, | 
| -            "message.en-GB": "variant" | 
| -          } | 
| +          {"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-GB"], "default") | 
| -    self.assertEqual(result["notifications"][0]["message.en-GB"], "variant") | 
| -    self.assertEqual(result["notifications"][0]["message.de-DE"], "vorgabe") | 
| +    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]) | 
|  | 
| def test_no_variant_no_notifications(self): | 
| self.load_notifications_mock.return_value = [ | 
| -      { | 
| -        "id": "a", | 
| -        "variants": [{"sample": 0}] | 
| -      } | 
| +      {"id": "a", "variants": [{"sample": 0}]} | 
| ] | 
| result = json.loads(notification.notification({}, lambda *args: None)) | 
| self.assertEqual(len(result["notifications"]), 0) | 
| @@ -182,50 +146,41 @@ | 
| { | 
| "id": "a", | 
| "variants": [ | 
| -          { | 
| -            "sample": 0.5, | 
| -            "title.en-GB": "1" | 
| -          }, | 
| -          { | 
| -            "sample": 0.25, | 
| -            "title.en-GB": "2" | 
| -          }, | 
| -          { | 
| -            "sample": 0.25, | 
| -            "title.en-GB": "3" | 
| -          } | 
| +          {"sample": 0.5, "title": {"en-US": "1"}, "message": {}}, | 
| +          {"sample": 0.25, "title": {"en-US": "2"}, "message": {}}, | 
| +          {"sample": 0.25, "title": {"en-US": "3"}, "message": {}} | 
| ] | 
| } | 
| ] | 
| 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-GB"], "1") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "1") | 
| self.assertRegexpMatches(result["version"], r"-a/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-GB"], "1") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "1") | 
| self.assertRegexpMatches(result["version"], r"-a/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-GB"], "2") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "2") | 
| self.assertRegexpMatches(result["version"], r"-a/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-GB"], "2") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "2") | 
| self.assertRegexpMatches(result["version"], r"-a/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-GB"], "3") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "3") | 
| self.assertRegexpMatches(result["version"], r"-a/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-GB"], "3") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "3") | 
| self.assertRegexpMatches(result["version"], r"-a/3") | 
|  | 
| @mock.patch("random.random") | 
| @@ -234,27 +189,15 @@ | 
| { | 
| "id": "a", | 
| "variants": [ | 
| -          { | 
| -            "sample": 0.25, | 
| -            "title.en-GB": "1" | 
| -          }, | 
| -          { | 
| -            "sample": 0.25, | 
| -            "title.en-GB": "2" | 
| -          } | 
| +          {"sample": 0.25, "title": {"en-US": "1"}, "message": {}}, | 
| +          {"sample": 0.25, "title": {"en-US": "2"}, "message": {}} | 
| ] | 
| }, | 
| { | 
| "id": "b", | 
| "variants": [ | 
| -          { | 
| -            "sample": 0.25, | 
| -            "title.en-GB": "1" | 
| -          }, | 
| -          { | 
| -            "sample": 0.25, | 
| -            "title.en-GB": "2" | 
| -          } | 
| +          {"sample": 0.25, "title": {"en-US": "1"}, "message": {}}, | 
| +          {"sample": 0.25, "title": {"en-US": "2"}, "message": {}} | 
| ] | 
| } | 
| ] | 
| @@ -262,25 +205,25 @@ | 
| 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-GB"], "1") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "1") | 
| self.assertRegexpMatches(result["version"], r"-a/1-b/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-GB"], "2") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "2") | 
| self.assertRegexpMatches(result["version"], r"-a/2-b/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-GB"], "1") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "1") | 
| self.assertRegexpMatches(result["version"], r"-a/0-b/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-GB"], "2") | 
| +    self.assertEqual(result["notifications"][0]["title"]["en-US"], "2") | 
| self.assertRegexpMatches(result["version"], r"-a/0-b/2") | 
|  | 
| def test_invalid_last_version(self): | 
| @@ -295,7 +238,9 @@ | 
| lambda *args: None) | 
|  | 
| def test_version_header_present(self): | 
| -    self.load_notifications_mock.return_value = [{"id": "1"}] | 
| +    self.load_notifications_mock.return_value = [ | 
| +      {"id": "1", "title": {}, "message": {}} | 
| +    ] | 
| response_header_map = {} | 
| def start_response(status, response_headers): | 
| for name, value in response_headers: | 
| @@ -304,5 +249,55 @@ | 
| self.assertEqual(result["version"], | 
| response_header_map["ABP-Notification-Version"]) | 
|  | 
| +  def test_default_group_notification_returned_if_valid(self): | 
| +    self.load_notifications_mock.return_value = [ | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      { | 
| +        "id": "a", | 
| +        "title": {"en-US": "0"}, | 
| +        "message": {"en-US": "0"}, | 
| +        "variants": [ | 
| +          {"title": {"en-US": "1"}, "message": {"en-US": "1"}} | 
| +        ] | 
| +      } | 
| +    ] | 
| +    result = json.loads(notification.notification({ | 
| +      "QUERY_STRING": "lastVersion=197001010000-a/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.assertNotIn("variants", result["notifications"][1]) | 
| +    self.assertRegexpMatches(result["version"], r"-a/0") | 
| + | 
| +  def test_default_group_notification_not_returned_if_invalid(self): | 
| +    self.load_notifications_mock.return_value = [ | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      { | 
| +        "id": "a", | 
| +        "title": {"en-US": "0"}, | 
| +        "variants": [ | 
| +          {"title": {"en-US": "1"}, "message": {"en-US": "1"}} | 
| +        ] | 
| +      } | 
| +    ] | 
| +    result = json.loads(notification.notification({ | 
| +      "QUERY_STRING": "lastVersion=197001010000-a/0" | 
| +    }, lambda *args: None)) | 
| +    self.assertEqual(len(result["notifications"]), 1) | 
| +    self.assertEqual(result["notifications"][0]["id"], "1") | 
| +    self.assertRegexpMatches(result["version"], r"-a/0") | 
| + | 
| +  def test_invalid_notification_not_returned(self): | 
| +    self.load_notifications_mock.return_value = [ | 
| +      {"id": "1", "title": {}, "message": {}}, | 
| +      {"id": "2", "title": {}}, | 
| +      {"id": "3", "message": {}} | 
| +    ] | 
| +    result = json.loads(notification.notification({}, lambda *args: None)) | 
| +    self.assertEqual(len(result["notifications"]), 1) | 
| +    self.assertEqual(result["notifications"][0]["id"], "1") | 
| + | 
| if __name__ == '__main__': | 
| unittest.main() | 
|  |