Skip to content

Commit 7f29f85

Browse files
committed
[IMP] auth_oidc: test group assignment/removal
1 parent 51f452f commit 7f29f85

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

auth_oidc/demo/local_keycloak.xml

+12-1
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,20 @@
3737
<field name="body">Log in with Microsoft</field>
3838
<field name="auth_link_params">{'prompt':'select_account'}</field>
3939
</record>
40-
<record id="local_keycloak_group_line" model="auth.oauth.provider.group_line">
40+
<record
41+
id="local_keycloak_group_line_name_is_test"
42+
model="auth.oauth.provider.group_line"
43+
>
4144
<field name="provider_id" ref="local_keycloak" />
4245
<field name="group_id" ref="base.group_no_one" />
4346
<field name="expression">token['name'] == 'test'</field>
4447
</record>
48+
<record
49+
id="local_keycloak_group_line_erp_manager_in_groups"
50+
model="auth.oauth.provider.group_line"
51+
>
52+
<field name="provider_id" ref="local_keycloak" />
53+
<field name="group_id" ref="base.group_erp_manager" />
54+
<field name="expression">'erp_manager' in token['groups']</field>
55+
</record>
4556
</odoo>

auth_oidc/tests/test_auth_oidc_auth_code.py

+39
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import odoo
1616
from odoo.exceptions import AccessDenied, ValidationError
17+
from odoo.fields import Command
1718
from odoo.tests import common
1819

1920
from odoo.addons.website.tools import MockRequest as _MockRequest
@@ -158,6 +159,44 @@ def test_login(self):
158159
self.assertEqual(token, "42")
159160
self.assertEqual(login, user.login)
160161

162+
@responses.activate
163+
def test_manager_login(self):
164+
"""Test that login works and assigns the user to a manager group"""
165+
user = self._prepare_login_test_user()
166+
self._prepare_login_test_responses(
167+
id_token_body={"user_id": user.login, "groups": ["erp_manager"]}
168+
)
169+
170+
params = {"state": json.dumps({})}
171+
with MockRequest(self.env):
172+
db, login, token = self.env["res.users"].auth_oauth(
173+
self.provider_rec.id,
174+
params,
175+
)
176+
self.assertTrue(user.has_group("base.group_erp_manager"))
177+
178+
@responses.activate
179+
def test_ex_manager_login(self):
180+
"""Test that login works and de-assigns the user from a manager group"""
181+
user = self._prepare_login_test_user()
182+
# Make them a manager
183+
user.write(
184+
{"groups_id": [Command.link(self.env.ref("base.group_erp_manager").id)]}
185+
)
186+
self.assertTrue(user.has_group("base.group_erp_manager"))
187+
188+
self._prepare_login_test_responses(
189+
id_token_body={"user_id": user.login, "groups": ["not_erp_manager"]}
190+
)
191+
192+
params = {"state": json.dumps({})}
193+
with MockRequest(self.env):
194+
db, login, token = self.env["res.users"].auth_oauth(
195+
self.provider_rec.id,
196+
params,
197+
)
198+
self.assertFalse(user.has_group("base.group_erp_manager"))
199+
161200
@responses.activate
162201
def test_login_without_kid(self):
163202
"""Test that login works when ID Token has no kid in header"""

0 commit comments

Comments
 (0)