Skip to content

Commit 9cc4dcd

Browse files
committed
add unittest
1 parent 5d0f0d1 commit 9cc4dcd

1 file changed

Lines changed: 109 additions & 0 deletions

File tree

unittests/test_pipeline.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
2+
import unittest
3+
from unittest.mock import ANY, MagicMock, patch
4+
5+
from social_core.backends.azuread_tenant import AzureADTenantOAuth2
6+
from social_core.backends.open_id_connect import OpenIdConnectAuth
7+
8+
from dojo.models import Dojo_Group
9+
from dojo.pipeline import update_azure_groups, update_oidc_groups
10+
11+
12+
class TestUpdateOIDCGroups(unittest.TestCase):
13+
14+
@patch("dojo.pipeline.settings")
15+
@patch("dojo.pipeline.assign_user_to_groups")
16+
@patch("dojo.pipeline.cleanup_old_groups_for_user")
17+
def test_update_oidc_groups_with_valid_groups(self, mock_cleanup, mock_assign, mock_settings):
18+
mock_settings.OIDC_AUTH_ENABLED = True
19+
mock_settings.OIDC_GET_GROUPS = True
20+
mock_settings.OIDC_GROUPS_FILTER = ".*"
21+
mock_settings.OIDC_CLEANUP_GROUPS = True
22+
mock_backend = MagicMock(spec=OpenIdConnectAuth)
23+
mock_user = MagicMock()
24+
response = {"groups": ["admin", "user"]}
25+
update_oidc_groups(mock_backend, uid="123", user=mock_user, response=response)
26+
mock_assign.assert_called_once_with(mock_user, ["admin", "user"], ANY)
27+
mock_cleanup.assert_called_once_with(mock_user, ["admin", "user"])
28+
29+
@patch("dojo.pipeline.settings")
30+
def test_update_oidc_groups_with_no_groups(self, mock_settings):
31+
mock_settings.OIDC_AUTH_ENABLED = True
32+
mock_settings.OIDC_GET_GROUPS = True
33+
mock_backend = MagicMock(spec=OpenIdConnectAuth)
34+
mock_user = MagicMock()
35+
response = {"groups": []}
36+
with patch("dojo.pipeline.logger.warning") as mock_logger:
37+
update_oidc_groups(mock_backend, uid="123", user=mock_user, response=response)
38+
mock_logger.assert_called_once_with("No 'groups' claim found in OIDC response. Skipping group assignment.")
39+
40+
@patch("dojo.pipeline.settings")
41+
@patch("dojo.pipeline.assign_user_to_groups")
42+
def test_update_oidc_groups_with_filter(self, mock_assign, mock_settings):
43+
mock_settings.OIDC_AUTH_ENABLED = True
44+
mock_settings.OIDC_GET_GROUPS = True
45+
mock_settings.OIDC_GROUPS_FILTER = "^admin$"
46+
mock_settings.OIDC_CLEANUP_GROUPS = False
47+
mock_backend = MagicMock(spec=OpenIdConnectAuth)
48+
mock_user = MagicMock()
49+
response = {"groups": ["admin", "user", "guest"]}
50+
update_oidc_groups(mock_backend, uid="123", user=mock_user, response=response)
51+
mock_assign.assert_called_once_with(mock_user, ["admin"], ANY)
52+
53+
54+
class TestUpdateAzureGroups(unittest.TestCase):
55+
56+
@patch("dojo.pipeline.settings")
57+
@patch("dojo.pipeline.assign_user_to_groups")
58+
@patch("dojo.pipeline.cleanup_old_groups_for_user")
59+
@patch("dojo.pipeline.requests.get")
60+
def test_update_azure_groups_with_group_ids(self, mock_requests_get, mock_cleanup, mock_assign, mock_settings):
61+
mock_settings.AZUREAD_TENANT_OAUTH2_ENABLED = True
62+
mock_settings.AZUREAD_TENANT_OAUTH2_GET_GROUPS = True
63+
mock_settings.AZUREAD_TENANT_OAUTH2_GROUPS_FILTER = None
64+
mock_settings.AZUREAD_TENANT_OAUTH2_CLEANUP_GROUPS = True
65+
mock_settings.REQUESTS_TIMEOUT = 5
66+
mock_backend = MagicMock(spec=AzureADTenantOAuth2)
67+
mock_user = MagicMock()
68+
mock_social = MagicMock()
69+
mock_social.extra_data = {
70+
"access_token": "fake-token",
71+
"resource": "https://graph.microsoft.com",
72+
}
73+
mock_user.social_auth.order_by.return_value.first.return_value = mock_social
74+
mock_response = {"groups": ["group-id-1", "group-id-2"]}
75+
mock_requests_get.return_value.json.return_value = {"displayName": "GroupName"}
76+
mock_requests_get.return_value.raise_for_status = MagicMock()
77+
with patch("dojo.pipeline.is_group_id", return_value=True):
78+
update_azure_groups(mock_backend, uid="123", user=mock_user, response=mock_response)
79+
mock_assign.assert_called_once_with(mock_user, ["GroupName", "GroupName"], Dojo_Group.AZURE)
80+
mock_cleanup.assert_called_once_with(mock_user, ["GroupName", "GroupName"])
81+
82+
@patch("dojo.pipeline.settings")
83+
def test_update_azure_groups_with_no_groups(self, mock_settings):
84+
mock_settings.AZUREAD_TENANT_OAUTH2_ENABLED = True
85+
mock_settings.AZUREAD_TENANT_OAUTH2_GET_GROUPS = True
86+
mock_backend = MagicMock(spec=AzureADTenantOAuth2)
87+
mock_user = MagicMock()
88+
mock_user.social_auth.order_by.return_value.first.return_value = MagicMock()
89+
mock_response = {"groups": []}
90+
with patch("dojo.pipeline.logger.warning") as mock_logger:
91+
update_azure_groups(mock_backend, uid="123", user=mock_user, response=mock_response)
92+
mock_logger.assert_called_once_with("No groups in response. Stopping to update groups of user based on azureAD")
93+
94+
@patch("dojo.pipeline.settings")
95+
@patch("dojo.pipeline.assign_user_to_groups")
96+
def test_update_azure_groups_with_group_name_and_filter(self, mock_assign, mock_settings):
97+
mock_settings.AZUREAD_TENANT_OAUTH2_ENABLED = True
98+
mock_settings.AZUREAD_TENANT_OAUTH2_GET_GROUPS = True
99+
mock_settings.AZUREAD_TENANT_OAUTH2_GROUPS_FILTER = "^admin$"
100+
mock_settings.AZUREAD_TENANT_OAUTH2_CLEANUP_GROUPS = False
101+
mock_backend = MagicMock(spec=AzureADTenantOAuth2)
102+
mock_user = MagicMock()
103+
mock_social = MagicMock()
104+
mock_social.extra_data = {"access_token": "fake-token", "resource": "https://graph.microsoft.com"}
105+
mock_user.social_auth.order_by.return_value.first.return_value = mock_social
106+
mock_response = {"groups": ["admin", "user", "guest"]}
107+
with patch("dojo.pipeline.is_group_id", return_value=False):
108+
update_azure_groups(mock_backend, uid="123", user=mock_user, response=mock_response)
109+
mock_assign.assert_called_once_with(mock_user, ["admin"], Dojo_Group.AZURE)

0 commit comments

Comments
 (0)