ticketfrei3/backend/tests/conftest.py

129 lines
3.7 KiB
Python
Raw Normal View History

2020-07-07 01:16:23 +00:00
# Copyright (C) 2020 by Thomas Lindner <tom@dl6tom.de>
2020-07-16 10:12:03 +00:00
# Copyright (C) 2020 by Christian Hagenest <c.hagenest@pm.me>
# Copyright (C) 2020 by Martin Rey <martin.rey@mailbox.org>
2020-07-07 01:16:23 +00:00
#
# SPDX-License-Identifier: 0BSD
2020-10-13 08:35:20 +00:00
from urllib.parse import urlparse
2020-07-07 01:16:23 +00:00
from fastapi import FastAPI, status
from fastapi.testclient import TestClient
2020-10-13 08:35:20 +00:00
from pytest import fixture
2020-07-11 16:23:27 +00:00
from kibicara import email
from kibicara.model import Mapping
2020-07-07 01:16:23 +00:00
from kibicara.webapi import router
@fixture(scope="module")
2020-07-07 01:16:23 +00:00
def client():
Mapping.drop_all()
Mapping.create_all()
app = FastAPI()
app.include_router(router, prefix="/api")
2020-07-07 01:16:23 +00:00
return TestClient(app)
@fixture(scope="module")
2020-07-11 16:23:27 +00:00
def monkeymodule():
from _pytest.monkeypatch import MonkeyPatch
mpatch = MonkeyPatch()
yield mpatch
mpatch.undo()
@fixture(scope="module")
2020-07-11 16:23:27 +00:00
def receive_email(monkeymodule):
mailbox = []
def mock_send_email(to, subject, sender="kibicara", body=""):
2020-07-11 16:23:27 +00:00
mailbox.append(dict(to=to, subject=subject, sender=sender, body=body))
def mock_receive_email():
return mailbox.pop()
2020-07-07 01:16:23 +00:00
monkeymodule.setattr(email, "send_email", mock_send_email)
2020-07-11 16:23:27 +00:00
return mock_receive_email
2020-07-07 01:16:23 +00:00
@fixture(scope="module")
2020-07-11 16:23:27 +00:00
def register_token(client, receive_email):
response = client.post(
"/api/admin/register/", json={"email": "user", "password": "password"}
2020-07-11 16:23:27 +00:00
)
assert response.status_code == status.HTTP_202_ACCEPTED
return urlparse(receive_email()["body"]).query.split("=", 1)[1]
2020-07-07 01:16:23 +00:00
@fixture(scope="module")
2020-07-07 01:16:23 +00:00
def register_confirmed(client, register_token):
response = client.post("/api/admin/confirm/{0}".format(register_token))
2020-07-07 01:16:23 +00:00
assert response.status_code == status.HTTP_200_OK
@fixture(scope="module")
2020-07-07 01:16:23 +00:00
def access_token(client, register_confirmed):
response = client.post(
"/api/admin/login/", data={"username": "user", "password": "password"}
2020-07-07 01:16:23 +00:00
)
assert response.status_code == status.HTTP_200_OK
return response.json()["access_token"]
2020-07-07 01:16:23 +00:00
@fixture(scope="module")
2020-07-07 01:16:23 +00:00
def auth_header(access_token):
return {"Authorization": "Bearer {0}".format(access_token)}
2020-07-07 01:16:23 +00:00
@fixture(scope="function")
2020-07-07 01:16:23 +00:00
def hood_id(client, auth_header):
response = client.post("/api/hoods/", json={"name": "hood"}, headers=auth_header)
2020-07-07 01:16:23 +00:00
assert response.status_code == status.HTTP_201_CREATED
hood_id = int(response.headers["Location"])
2020-07-07 01:16:23 +00:00
yield hood_id
client.delete("/api/hoods/{0}".format(hood_id), headers=auth_header)
2020-07-07 01:16:23 +00:00
@fixture(scope="function")
2020-07-07 01:16:23 +00:00
def trigger_id(client, hood_id, auth_header):
response = client.post(
"/api/hoods/{0}/triggers/".format(hood_id),
json={"pattern": "test"},
headers=auth_header,
2020-07-07 01:16:23 +00:00
)
assert response.status_code == status.HTTP_201_CREATED
trigger_id = int(response.headers["Location"])
2020-07-07 01:16:23 +00:00
yield trigger_id
client.delete(
"/api/hoods/{0}/triggers/{1}".format(hood_id, trigger_id), headers=auth_header
2020-07-07 01:16:23 +00:00
)
@fixture(scope="function")
2020-07-07 01:16:23 +00:00
def badword_id(client, hood_id, auth_header):
response = client.post(
"/api/hoods/{0}/badwords/".format(hood_id),
json={"pattern": ""},
2020-10-12 20:47:06 +00:00
headers=auth_header,
2020-07-07 01:16:23 +00:00
)
assert response.status_code == status.HTTP_201_CREATED
badword_id = int(response.headers["Location"])
2020-07-07 01:16:23 +00:00
yield badword_id
client.delete(
"/api/hoods/{0}/badwords/{1}".format(hood_id, badword_id), headers=auth_header
2020-07-07 01:16:23 +00:00
)
@fixture(scope="function")
2020-07-07 01:16:23 +00:00
def test_id(client, hood_id, auth_header):
response = client.post(
"/api/hoods/{0}/test/".format(hood_id), json={}, headers=auth_header
2020-07-07 01:16:23 +00:00
)
assert response.status_code == status.HTTP_201_CREATED
test_id = int(response.headers["Location"])
2020-07-07 01:16:23 +00:00
yield test_id
2020-10-12 20:47:06 +00:00
client.delete(
"/api/hoods/{0}/test/{1}".format(hood_id, test_id), headers=auth_header
2020-10-12 20:47:06 +00:00
)