tests: query generator
This commit is contained in:
parent
29245e5c13
commit
d3d9316741
5 changed files with 47 additions and 67 deletions
|
|
@ -1,4 +1,5 @@
|
|||
from typing import AsyncGenerator
|
||||
from itertools import combinations
|
||||
|
||||
import pytest
|
||||
from httpx import AsyncClient, ASGITransport
|
||||
|
|
@ -95,6 +96,40 @@ def _seed(db):
|
|||
group_model.user_rel.append(user_model)
|
||||
db.commit()
|
||||
|
||||
|
||||
def generate_query_and_status(params) -> list[tuple[str, int]]:
|
||||
possible_values = [0, -1, 42, "banana", ""]
|
||||
|
||||
defaults = [f"{param}=1" for param in params]
|
||||
|
||||
# Missing params
|
||||
query_list = [
|
||||
"&".join(combo)
|
||||
for r in range(len(defaults) + 1)
|
||||
for combo in combinations(defaults, r)
|
||||
]
|
||||
|
||||
# Complete query as default for invalid checks
|
||||
default_query = query_list.pop(-1)
|
||||
|
||||
# Checks for each param being invalid
|
||||
for param in params:
|
||||
for value in possible_values:
|
||||
new_value = f"&{param}={value}"
|
||||
query_list.append(default_query.replace(f"{param}=1", new_value))
|
||||
|
||||
query_and_status = []
|
||||
|
||||
# Assign expected status
|
||||
for query in query_list:
|
||||
# ID 42 is used to represent a non-existent entry. So it should 404.
|
||||
status = 404 if "42" in query else 422
|
||||
# Remove leading "&" if present
|
||||
query = query if len(query) > 1 and query[0] != "&" else query[1:]
|
||||
query_and_status.append((query, status))
|
||||
|
||||
return query_and_status
|
||||
|
||||
# # Produces a text file with method and path for every endpoint in the API
|
||||
# from fastapi.routing import APIRoute
|
||||
#
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from src.user.models import User
|
|||
from src.organisation.models import Organisation as Org
|
||||
from src.iam.models import Group
|
||||
|
||||
from .conftest import default_client, db_session
|
||||
from .conftest import default_client, db_session, generate_query_and_status
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
|
|
@ -141,22 +141,7 @@ async def test_get_group_permissions_success(default_client: AsyncClient):
|
|||
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("org_id=42&group_id=1", 404), # Non-exists org, valid group
|
||||
("org_id=banana&group_id=1", 422), # Invalid org, valid group
|
||||
("org_id=&group_id=1", 422), # Blank org, valid group
|
||||
("org_id=-1&group_id=1", 422), # Negative org, valid group
|
||||
("group_id=1", 422), # Only group
|
||||
("org_id=1&group_id=2", 404), # Group/Org mismatch
|
||||
("org_id=2&group_id=1", 404), # Group/Org mismatch
|
||||
("", 422), # Blank query
|
||||
("org_id=&group_id=", 422), # Both blank
|
||||
("org_id=1&group_id=42", 404), # Valid org, non-exists group
|
||||
("org_id=1&group_id=banana", 422), # Valid org, invalid group
|
||||
("org_id=1&group_id=", 422), # Valid org, blank group
|
||||
("org_id=1&group_id=-1", 422), # Valid org, negative group
|
||||
("org_id=1", 422), # Only org
|
||||
],
|
||||
generate_query_and_status(["group_id", "org_id"])
|
||||
)
|
||||
@pytest.mark.anyio
|
||||
async def test_get_group_permissions_status_checks(default_client: AsyncClient, db_session, query: str, expected_status: int):
|
||||
|
|
@ -199,20 +184,7 @@ async def test_get_group_users_success(default_client: AsyncClient):
|
|||
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("org_id=2&group_id=1", 404), # Non-exists org, valid group
|
||||
("org_id=banana&group_id=1", 422), # Invalid org, valid group
|
||||
("org_id=&group_id=1", 422), # Blank org, valid group
|
||||
("org_id=-1&group_id=1", 422), # Negative org, valid group
|
||||
("group_id=1", 422), # Only group
|
||||
("", 422), # Blank query
|
||||
("org_id=&group_id=", 422), # Both blank
|
||||
("org_id=1&group_id=2", 404), # Valid org, non-exists group
|
||||
("org_id=1&group_id=banana", 422), # Valid org, invalid group
|
||||
("org_id=1&group_id=", 422), # Valid org, blank group
|
||||
("org_id=1&group_id=-1", 422), # Valid org, negative group
|
||||
("org_id=1", 422), # Only org
|
||||
],
|
||||
generate_query_and_status(["group_id", "org_id"])
|
||||
)
|
||||
@pytest.mark.anyio
|
||||
async def test_get_group_users_status_checks(default_client: AsyncClient, query: str, expected_status: int):
|
||||
|
|
@ -423,13 +395,7 @@ async def test_get_permissions_success(default_client: AsyncClient):
|
|||
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("org_id=42", 404), # Non-exists org
|
||||
("org_id=banana", 422), # Invalid org
|
||||
("org_id=", 422), # Blank org
|
||||
("org_id=-1", 422), # Negative org
|
||||
("", 422), # Blank query
|
||||
],
|
||||
generate_query_and_status(["org_id"])
|
||||
)
|
||||
@pytest.mark.anyio
|
||||
async def test_get_permissions_status_checks(default_client: AsyncClient, query: str, expected_status: int):
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from httpx import AsyncClient
|
|||
|
||||
from src.organisation.models import Organisation, OrgUsers
|
||||
from src.user.models import User
|
||||
from .conftest import default_client
|
||||
from .conftest import default_client, generate_query_and_status
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
|
|
@ -25,11 +25,7 @@ async def test_get_org_success(default_client: AsyncClient):
|
|||
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("org_id=2", 404),
|
||||
("org_id=banana", 422),
|
||||
("", 422),
|
||||
],
|
||||
generate_query_and_status(["org_id"])
|
||||
)
|
||||
@pytest.mark.anyio
|
||||
async def test_get_org_status_checks(default_client: AsyncClient, query: str, expected_status: int):
|
||||
|
|
@ -166,11 +162,7 @@ async def test_get_org_users_success(default_client: AsyncClient):
|
|||
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("org_id=2", 404),
|
||||
("org_id=banana", 422),
|
||||
("", 422),
|
||||
],
|
||||
generate_query_and_status(["org_id"])
|
||||
)
|
||||
@pytest.mark.anyio
|
||||
async def test_get_org_users_status_checks(default_client: AsyncClient, query: str, expected_status: int):
|
||||
|
|
@ -278,11 +270,7 @@ async def test_get_org_groups_success(default_client: AsyncClient):
|
|||
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("org_id=2", 404),
|
||||
("org_id=banana", 422),
|
||||
("", 422),
|
||||
],
|
||||
generate_query_and_status(["org_id"])
|
||||
)
|
||||
@pytest.mark.anyio
|
||||
async def test_get_org_groups_status_checks(default_client: AsyncClient, query: str, expected_status: int):
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
import pytest
|
||||
from httpx import AsyncClient
|
||||
|
||||
from .conftest import default_client
|
||||
from .conftest import default_client, generate_query_and_status
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
|
|
@ -20,11 +20,7 @@ async def test_get_services_success(default_client: AsyncClient):
|
|||
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("org_id=2", 404),
|
||||
("org_id=banana", 422),
|
||||
("", 422),
|
||||
],
|
||||
generate_query_and_status(["org_id"])
|
||||
)
|
||||
@pytest.mark.anyio
|
||||
async def test_get_services_status_checks(default_client: AsyncClient, query: str, expected_status: int):
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
import pytest
|
||||
from httpx import AsyncClient
|
||||
|
||||
from .conftest import default_client
|
||||
from .conftest import default_client, generate_query_and_status
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_get_self_db_success(default_client: AsyncClient):
|
||||
|
|
@ -37,12 +37,7 @@ async def test_get_user_success(default_client: AsyncClient):
|
|||
@pytest.mark.anyio
|
||||
@pytest.mark.parametrize(
|
||||
"query, expected_status",
|
||||
[
|
||||
("user_id=1", 200),
|
||||
("user_id=2", 404),
|
||||
("user_id=banana", 422),
|
||||
("", 422),
|
||||
],
|
||||
generate_query_and_status(["user_id"])
|
||||
)
|
||||
async def test_get_user_status_checks(default_client: AsyncClient, query: str, expected_status: int):
|
||||
resp = await default_client.get(f"/user/?{query}")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue