From be93598b2d78f2d68f4084dfde4500ac9fb45171 Mon Sep 17 00:00:00 2001 From: Anthony LC Date: Thu, 4 Jul 2024 16:40:32 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=B1(demo)=20create=20dev=20users=20and?= =?UTF-8?q?=20make=20them=20doc=20accesses?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To be able to test with dummy data, we need to create our dev users from the demo and to give them access to the docs. The sub is the unicity of the user for our oidc provider, so we need to know the sub to be able to create correctly the user, it is why we set the sub as the email of the user in the realm.json file. --- CHANGELOG.md | 4 +++ docker/auth/realm.json | 15 +++++++++ src/backend/demo/defaults.py | 16 ++++++++++ .../demo/management/commands/create_demo.py | 32 +++++++++++++++++++ .../demo/tests/test_commands_create_demo.py | 10 ++++++ 5 files changed, 77 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 812d4639..85a745ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ and this project adheres to ## [Unreleased] +## Added + +- 🤡(demo) generate dummy documents on dev users #120 + ## [1.0.0] - 2024-07-02 ## Added diff --git a/docker/auth/realm.json b/docker/auth/realm.json index c8b72d6c..cee70d21 100644 --- a/docker/auth/realm.json +++ b/docker/auth/realm.json @@ -1339,6 +1339,21 @@ "jsonType.label": "String" } }, + { + "id": "qb109597-e31e-46d7-7844-62e5fcf32ac8", + "name": "email sub", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": false, + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "sub", + "jsonType.label": "String" + } + }, { "id": "61c135e5-2447-494b-bc70-9612f383be27", "name": "email verified", diff --git a/src/backend/demo/defaults.py b/src/backend/demo/defaults.py index c7d17451..4f6fb5a2 100644 --- a/src/backend/demo/defaults.py +++ b/src/backend/demo/defaults.py @@ -5,3 +5,19 @@ NB_OBJECTS = { "docs": 50, "max_users_per_document": 50, } + +DEV_USERS = [ + { + "username": "impress", + "email": "impress@impress.world", + }, + { + "username": "user-e2e-webkit", + "email": "user@webkit.e2e", + }, + { + "username": "user-e2e-firefox", + "email": "user@firefox.e2e", + }, + {"username": "user-e2e-chromium", "email": "user@chromium.e2e"}, +] diff --git a/src/backend/demo/management/commands/create_demo.py b/src/backend/demo/management/commands/create_demo.py index 9229e442..c32d046d 100644 --- a/src/backend/demo/management/commands/create_demo.py +++ b/src/backend/demo/management/commands/create_demo.py @@ -152,6 +152,38 @@ def create_demo(stdout): ) queue.flush() + with Timeit(stdout, "Creating development users"): + for dev_user in defaults.DEV_USERS: + queue.push( + models.User( + admin_email=dev_user["email"], + email=dev_user["email"], + sub=dev_user["email"], + password="!", + is_superuser=False, + is_active=True, + is_staff=False, + language=random.choice(settings.LANGUAGES)[0], + ) + ) + + queue.flush() + + with Timeit(stdout, "Creating docs accesses on development users"): + for dev_user in defaults.DEV_USERS: + docs_ids = list(models.Document.objects.values_list("id", flat=True)) + user_id = models.User.objects.get(email=dev_user["email"]).id + + for doc_id in docs_ids: + role = random.choice(models.RoleChoices.choices) + queue.push( + models.DocumentAccess( + document_id=doc_id, user_id=user_id, role=role[0] + ) + ) + + queue.flush() + with Timeit(stdout, "Creating Template"): with open( file="demo/data/template/code.txt", mode="r", encoding="utf-8" diff --git a/src/backend/demo/tests/test_commands_create_demo.py b/src/backend/demo/tests/test_commands_create_demo.py index 631f2fea..66f227bc 100644 --- a/src/backend/demo/tests/test_commands_create_demo.py +++ b/src/backend/demo/tests/test_commands_create_demo.py @@ -19,3 +19,13 @@ def test_commands_create_demo(): assert models.User.objects.count() >= 50 assert models.Document.objects.count() >= 50 assert models.DocumentAccess.objects.count() > 50 + + # assert dev users have doc accesses + user = models.User.objects.get(email="impress@impress.world") + assert models.DocumentAccess.objects.filter(user=user).exists() + user = models.User.objects.get(email="user@webkit.e2e") + assert models.DocumentAccess.objects.filter(user=user).exists() + user = models.User.objects.get(email="user@firefox.e2e") + assert models.DocumentAccess.objects.filter(user=user).exists() + user = models.User.objects.get(email="user@chromium.e2e") + assert models.DocumentAccess.objects.filter(user=user).exists()