diff --git a/auth_oidc/demo/local_keycloak.xml b/auth_oidc/demo/local_keycloak.xml index 92588dc952..8a2f97a404 100644 --- a/auth_oidc/demo/local_keycloak.xml +++ b/auth_oidc/demo/local_keycloak.xml @@ -17,9 +17,20 @@ name="jwks_uri" >http://localhost:8080/auth/realms/master/protocol/openid-connect/certs - + token['name'] == 'test' + + + + 'erp_manager' in token['groups'] + diff --git a/auth_oidc/tests/test_auth_oidc_auth_code.py b/auth_oidc/tests/test_auth_oidc_auth_code.py index fbfdf87e06..8115898cc5 100644 --- a/auth_oidc/tests/test_auth_oidc_auth_code.py +++ b/auth_oidc/tests/test_auth_oidc_auth_code.py @@ -14,6 +14,7 @@ import odoo from odoo.exceptions import AccessDenied, ValidationError +from odoo.fields import Command from odoo.tests import common from odoo.addons.website.tools import MockRequest as _MockRequest @@ -149,6 +150,44 @@ def test_login(self): self.assertEqual(token, "42") self.assertEqual(login, user.login) + @responses.activate + def test_manager_login(self): + """Test that login works and assigns the user to a manager group""" + user = self._prepare_login_test_user() + self._prepare_login_test_responses( + id_token_body={"user_id": user.login, "groups": ["erp_manager"]} + ) + + params = {"state": json.dumps({})} + with MockRequest(self.env): + db, login, token = self.env["res.users"].auth_oauth( + self.provider_rec.id, + params, + ) + self.assertTrue(user.has_group("base.group_erp_manager")) + + @responses.activate + def test_ex_manager_login(self): + """Test that login works and de-assigns the user from a manager group""" + user = self._prepare_login_test_user() + # Make them a manager + user.write( + {"groups_id": [Command.link(self.env.ref("base.group_erp_manager").id)]} + ) + self.assertTrue(user.has_group("base.group_erp_manager")) + + self._prepare_login_test_responses( + id_token_body={"user_id": user.login, "groups": ["not_erp_manager"]} + ) + + params = {"state": json.dumps({})} + with MockRequest(self.env): + db, login, token = self.env["res.users"].auth_oauth( + self.provider_rec.id, + params, + ) + self.assertFalse(user.has_group("base.group_erp_manager")) + @responses.activate def test_login_without_kid(self): """Test that login works when ID Token has no kid in header"""