diff --git a/notifications_routing/router.py b/notifications_routing/router.py index 9b3f025ef2530cfc9d80e9e676bf3e81f5768a73..ebc2cb886db2666f8c2bfa5474a9ac392d44f3d3 100644 --- a/notifications_routing/router.py +++ b/notifications_routing/router.py @@ -77,7 +77,9 @@ class Router(megabus.Listener): return notification - def add_users_from_groups(self, channel_id: str, users: List[Dict[str, str]], groups: List[Dict[str, str]]): + def add_users_from_groups( + self, notification_id: str, channel_id: str, users: List[Dict[str, str]], groups: List[Dict[str, str]] + ): """Add users from groups to users list.""" unique_usernames = [channel_user[self.data_source.USERNAME] for channel_user in users] logging.debug("channel %s usernames: %s", channel_id, unique_usernames) @@ -85,6 +87,7 @@ class Router(megabus.Listener): if groups: channel_unsubscribed_users = self.data_source.get_channel_unsubscribed_users(channel_id) logging.debug("channel %s unsubscribed users %s", channel_id, channel_unsubscribed_users) + audit_notification(notification_id, {"event": "Unsubscribed users", "targets": channel_unsubscribed_users}) for group in groups: for group_id in group.values(): @@ -108,19 +111,19 @@ class Router(megabus.Listener): logging.debug("channel %s final users %s", channel_id, users) - def get_channel_users(self, channel_id): + def get_channel_users(self, notification_id, channel_id): """Join users from our data source and the grappa system to return a unique users list.""" channel_users = self.data_source.get_channel_users(channel_id) channel_groups = self.data_source.get_channel_groups(channel_id) logging.debug("channel %s groups %s", channel_id, channel_groups) - self.add_users_from_groups(channel_id, channel_users, channel_groups) + self.add_users_from_groups(notification_id, channel_id, channel_users, channel_groups) logging.debug("channel %s final users %s", channel_id, channel_users) return channel_users - def get_target_users(self, channel_id, specified_target_users, specified_target_groups): + def get_target_users(self, notification_id, channel_id, specified_target_users, specified_target_groups): """Join users from our data source and the grappa system to return a unique users list.""" target_users = [] if specified_target_users: @@ -130,7 +133,7 @@ class Router(megabus.Listener): target_groups = self.data_source.get_target_groups(channel_id, specified_target_groups) logging.debug("channel %s targeted groups %s", channel_id, target_groups) - self.add_users_from_groups(channel_id, target_users, target_groups) + self.add_users_from_groups(notification_id, channel_id, target_users, target_groups) return target_users @@ -140,6 +143,7 @@ class Router(megabus.Listener): audit_notification(message[OutputMessageKeys.ID], {"event": "Start processing targeted notification"}) logging.debug("Processing direct notification %s", message[OutputMessageKeys.ID]) target_users = self.get_target_users( + message[OutputMessageKeys.ID], message[OutputMessageKeys.CHANNEL_ID], message[OutputMessageKeys.TARGETUSERS], message[OutputMessageKeys.TARGETGROUPS], @@ -149,7 +153,9 @@ class Router(megabus.Listener): return if OutputMessageKeys.INTERSECTION in message and message[OutputMessageKeys.INTERSECTION]: logging.debug("Processing intersection target users for %s", message[OutputMessageKeys.ID]) - tmp_channel_users = self.get_channel_users(message[OutputMessageKeys.CHANNEL_ID]) + tmp_channel_users = self.get_channel_users( + message[OutputMessageKeys.ID], message[OutputMessageKeys.CHANNEL_ID] + ) if not tmp_channel_users: logging.debug( "no tmp_channel_users to intersect for channel %s", message[OutputMessageKeys.CHANNEL_ID] @@ -161,7 +167,7 @@ class Router(megabus.Listener): else: audit_notification(message[OutputMessageKeys.ID], {"event": "Start processing"}) logging.debug("Processing general notification %s", message[OutputMessageKeys.ID]) - target_users = self.get_channel_users(message[OutputMessageKeys.CHANNEL_ID]) + target_users = self.get_channel_users(message[OutputMessageKeys.ID], message[OutputMessageKeys.CHANNEL_ID]) if not target_users: logging.debug("no channel_users for channel %s", message[OutputMessageKeys.CHANNEL_ID]) return diff --git a/tests/unit/test_router.py b/tests/unit/test_router.py index 871bf2319bdfbad0d8542099d2bb51b31f03d6fe..65e658eb9a1afcbf581e6c496e6236f96766a463 100644 --- a/tests/unit/test_router.py +++ b/tests/unit/test_router.py @@ -180,7 +180,7 @@ def test_get_channel_users_one_group_without_no_system_users( router_mock.data_source.get_group_users.return_value = [group_user_1, group_user_2] router_mock.data_source.get_system_user.side_effect = [system_user_1, system_user_2] - assert router_mock.get_channel_users("c3ccc15b-298f-4dc7-877f-2c8970331caf") == [system_user_1, system_user_2] + assert router_mock.get_channel_users(ANY, "c3ccc15b-298f-4dc7-877f-2c8970331caf") == [system_user_1, system_user_2] def test_get_channel_users_one_group_with_no_system_user(router_mock, no_system_user_1): @@ -192,7 +192,7 @@ def test_get_channel_users_one_group_with_no_system_user(router_mock, no_system_ router_mock.data_source.get_group_users.return_value = [no_system_user_1] router_mock.data_source.get_system_user.side_effect = NotFoundDataSourceError(User, username="nosystemuser") - assert router_mock.get_channel_users("c3ccc15b-298f-4dc7-877f-2c8970331caf") == [no_system_user_1] + assert router_mock.get_channel_users(ANY, "c3ccc15b-298f-4dc7-877f-2c8970331caf") == [no_system_user_1] def test_get_channel_users_multiple_groups_with_overlapping_users( @@ -207,7 +207,7 @@ def test_get_channel_users_multiple_groups_with_overlapping_users( router_mock.data_source.get_group_users.side_effect = [[group_user_1, group_user_2], [group_user_1, group_user_3]] router_mock.data_source.get_system_user.side_effect = [system_user_1] - assert router_mock.get_channel_users("c3ccc15b-298f-4dc7-877f-2c8970331caf") == [ + assert router_mock.get_channel_users(ANY, "c3ccc15b-298f-4dc7-877f-2c8970331caf") == [ system_user_2, system_user_3, system_user_1, @@ -230,7 +230,7 @@ def test_get_channel_no_users_multiple_groups_with_overlapping_users( NotFoundDataSourceError(""), ] - assert router_mock.get_channel_users("c3ccc15b-298f-4dc7-877f-2c8970331caf") == [ + assert router_mock.get_channel_users(ANY, "c3ccc15b-298f-4dc7-877f-2c8970331caf") == [ system_user_1, group_user_2, group_user_3, @@ -255,7 +255,7 @@ def test_get_channel_users_group_with_system_and_no_system_users( NotFoundDataSourceError(User, username="nosystemuser1"), NotFoundDataSourceError(User, username="nosystemuser2"), ] - assert router_mock.get_channel_users("c3ccc15b-298f-4dc7-877f-2c8970331caf") == [ + assert router_mock.get_channel_users(ANY, "c3ccc15b-298f-4dc7-877f-2c8970331caf") == [ system_user_1, system_user_2, no_system_user_1, @@ -271,7 +271,7 @@ def test_get_channel_users_no_users(router_mock): ] router_mock.data_source.get_group_users.return_value = [] router_mock.data_source.get_system_user.assert_not_called() - assert router_mock.get_channel_users("c3ccc15b-298f-4dc7-877f-2c8970331caf") == [] + assert router_mock.get_channel_users(ANY, "c3ccc15b-298f-4dc7-877f-2c8970331caf") == [] def test_get_channel_users_no_groups(router_mock, system_user_1, system_user_2): @@ -280,7 +280,7 @@ def test_get_channel_users_no_groups(router_mock, system_user_1, system_user_2): router_mock.data_source.get_channel_groups.return_value = [] router_mock.data_source.get_group_users.assert_not_called() router_mock.data_source.get_system_user.assert_not_called() - assert router_mock.get_channel_users("c3ccc15b-298f-4dc7-877f-2c8970331caf") == [system_user_1, system_user_2] + assert router_mock.get_channel_users(ANY, "c3ccc15b-298f-4dc7-877f-2c8970331caf") == [system_user_1, system_user_2] @mock.patch.object(Router, "get_channel_users")