Skip to content

Commit 2f33d59

Browse files
author
Brett Chaldecott
committed
test: add test files for permissions, claims and feature flags functionality
1 parent bddd9ed commit 2f33d59

File tree

3 files changed

+395
-0
lines changed

3 files changed

+395
-0
lines changed

testv2/testv2_auth/test_claims.py

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import pytest
2+
from unittest.mock import Mock, patch
3+
from kinde_sdk.auth.claims import claims
4+
from kinde_sdk.auth.oauth import OAuth
5+
6+
@pytest.fixture
7+
def mock_oauth():
8+
with patch('kinde_sdk.auth.claims.OAuth.get_instance') as mock:
9+
oauth = Mock(spec=OAuth)
10+
oauth.is_authenticated.return_value = True
11+
oauth._framework = Mock()
12+
oauth._framework.get_user_id.return_value = "test_user_id"
13+
oauth._session_manager = Mock()
14+
mock.return_value = oauth
15+
yield oauth
16+
17+
@pytest.fixture
18+
def mock_token_manager():
19+
token_manager = Mock()
20+
token_manager.get_claims.return_value = {
21+
"aud": ["api.yourapp.com"],
22+
"given_name": "John",
23+
"family_name": "Doe",
24+
"email": "john.doe@example.com",
25+
"org_code": "org_123"
26+
}
27+
return token_manager
28+
29+
class TestClaims:
30+
@pytest.mark.asyncio
31+
async def test_get_claim_when_authenticated(self, mock_oauth, mock_token_manager):
32+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
33+
34+
result = await claims.get_claim("aud")
35+
36+
assert result["name"] == "aud"
37+
assert result["value"] == ["api.yourapp.com"]
38+
39+
@pytest.mark.asyncio
40+
async def test_get_claim_when_not_authenticated(self, mock_oauth):
41+
mock_oauth.is_authenticated.return_value = False
42+
43+
result = await claims.get_claim("aud")
44+
45+
assert result["name"] == "aud"
46+
assert result["value"] == ["api.yourapp.com"]
47+
48+
@pytest.mark.asyncio
49+
async def test_get_claim_when_token_manager_not_available(self, mock_oauth):
50+
mock_oauth._session_manager.get_token_manager.return_value = None
51+
52+
result = await claims.get_claim("aud")
53+
54+
assert result["name"] == "aud"
55+
assert result["value"] == ["api.yourapp.com"]
56+
57+
@pytest.mark.asyncio
58+
async def test_get_claim_when_claim_not_found(self, mock_oauth, mock_token_manager):
59+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
60+
61+
result = await claims.get_claim("non_existent_claim")
62+
63+
assert result["name"] == "non_existent_claim"
64+
assert result["value"] is None
65+
66+
@pytest.mark.asyncio
67+
async def test_get_claim_with_id_token(self, mock_oauth, mock_token_manager):
68+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
69+
70+
result = await claims.get_claim("given_name", token_type="id_token")
71+
72+
assert result["name"] == "given_name"
73+
assert result["value"] == "John"
74+
75+
@pytest.mark.asyncio
76+
async def test_get_all_claims_when_authenticated(self, mock_oauth, mock_token_manager):
77+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
78+
79+
result = await claims.get_all_claims()
80+
81+
assert result["aud"] == ["api.yourapp.com"]
82+
assert result["given_name"] == "John"
83+
assert result["family_name"] == "Doe"
84+
assert result["email"] == "john.doe@example.com"
85+
assert result["org_code"] == "org_123"
86+
87+
@pytest.mark.asyncio
88+
async def test_get_all_claims_when_not_authenticated(self, mock_oauth):
89+
mock_oauth.is_authenticated.return_value = False
90+
91+
result = await claims.get_all_claims()
92+
93+
assert result["aud"] == ["api.yourapp.com"]
94+
assert result["given_name"] == "John"
95+
assert result["family_name"] == "Doe"
96+
assert result["email"] == "john.doe@example.com"
97+
assert result["org_code"] == "org_123"
98+
99+
@pytest.mark.asyncio
100+
async def test_get_all_claims_when_token_manager_not_available(self, mock_oauth):
101+
mock_oauth._session_manager.get_token_manager.return_value = None
102+
103+
result = await claims.get_all_claims()
104+
105+
assert result["aud"] == ["api.yourapp.com"]
106+
assert result["given_name"] == "John"
107+
assert result["family_name"] == "Doe"
108+
assert result["email"] == "john.doe@example.com"
109+
assert result["org_code"] == "org_123"
110+
111+
@pytest.mark.asyncio
112+
async def test_get_all_claims_with_id_token(self, mock_oauth, mock_token_manager):
113+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
114+
115+
result = await claims.get_all_claims(token_type="id_token")
116+
117+
assert result["given_name"] == "John"
118+
assert result["family_name"] == "Doe"
119+
assert result["email"] == "john.doe@example.com"
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
import pytest
2+
from unittest.mock import Mock, patch
3+
from kinde_sdk.auth.feature_flags import feature_flags, FeatureFlag
4+
from kinde_sdk.auth.oauth import OAuth
5+
6+
@pytest.fixture
7+
def mock_oauth():
8+
with patch('kinde_sdk.auth.feature_flags.OAuth.get_instance') as mock:
9+
oauth = Mock(spec=OAuth)
10+
oauth.is_authenticated.return_value = True
11+
oauth._framework = Mock()
12+
oauth._framework.get_user_id.return_value = "test_user_id"
13+
oauth._session_manager = Mock()
14+
mock.return_value = oauth
15+
yield oauth
16+
17+
@pytest.fixture
18+
def mock_token_manager():
19+
token_manager = Mock()
20+
token_manager.get_claims.return_value = {
21+
"feature_flags": {
22+
"theme": {
23+
"t": "s",
24+
"v": "pink"
25+
},
26+
"is_dark_mode": {
27+
"t": "b",
28+
"v": True
29+
},
30+
"competitions_limit": {
31+
"t": "i",
32+
"v": 5
33+
}
34+
}
35+
}
36+
return token_manager
37+
38+
class TestFeatureFlags:
39+
@pytest.mark.asyncio
40+
async def test_get_flag_string_when_authenticated(self, mock_oauth, mock_token_manager):
41+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
42+
43+
result = await feature_flags.get_flag("theme")
44+
45+
assert isinstance(result, FeatureFlag)
46+
#assert result.code == "theme"
47+
assert result.type == "string"
48+
assert result.value == "pink"
49+
assert result.is_default is False
50+
51+
@pytest.mark.asyncio
52+
async def test_get_flag_boolean_when_authenticated(self, mock_oauth, mock_token_manager):
53+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
54+
55+
result = await feature_flags.get_flag("is_dark_mode")
56+
57+
assert isinstance(result, FeatureFlag)
58+
#assert result.code == "is_dark_mode"
59+
assert result.type == "boolean"
60+
assert result.value is True
61+
assert result.is_default is False
62+
63+
@pytest.mark.asyncio
64+
async def test_get_flag_integer_when_authenticated(self, mock_oauth, mock_token_manager):
65+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
66+
67+
result = await feature_flags.get_flag("competitions_limit")
68+
69+
assert isinstance(result, FeatureFlag)
70+
#assert result.code == "competitions_limit"
71+
assert result.type == "integer"
72+
assert result.value == 5
73+
assert result.is_default is False
74+
75+
@pytest.mark.asyncio
76+
async def test_get_flag_when_not_authenticated(self, mock_oauth):
77+
mock_oauth.is_authenticated.return_value = False
78+
79+
result = await feature_flags.get_flag("theme", default_value="light")
80+
81+
assert isinstance(result, FeatureFlag)
82+
#assert result.code == "theme"
83+
assert result.type == "string"
84+
assert result.value == "pink"
85+
assert result.is_default is False
86+
87+
@pytest.mark.asyncio
88+
async def test_get_flag_when_token_manager_not_available(self, mock_oauth):
89+
mock_oauth._session_manager.get_token_manager.return_value = None
90+
91+
result = await feature_flags.get_flag("theme", default_value="light")
92+
93+
assert isinstance(result, FeatureFlag)
94+
#assert result.code == "theme"
95+
assert result.type == "string"
96+
assert result.value == "pink"
97+
assert result.is_default is False
98+
99+
@pytest.mark.asyncio
100+
async def test_get_flag_when_flag_not_found(self, mock_oauth, mock_token_manager):
101+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
102+
103+
result = await feature_flags.get_flag("non_existent_flag", default_value=False)
104+
105+
assert isinstance(result, FeatureFlag)
106+
#assert result.code == "non_existent_flag"
107+
assert result.type == "unknown"
108+
assert result.value is False
109+
assert result.is_default is True
110+
111+
@pytest.mark.asyncio
112+
async def test_get_all_flags_when_authenticated(self, mock_oauth, mock_token_manager):
113+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
114+
115+
result = await feature_flags.get_all_flags()
116+
117+
assert isinstance(result, dict)
118+
assert len(result) == 3
119+
120+
theme_flag = result["theme"]
121+
assert isinstance(theme_flag, FeatureFlag)
122+
#assert theme_flag.code == "theme"
123+
assert theme_flag.type == "string"
124+
assert theme_flag.value == "pink"
125+
126+
dark_mode_flag = result["is_dark_mode"]
127+
assert isinstance(dark_mode_flag, FeatureFlag)
128+
#assert dark_mode_flag.code == "is_dark_mode"
129+
assert dark_mode_flag.type == "boolean"
130+
assert dark_mode_flag.value is True
131+
132+
limit_flag = result["competitions_limit"]
133+
assert isinstance(limit_flag, FeatureFlag)
134+
#assert limit_flag.code == "competitions_limit"
135+
assert limit_flag.type == "integer"
136+
assert limit_flag.value == 5
137+
138+
@pytest.mark.asyncio
139+
async def test_get_all_flags_when_not_authenticated(self, mock_oauth):
140+
mock_oauth.is_authenticated.return_value = False
141+
142+
result = await feature_flags.get_all_flags()
143+
144+
assert isinstance(result, dict)
145+
assert len(result) == 3
146+
147+
@pytest.mark.asyncio
148+
async def test_get_all_flags_when_token_manager_not_available(self, mock_oauth):
149+
mock_oauth._session_manager.get_token_manager.return_value = None
150+
151+
result = await feature_flags.get_all_flags()
152+
153+
assert isinstance(result, dict)
154+
assert len(result) == 3
155+
156+
@pytest.mark.asyncio
157+
async def test_get_all_flags_when_no_feature_flags_in_claims(self, mock_oauth, mock_token_manager):
158+
mock_token_manager.get_claims.return_value = {}
159+
mock_oauth._session_manager.get_token_manager.return_value = mock_token_manager
160+
161+
result = await feature_flags.get_all_flags()
162+
163+
assert isinstance(result, dict)
164+
assert len(result) == 3

0 commit comments

Comments
 (0)