Skip to content

Commit 5676c86

Browse files
committed
cleanup
1 parent 5c8691d commit 5676c86

File tree

1 file changed

+25
-169
lines changed

1 file changed

+25
-169
lines changed

services/web/server/tests/unit/with_dbs/01/test_groups.py renamed to services/web/server/tests/unit/with_dbs/01/groups/test_groups_handlers_users.py

Lines changed: 25 additions & 169 deletions
Original file line numberDiff line numberDiff line change
@@ -4,84 +4,38 @@
44
# pylint: disable=unused-argument
55
# pylint: disable=unused-variable
66

7-
from collections.abc import AsyncIterator, Callable
7+
from collections.abc import AsyncIterator
88
from contextlib import AsyncExitStack
9-
from copy import deepcopy
10-
from typing import Any
119

1210
import pytest
1311
from aiohttp.test_utils import TestClient
1412
from faker import Faker
15-
from models_library.groups import AccessRightsDict
13+
from models_library.api_schemas_webserver.groups import GroupGet
14+
from models_library.groups import AccessRightsDict, Group
1615
from pytest_simcore.helpers.assert_checks import assert_status
1716
from pytest_simcore.helpers.webserver_login import LoggedUser, NewUser, UserInfoDict
1817
from pytest_simcore.helpers.webserver_parametrizations import (
1918
ExpectedResponse,
2019
standard_role_response,
2120
)
22-
from pytest_simcore.simcore_webserver_groups_fixtures import CreateUserGroupCallable
2321
from servicelib.aiohttp import status
24-
from servicelib.aiohttp.application import create_safe_application
2522
from simcore_postgres_database.models.users import UserRole
2623
from simcore_service_webserver._meta import API_VTAG
27-
from simcore_service_webserver.application_settings import setup_settings
28-
from simcore_service_webserver.db.plugin import setup_db
24+
from simcore_service_webserver.groups._groups_api import (
25+
create_organization,
26+
delete_organization,
27+
)
2928
from simcore_service_webserver.groups._groups_db import (
3029
_DEFAULT_GROUP_OWNER_ACCESS_RIGHTS,
3130
_DEFAULT_GROUP_READ_ACCESS_RIGHTS,
3231
)
33-
from simcore_service_webserver.groups.api import (
34-
auto_add_user_to_groups,
35-
delete_user_group,
36-
)
37-
from simcore_service_webserver.groups.plugin import setup_groups
38-
from simcore_service_webserver.login.plugin import setup_login
39-
from simcore_service_webserver.rest.plugin import setup_rest
32+
from simcore_service_webserver.groups.api import auto_add_user_to_groups
4033
from simcore_service_webserver.security.api import clean_auth_policy_cache
41-
from simcore_service_webserver.security.plugin import setup_security
42-
from simcore_service_webserver.session.plugin import setup_session
43-
from simcore_service_webserver.users.plugin import setup_users
4434
from simcore_service_webserver.utils import gravatar_hash
4535

4636

47-
@pytest.fixture
48-
def client(
49-
event_loop,
50-
aiohttp_client,
51-
app_cfg,
52-
postgres_db,
53-
monkeypatch_setenv_from_app_config: Callable,
54-
) -> TestClient:
55-
cfg = deepcopy(app_cfg)
56-
57-
port = cfg["main"]["port"]
58-
59-
assert cfg["rest"]["version"] == API_VTAG
60-
monkeypatch_setenv_from_app_config(cfg)
61-
62-
# fake config
63-
app = create_safe_application(cfg)
64-
65-
setup_settings(app)
66-
setup_db(app)
67-
setup_session(app)
68-
setup_security(app)
69-
setup_rest(app)
70-
setup_login(app)
71-
setup_users(app)
72-
setup_groups(app)
73-
74-
return event_loop.run_until_complete(
75-
aiohttp_client(app, server_kwargs={"port": port, "host": "localhost"})
76-
)
77-
78-
7937
def _assert_group(group: dict[str, str]):
80-
properties = ["gid", "label", "description", "thumbnail", "accessRights"]
81-
assert all(x in group for x in properties)
82-
access_rights = group["accessRights"]
83-
access_rights_properties = ["read", "write", "delete"]
84-
assert all(x in access_rights for x in access_rights_properties)
38+
return GroupGet.model_validate(group)
8539

8640

