| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- from uuid import uuid4
- from httpx import AsyncClient
- import pytest
- from sqlalchemy import select
- from sqlalchemy.orm import Session
- from app.main import app
- from app.models import Project, Slot, SlotTemplate
- from app.tests.conftest import default_slot_id, default_template_id, default_tag_id
- async def test_create_template_fail(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- ):
- url = app.url_path_for("create_template", project_id=default_public_project.id)
- response = await client.post(url, json={"title": "1st template"})
- assert response.status_code == 401
- response = await client.post(url, json={}, headers=default_user_headers)
- assert response.status_code == 422
- url = app.url_path_for("create_template", project_id=uuid4())
- response = await client.post(
- url, json={"title": "1st template"}, headers=default_user_headers
- )
- assert response.status_code == 404
- @pytest.mark.parametrize(
- "payload",
- [
- {"title": "1st template"},
- {"title": "1𝖘ҭ ṥ٥ι𝙪𝓉ìóη", "place": "echo"},
- {"title": "1st template", "responsible_contact": "echo"},
- {"title": "1st template", "description": "&é'(-è_çecho"},
- {"title": "1st template", "place": "3", "description": "&é'(-è_çecho"},
- ],
- )
- async def test_create_template(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- payload: dict,
- ):
- url = app.url_path_for("create_template", project_id=default_public_project.id)
- response = await client.post(url, json=payload, headers=default_user_headers)
- assert response.status_code == 200
- template = session.get(SlotTemplate, response.json()["id"])
- assert template is not None
- for k in ["title", "description", "place", "responsible_contact"]:
- val = template.__getattribute__(k)
- if k in payload:
- assert val == payload[k]
- else:
- assert val == ""
- async def test_update_template_fail(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- ):
- payload = {"title": "1st template"}
- project = session.get(Project, default_public_project.id)
- assert project is not None
- template_id = project.templates[0].id
- url = app.url_path_for(
- "update_template", project_id=default_public_project.id, template_id="12"
- )
- response = await client.post(url, json=payload)
- assert response.status_code == 401
- response = await client.post(url, json=payload, headers=default_user_headers)
- assert response.status_code == 422
- url = app.url_path_for(
- "update_template", project_id=default_public_project.id, template_id=uuid4()
- )
- response = await client.post(url, json=payload, headers=default_user_headers)
- assert response.status_code == 404
- url = app.url_path_for(
- "update_template", project_id=uuid4(), template_id=template_id
- )
- response = await client.post(url, json=payload, headers=default_user_headers)
- assert response.status_code == 404
- @pytest.mark.parametrize(
- "code,payload",
- [
- (422, {"title": [1.001, 2]}),
- (422, {"responsible_contact": {"t": None}}),
- (422, {"place": [1, 2]}),
- (422, {"tags": ["1", "2"]}),
- # (422, {"slots": "1"}),
- (400, {"tags": [default_slot_id]}),
- ],
- )
- async def test_update_template_fail_payload_validation(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- payload: dict,
- code: int,
- ):
- url = app.url_path_for(
- "update_template",
- project_id=default_public_project.id,
- template_id=default_template_id,
- )
- response = await client.post(url, json=payload, headers=default_user_headers)
- assert response.status_code == code
- @pytest.mark.parametrize(
- "payload",
- [
- {"title": "1st template"},
- {"title": "1st template", "place": "echo"},
- {"title": "1st template", "responsible_contact": "echo"},
- {"title": "1st template", "description": "&é'(-è_çecho"},
- {
- "title": "1st template",
- "place": "Ḽơᶉëᶆ ȋṕšᶙṁ",
- "description": "&é'(-è_çecho",
- },
- {"title": "1st template", "place": "3", "description": "&é'(-è_çecho"},
- ],
- )
- async def test_update_template(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- payload: dict,
- ):
- url = app.url_path_for(
- "update_template",
- project_id=default_public_project.id,
- template_id=default_template_id,
- )
- response = await client.post(url, json=payload, headers=default_user_headers)
- assert response.status_code == 200
- template = session.get(SlotTemplate, default_template_id)
- assert template is not None
- for k in ["title", "description", "place", "responsible_contact"]:
- val = template.__getattribute__(k)
- if k in payload:
- assert val == payload[k]
- else:
- assert val == ""
- async def test_update_template_lists(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- ):
- url = app.url_path_for(
- "update_template",
- project_id=default_public_project.id,
- template_id=default_template_id,
- )
- payload = {"tags": [default_tag_id]}
- response = await client.post(url, json=payload, headers=default_user_headers)
- assert response.status_code == 200
- template = session.get(SlotTemplate, default_template_id)
- assert template is not None
- assert len(template.tags) == 1
- assert template.tags[0].id == default_tag_id
- response = await client.post(url, json={"tags": []}, headers=default_user_headers)
- assert response.status_code == 200
- session.refresh(template)
- assert len(template.tags) == 0
- async def test_delete_template_fail(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- ):
- # Proper deletion
- project_id = default_public_project.id
- # no authent
- url = app.url_path_for(
- "delete_template", project_id=project_id, template_id=default_template_id
- )
- response = await client.delete(url)
- assert response.status_code == 401
- # invalid tag
- url = app.url_path_for(
- "delete_template", project_id=project_id, template_id="default_tag_id"
- )
- response = await client.delete(url, headers=default_user_headers)
- assert response.status_code == 422
- # invalid project_id
- url = app.url_path_for(
- "delete_template", project_id="ded", template_id=default_template_id
- )
- response = await client.delete(url, headers=default_user_headers)
- assert response.status_code == 422
- async def test_delete_template(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- ):
- # Proper deletion
- url = app.url_path_for(
- "delete_template",
- project_id=default_public_project.id,
- template_id=default_template_id,
- )
- response = await client.delete(url, headers=default_user_headers)
- assert response.status_code == 200
- result = session.execute(
- select(SlotTemplate).where(SlotTemplate.id == default_tag_id)
- )
- slot = result.scalars().first()
- assert slot is None
- # can delete random uuid
- url = app.url_path_for(
- "delete_tag", project_id=default_public_project.id, tag_id=uuid4()
- )
- response = await client.delete(url, headers=default_user_headers)
- assert response.status_code == 200
- async def test_delete_template_not_slot(
- client: AsyncClient,
- default_user_headers: dict,
- session: Session,
- default_public_project: Project,
- ):
- # Proper deletion
- url = app.url_path_for(
- "delete_template",
- project_id=default_public_project.id,
- template_id=default_template_id,
- )
- slot = session.get(Slot, default_slot_id)
- assert slot is not None
- slot.template_id = default_template_id
- session.commit()
- response = await client.delete(url, headers=default_user_headers)
- assert response.status_code == 200
- slot = session.get(Slot, default_slot_id)
- assert slot is not None
|