mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
+ Mounted static files (at web/html) to /static. + Added AURWEB_VERSION to aurweb.config (this is used around HTML to refer back to aurweb's release on git.archlinux.org), so we need it easily accessible in the Python codebase. + Implemented basic Jinja2 partials to put together whole aurweb pages. This may be missing some things currently and is a WIP until this set is ready to be merged. + Added config [options] aurwebdir = YOUR_AUR_ROOT; this configuration option should specify the root directory of the aurweb project. It is used by various parts of the FastAPI codebase to target project directories. Added routes via aurweb.routers.html: * POST /language: Set your session language. * GET /favicon.ico: Redirect to /static/images/favicon.ico. * Some browsers always look for $ROOT/favicon.ico to get an icon for the page being loaded, regardless of a specified "shortcut icon" given in a <link> directive. * GET /: Home page; WIP. * Updated aurweb.routers.html.language passes query parameters to its next redirection. When calling aurweb.templates.render_template, the context passed should be formed via the aurweb.templates.make_context. See aurweb.routers.html.index for an example of this. Signed-off-by: Kevin Morris <kevr@0cost.org>
69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
import urllib.parse
|
|
|
|
from http import HTTPStatus
|
|
|
|
import pytest
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from aurweb.asgi import app
|
|
from aurweb.testing import setup_test_db
|
|
|
|
client = TestClient(app)
|
|
|
|
|
|
@pytest.fixture
|
|
def setup():
|
|
setup_test_db("Users", "Session")
|
|
|
|
|
|
def test_index():
|
|
""" Test the index route at '/'. """
|
|
# Use `with` to trigger FastAPI app events.
|
|
with client as req:
|
|
response = req.get("/")
|
|
assert response.status_code == int(HTTPStatus.OK)
|
|
|
|
|
|
def test_favicon():
|
|
""" Test the favicon route at '/favicon.ico'. """
|
|
response1 = client.get("/static/images/favicon.ico")
|
|
response2 = client.get("/favicon.ico")
|
|
assert response1.status_code == int(HTTPStatus.OK)
|
|
assert response1.content == response2.content
|
|
|
|
|
|
def test_language():
|
|
""" Test the language post route at '/language'. """
|
|
post_data = {
|
|
"set_lang": "de",
|
|
"next": "/"
|
|
}
|
|
with client as req:
|
|
response = req.post("/language", data=post_data)
|
|
assert response.status_code == int(HTTPStatus.SEE_OTHER)
|
|
|
|
|
|
def test_language_invalid_next():
|
|
""" Test an invalid next route at '/language'. """
|
|
post_data = {
|
|
"set_lang": "de",
|
|
"next": "/BLAHBLAHFAKE"
|
|
}
|
|
with client as req:
|
|
response = req.post("/language", data=post_data)
|
|
assert response.status_code == int(HTTPStatus.BAD_REQUEST)
|
|
|
|
def test_language_query_params():
|
|
""" Test the language post route with query params. """
|
|
next = urllib.parse.quote_plus("/")
|
|
post_data = {
|
|
"set_lang": "de",
|
|
"next": "/",
|
|
"q": f"next={next}"
|
|
}
|
|
q = post_data.get("q")
|
|
with client as req:
|
|
response = req.post("/language", data=post_data)
|
|
assert response.headers.get("location") == f"/?{q}"
|
|
assert response.status_code == int(HTTPStatus.SEE_OTHER)
|