From a81bce06e42230c4c66c8427a4634d93b818e5f1 Mon Sep 17 00:00:00 2001 From: Didier 'OdyX' Raboud Date: Fri, 13 Sep 2024 17:11:27 +0200 Subject: [PATCH] [IMP] auth_oidc: test group assignment/removal --- auth_oidc/demo/local_keycloak.xml | 5 +++ auth_oidc/tests/test_auth_oidc_auth_code.py | 39 +++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/auth_oidc/demo/local_keycloak.xml b/auth_oidc/demo/local_keycloak.xml index 92588dc952..8ba8183e8b 100644 --- a/auth_oidc/demo/local_keycloak.xml +++ b/auth_oidc/demo/local_keycloak.xml @@ -22,4 +22,9 @@ 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"""