8741
def _assert__group_user(
@@ -104,113 +58,6 @@ def _assert__group_user(
10458
assert "gid" in actual_user
10559

10660

107-
@pytest.mark.parametrize(*standard_role_response())
108-
async def test_group_creation_workflow(
109-
client: TestClient,
110-
logged_user: UserInfoDict,
111-
user_role: UserRole,
112-
expected: ExpectedResponse,
113-
):
114-
assert client.app
115-
url = client.app.router["create_group"].url_for()
116-
assert f"{url}" == f"/{API_VTAG}/groups"
117-
118-
new_group = {
119-
"gid": "4564",
120-
"label": "Black Sabbath",
121-
"description": "The founders of Rock'N'Roll",
122-
"thumbnail": "https://www.startpage.com/av/proxy-image?piurl=https%3A%2F%2Fencrypted-tbn0.gstatic.com%2Fimages%3Fq%3Dtbn%3AANd9GcS3pAUISv_wtYDL9Ih4JtUfAWyHj9PkYMlEBGHJsJB9QlTZuuaK%26s&sp=1591105967T00f0b7ff95c7b3bca035102fa1ead205ab29eb6cd95acedcedf6320e64634f0c",
123-
}
124-
125-
resp = await client.post(f"{url}", json=new_group)
126-
data, error = await assert_status(resp, expected.created)
127-
128-
assigned_group = new_group
129-
if not error:
130-
assert isinstance(data, dict)
131-
assigned_group = data
132-
_assert_group(assigned_group)
133-
# we get a new gid and the rest keeps the same
134-
assert assigned_group["gid"] != new_group["gid"]
135-
for prop in ["label", "description", "thumbnail"]:
136-
assert assigned_group[prop] == new_group[prop]
137-
# we get all rights on the group since we are the creator
138-
assert assigned_group["accessRights"] == {
139-
"read": True,
140-
"write": True,
141-
"delete": True,
142-
}
143-
144-
# get the groups and check we are part of this new group
145-
url = client.app.router["list_groups"].url_for()
146-
assert f"{url}" == f"/{API_VTAG}/groups"
147-
148-
resp = await client.get(f"{url}")
149-
data, error = await assert_status(
150-
resp, expected.ok if user_role != UserRole.GUEST else status.HTTP_200_OK
151-
)
152-
if not error and user_role != UserRole.GUEST:
153-
assert len(data["organizations"]) == 1
154-
assert data["organizations"][0] == assigned_group
155-
156-
# check getting one group
157-
url = client.app.router["get_group"].url_for(gid=f"{assigned_group['gid']}")
158-
assert f"{url}" == f"/{API_VTAG}/groups/{assigned_group['gid']}"
159-
resp = await client.get(f"{url}")
160-
data, error = await assert_status(
161-
resp, expected.ok if user_role != UserRole.GUEST else status.HTTP_404_NOT_FOUND
162-
)
163-
if not error:
164-
assert data == assigned_group
165-
166-
# modify the group
167-
modified_group = {"label": "Led Zeppelin"}
168-
url = client.app.router["update_group"].url_for(gid=f"{assigned_group['gid']}")
169-
assert f"{url}" == f"/{API_VTAG}/groups/{assigned_group['gid']}"
170-
resp = await client.patch(f"{url}", json=modified_group)
171-
data, error = await assert_status(resp, expected.ok)
172-
if not error:
173-
assert data != assigned_group
174-
_assert_group(data)
175-
assigned_group.update(**modified_group)
176-
assert data == assigned_group
177-
# check getting the group returns the newly modified group
178-
url = client.app.router["get_group"].url_for(gid=f"{assigned_group['gid']}")
179-
assert f"{url}" == f"/{API_VTAG}/groups/{assigned_group['gid']}"
180-
resp = await client.get(f"{url}")
181-
data, error = await assert_status(
182-
resp, expected.ok if user_role != UserRole.GUEST else status.HTTP_404_NOT_FOUND
183-
)
184-
if not error:
185-
_assert_group(data)
186-
assert data == assigned_group
187-
188-
# delete the group
189-
url = client.app.router["delete_group"].url_for(gid=f"{assigned_group['gid']}")
190-
assert f"{url}" == f"/{API_VTAG}/groups/{assigned_group['gid']}"
191-
resp = await client.delete(f"{url}")
192-
data, error = await assert_status(resp, expected.no_content)
193-
if not error:
194-
assert not data
195-
196-
# check deleting the same group again fails
197-
url = client.app.router["delete_group"].url_for(gid=f"{assigned_group['gid']}")
198-
assert f"{url}" == f"/{API_VTAG}/groups/{assigned_group['gid']}"
199-
resp = await client.delete(f"{url}")
200-
data, error = await assert_status(resp, expected.not_found)
201-
202-
# check getting the group fails
203-
url = client.app.router["get_group"].url_for(gid=f"{assigned_group['gid']}")
204-
assert f"{url}" == f"/{API_VTAG}/groups/{assigned_group['gid']}"
205-
resp = await client.get(f"{url}")
206-
data, error = await assert_status(
207-
resp,
208-
expected.not_found
209-
if user_role != UserRole.GUEST
210-
else status.HTTP_404_NOT_FOUND,
211-
)
212-
213-
21461
@pytest.mark.parametrize(*standard_role_response())
21562
async def test_add_remove_users_from_group(
21663
client: TestClient,
@@ -428,6 +275,7 @@ async def test_group_access_rights(
428275
params = {"uid": user["id"]} if i % 2 == 0 else {"email": user["email"]}
429276
resp = await client.post(f"{add_group_user_url}", json=params)
430277
data, error = await assert_status(resp, expected.no_content)
278+
431279
# 3. user 1 shall be a manager
432280
patch_group_user_url = client.app.router["update_group_user"].url_for(
433281
gid=f"{assigned_group['gid']}", uid=f"{users[0]['id']}"
@@ -439,6 +287,7 @@ async def test_group_access_rights(
439287
params = {"accessRights": {"read": True, "write": True, "delete": False}}
440288
resp = await client.patch(f"{patch_group_user_url}", json=params)
441289
data, error = await assert_status(resp, expected.ok)
290+
442291
# 4. user 2 shall be a member
443292
patch_group_user_url = client.app.router["update_group_user"].url_for(
444293
gid=f"{assigned_group['gid']}", uid=f"{users[1]['id']}"
@@ -462,6 +311,7 @@ async def test_group_access_rights(
462311
},
463312
)
464313
await assert_status(resp, expected.ok)
314+
465315
# check as a manager I can remove user 2
466316
delete_group_user_url = client.app.router["delete_group_user"].url_for(
467317
gid=f"{assigned_group['gid']}", uid=f"{users[1]['id']}"
@@ -472,9 +322,11 @@ async def test_group_access_rights(
472322
)
473323
resp = await client.delete(f"{delete_group_user_url}")
474324
data, error = await assert_status(resp, expected.no_content)
325+
475326
# as a manager I can add user 2 again
476327
resp = await client.post(f"{add_group_user_url}", json={"uid": users[1]["id"]})
477328
data, error = await assert_status(resp, expected.no_content)
329+
478330
# as a manager I cannot delete the group
479331
url = client.app.router["delete_group"].url_for(gid=f"{assigned_group['gid']}")
480332
resp = await client.delete(f"{url}")
@@ -491,6 +343,7 @@ async def test_group_access_rights(
491343
},
492344
)
493345
await assert_status(resp, expected.ok)
346+
494347
# as a member I cannot remove user 1
495348
delete_group_user_url = client.app.router["delete_group_user"].url_for(
496349
gid=f"{assigned_group['gid']}", uid=f"{users[0]['id']}"
@@ -501,9 +354,11 @@ async def test_group_access_rights(
501354
)
502355
resp = await client.delete(f"{delete_group_user_url}")
503356
data, error = await assert_status(resp, status.HTTP_403_FORBIDDEN)
357+
504358
# as a member I cannot add user 1
505359
resp = await client.post(f"{add_group_user_url}", json={"uid": users[0]["id"]})
506360
data, error = await assert_status(resp, status.HTTP_403_FORBIDDEN)
361+
507362
# as a member I cannot delete the grouop
508363
url = client.app.router["delete_group"].url_for(gid=f"{assigned_group['gid']}")
509364
resp = await client.delete(f"{url}")
@@ -553,21 +408,22 @@ async def test_add_user_gets_added_to_group(
553408
async def group_where_logged_user_is_the_owner(
554409
client: TestClient,
555410
logged_user: UserInfoDict,
556-
create_user_group: CreateUserGroupCallable,
557-
) -> AsyncIterator[dict[str, Any]]:
411+
) -> AsyncIterator[Group]:
558412
assert client.app
559-
group = await create_user_group(
413+
group, _ = await create_organization(
560414
app=client.app,
561415
user_id=logged_user["id"],
562-
new_group={
416+
new_group_values={
563417
"gid": "6543",
564418
"label": f"this is user {logged_user['id']} group",
565419
"description": f"user {logged_user['email']} is the owner of that one",
566420
"thumbnail": None,
567421
},
568422
)
423+
569424
yield group
570-
await delete_user_group(client.app, logged_user["id"], group["gid"])
425+
426+
await delete_organization(client.app, user_id=logged_user["id"], group_id=group.gid)
571427

572428

573429
@pytest.mark.acceptance_test(
@@ -577,12 +433,12 @@ async def group_where_logged_user_is_the_owner(
577433
async def test_adding_user_to_group_with_upper_case_email(
578434
client: TestClient,
579435
user_role: UserRole,
580-
group_where_logged_user_is_the_owner: dict[str, str],
436+
group_where_logged_user_is_the_owner: Group,
581437
faker: Faker,
582438
):
583439
assert client.app
584440
url = client.app.router["add_group_user"].url_for(
585-
gid=f"{group_where_logged_user_is_the_owner['gid']}"
441+
gid=f"{group_where_logged_user_is_the_owner.gid}"
586442
)
587443
# adding a user to group with the email in capital letters
588444
# Tests 🐛 https://github.com/ITISFoundation/osparc-issues/issues/812

0 commit comments

Comments
 (0)