diff --git a/notifications_routing/data_source/postgres/postgres_data_source.py b/notifications_routing/data_source/postgres/postgres_data_source.py index def3b535d751071d0277d9a3bdba6f55533e43ca..b9afac7cd86324383cba7f4309a341783a55d295 100644 --- a/notifications_routing/data_source/postgres/postgres_data_source.py +++ b/notifications_routing/data_source/postgres/postgres_data_source.py @@ -114,7 +114,7 @@ class PostgresDataSource(DataSource): :raises: NotFoundDataSourceError, MultipleResultsFoundError """ with self.session() as session: - notification = self.__get_scalar(session, Notification, id=notification_id, deleteDate=None) + notification = self.__get_scalar(session, Notification, id=notification_id) if not notification: raise NotFoundDataSourceError(Notification, id=notification_id) @@ -128,7 +128,7 @@ class PostgresDataSource(DataSource): :raises: NotFoundDataSourceError, MultipleResultsFoundError """ with self.session() as session: - notification = self.__get_scalar(session, Notification, id=notification_id, deleteDate=None) + notification = self.__get_scalar(session, Notification, id=notification_id) if not notification: raise NotFoundDataSourceError(Notification, id=notification_id) @@ -407,8 +407,8 @@ class User(PostgresDataSource.Base): username = Column(String) email = Column(String) enabled = Column(Boolean) - created = Column(Time) - lastLogin = Column(Time) + created = Column(DateTime) + lastLogin = Column(DateTime) preferences = relationship("Preference") devices = relationship("Device") diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index ab931b5f2fe99b383e3a4fda4a63970ab350961a..78f861f93055fd5cbfe67ad65658d576c35024f2 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -13,6 +13,7 @@ from notifications_routing.data_source.postgres.postgres_data_source import ( Device, Group, Mute, + Notification, PostgresDataSource, Preference, User, @@ -63,9 +64,9 @@ def user(session): user.username = "testuser" user.email = "testuser@cern.ch" user.enabled = True - user.created = datetime.time(1, 0) + user.created = datetime.datetime(2020, 1, 1) user.preferences = [] - user.lastLogin = datetime.time(1, 0) + user.lastLogin = datetime.datetime(2020, 1, 1) session.add(user) session.commit() @@ -84,9 +85,9 @@ def unsubscribed_user(session): user.username = "unsubscribed_user" user.email = "unsubscribed_user@cern.ch" user.enabled = False - user.created = datetime.time(2, 0) + user.created = datetime.datetime(2020, 1, 1) user.preferences = [] - user.lastLogin = None + user.lastLogin = datetime.datetime(2020, 2, 2) session.add(user) session.commit() @@ -140,6 +141,28 @@ def channel(session, group, user, unsubscribed_user): session.commit() +@pytest.fixture(scope="function") +def target_notification(session, group, user, unsubscribed_user): + """Insert channel to db.""" + target_notification = Notification() + target_notification.id = "c3ccc15b-298f-4dc7-877f-2c8970331caf" + target_notification.target_groups = [group] + target_notification.target_users = [user, unsubscribed_user] + + session.add(target_notification) + session.commit() + + yield target_notification + + target_notification.target_groups = [] + target_notification.target_users = [] + session.add(target_notification) + session.commit() + + session.delete(target_notification) + session.commit() + + @pytest.fixture(scope="function") def device(session): """Insert device to db.""" diff --git a/tests/integration/test_postgres_data_source.py b/tests/integration/test_postgres_data_source.py index ed65db6598f1db38fdba4bed6c26fd806e7b12e9..c1a7835bb880c9953e28e0a7aa2153a9d87f11da 100644 --- a/tests/integration/test_postgres_data_source.py +++ b/tests/integration/test_postgres_data_source.py @@ -1,6 +1,42 @@ """Integration Tests for PostgresDataSource.""" import datetime +from uuid import UUID + + +def test_get_notification_target_users(appctx, data_source, target_notification): + """Test get notification target users.""" + users = data_source.get_target_users(target_notification.id) + assert users + + expected_data = [ + { + "user_id": UUID("16fd2706-8baf-433b-82eb-8c7fada847da"), + "username": "testuser", + "email": "testuser@cern.ch", + "last_login": datetime.datetime(2020, 1, 1), + }, + { + "user_id": UUID("17fd2706-8baf-433b-82eb-8c7fada847da"), + "username": "unsubscribed_user", + "email": "unsubscribed_user@cern.ch", + "last_login": datetime.datetime(2020, 2, 2), + }, + ] + + assert len(users) == len(expected_data) + for user in users: + assert user in expected_data + + +def test_get_notification_target_groups(appctx, data_source, target_notification): + """Test get target groups.""" + groups = data_source.get_target_groups(target_notification.id) + assert groups + assert len(groups) == 1 + + channel_group = groups[0] + assert str(channel_group) == "186d8dfc-2774-43a8-91b5-a887fcb6ba4a" def test_get_channel_users(appctx, data_source, channel): @@ -13,7 +49,7 @@ def test_get_channel_users(appctx, data_source, channel): assert str(channel_user["user_id"]) == "16fd2706-8baf-433b-82eb-8c7fada847da" assert channel_user["username"] == "testuser" assert channel_user["email"] == "testuser@cern.ch" - assert channel_user["last_login"] == datetime.time(1, 0) + assert channel_user["last_login"] == datetime.datetime(2020, 1, 1) def test_get_channel_unsubscribed_users(appctx, data_source, channel):