Skip to content

Commit 81b260b

Browse files
committed
acceptance tests
1 parent 9faefc3 commit 81b260b

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

services/web/server/src/simcore_service_webserver/users/_users_rest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,14 +153,15 @@ async def get_user(request: web.Request) -> web.Response:
153153
return envelope_json_response(UserGet.from_model(user))
154154

155155

156-
@routes.get(f"/{API_VTAG}/users:search", name="search_users")
156+
@routes.post(f"/{API_VTAG}/users:search", name="search_users")
157157
@login_required
158158
@permission_required("user.read")
159159
@_handle_users_exceptions
160160
async def search_users(request: web.Request) -> web.Response:
161161
req_ctx = UsersRequestContext.model_validate(request)
162162
assert req_ctx.product_name # nosec
163163

164+
# NOTE: Decided for body instead of query parameters because it is easier for the front-end
164165
search_params = await parse_request_body_as(UsersSearch, request)
165166

166167
found = await _users_service.search_public_users(

services/web/server/tests/unit/with_dbs/03/test_users.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,14 @@
1818
from aiopg.sa.connection import SAConnection
1919
from faker import Faker
2020
from models_library.api_schemas_webserver.auth import AccountRequestInfo
21-
from models_library.api_schemas_webserver.users import MyProfileGet, UserForAdminGet
21+
from models_library.api_schemas_webserver.users import (
22+
MyProfileGet,
23+
UserForAdminGet,
24+
UserGet,
25+
)
2226
from models_library.generics import Envelope
2327
from psycopg2 import OperationalError
28+
from pydantic import TypeAdapter
2429
from pytest_simcore.helpers.assert_checks import assert_status
2530
from pytest_simcore.helpers.faker_factories import (
2631
DEFAULT_TEST_PASSWORD,
@@ -54,6 +59,40 @@ def app_environment(
5459
)
5560

5661

62+
@pytest.mark.parametrize("user_role", [UserRole.USER])
63+
async def test_get_and_search_public_users(
64+
user: UserInfoDict,
65+
logged_user: UserInfoDict,
66+
client: TestClient,
67+
user_role: UserRole,
68+
):
69+
assert client.app
70+
assert user_role == logged_user["role"]
71+
other_user = user
72+
73+
assert other_user["id"] != logged_user["id"]
74+
75+
# GET user
76+
url = client.app.router["get_user"].url_for(user_id=f'{other_user["id"]}')
77+
resp = await client.get(f"{url}")
78+
data, _ = await assert_status(resp, status.HTTP_200_OK)
79+
80+
got = UserGet.model_validate(data)
81+
assert got.user_id == other_user["id"]
82+
assert got.user_name == other_user["name"]
83+
84+
# SEARCH user
85+
partial_email = other_user["email"][:-5]
86+
url = client.app.router["search_users"].url_for().with_query(match=partial_email)
87+
resp = await client.post(f"{url}")
88+
data, _ = await assert_status(resp, status.HTTP_200_OK)
89+
90+
found = TypeAdapter(list[UserGet]).validate_python(data)
91+
assert found
92+
assert len(found) == 1
93+
assert found[0] == got
94+
95+
5796
@pytest.mark.parametrize(
5897
"user_role,expected",
5998
[

0 commit comments

Comments
 (0)