From 89311dffe92c65e0e64476131534475c6d775561 Mon Sep 17 00:00:00 2001
From: Carina Antunes <carina.oliveira.antunes@cern.ch>
Date: Thu, 14 Apr 2022 16:29:25 +0200
Subject: [PATCH] [HOTFIX] Handle unconfirmed identities

---
 notifications_routing/config.py               |  3 ++-
 .../postgres/postgres_data_source.py          |  7 ++++++-
 tests/unit/test_postgres_data_source.py       | 20 +++++++++++++++++--
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/notifications_routing/config.py b/notifications_routing/config.py
index 5a51884..90d773e 100644
--- a/notifications_routing/config.py
+++ b/notifications_routing/config.py
@@ -31,7 +31,8 @@ class Config:
     )
     CERN_GROUP_URL = os.getenv("CERN_GROUP_URL", "https://authorization-service-api.web.cern.ch/api/v1.0/Group")
     CERN_GROUP_QUERY = os.getenv(
-        "CERN_GROUP_QUERY", "memberidentities?field=upn&field=primaryAccountEmail&recursive=true"
+        "CERN_GROUP_QUERY",
+        "memberidentities/precomputed?field=upn&field=primaryAccountEmail" "&field=unconfirmed&field=unconfirmedEmail",
     )
 
     # DB
diff --git a/notifications_routing/data_source/postgres/postgres_data_source.py b/notifications_routing/data_source/postgres/postgres_data_source.py
index b9afac7..8e5fd6f 100644
--- a/notifications_routing/data_source/postgres/postgres_data_source.py
+++ b/notifications_routing/data_source/postgres/postgres_data_source.py
@@ -175,7 +175,12 @@ class PostgresDataSource(DataSource):
         members = content["data"]
 
         for member in members:
-            group_users.append({DataSource.USERNAME: member["upn"], DataSource.EMAIL: member["primaryAccountEmail"]})
+            if member["unconfirmed"]:
+                user = {DataSource.USERNAME: member["unconfirmedEmail"], DataSource.EMAIL: member["unconfirmedEmail"]}
+            else:
+                user = {DataSource.USERNAME: member["upn"], DataSource.EMAIL: member["primaryAccountEmail"]}
+
+            group_users.append(user)
 
         return group_users
 
diff --git a/tests/unit/test_postgres_data_source.py b/tests/unit/test_postgres_data_source.py
index cdb2cec..a6c03eb 100644
--- a/tests/unit/test_postgres_data_source.py
+++ b/tests/unit/test_postgres_data_source.py
@@ -135,9 +135,25 @@ def test_get_channel_unsubscribed_users_(mock_get_scalar, db_mock, channel):
 @mock.patch("notifications_routing.data_source.postgres.postgres_data_source.get_group_users_api")
 def test_get_group_users(mock_get_group_users_api, db_mock):
     """Test get group users."""
-    mock_get_group_users_api.return_value = {"data": [{"upn": "testuser", "primaryAccountEmail": "testuser@cern.ch"}]}
+    mock_get_group_users_api.return_value = {
+        "data": [
+            {
+                "upn": "testuser",
+                "primaryAccountEmail": "testuser@cern.ch",
+                "unconfirmed": False,
+                "unconfirmedEmail": None,
+            },
+            {
+                "upn": None,
+                "primaryAccountEmail": None,
+                "unconfirmed": True,
+                "unconfirmedEmail": "unconfirmedEmail@mail.ch",
+            },
+        ]
+    }
     assert db_mock.get_group_users("186d8dfc-2774-43a8-91b5-a887fcb6ba4a") == [
-        {"username": "testuser", "email": "testuser@cern.ch"}
+        {"username": "testuser", "email": "testuser@cern.ch"},
+        {"username": "unconfirmedEmail@mail.ch", "email": "unconfirmedEmail@mail.ch"},
     ]
     mock_get_group_users_api.assert_called_once_with("186d8dfc-2774-43a8-91b5-a887fcb6ba4a")
 
-- 
GitLab