diff --git a/templates/partials/archdev-navbar.html b/templates/partials/archdev-navbar.html index 13459e1a..9a3ba780 100644 --- a/templates/partials/archdev-navbar.html +++ b/templates/partials/archdev-navbar.html @@ -7,6 +7,11 @@ {% endif %}
  • {% trans %}Packages{% endtrans %}
  • {% if request.user.is_authenticated() %} +
  • + + {% trans %}Requests{% endtrans %} + +
  • {% if request.user.is_trusted_user() or request.user.is_developer() %}
  • diff --git a/test/test_html.py b/test/test_html.py new file mode 100644 index 00000000..562d6a63 --- /dev/null +++ b/test/test_html.py @@ -0,0 +1,99 @@ +""" A test suite used to test HTML renders in different cases. """ +from http import HTTPStatus + +import pytest + +from fastapi.testclient import TestClient + +from aurweb import asgi, db +from aurweb.models.account_type import TRUSTED_USER_ID, USER_ID, AccountType +from aurweb.models.user import User +from aurweb.testing import setup_test_db +from aurweb.testing.html import parse_root +from aurweb.testing.requests import Request + + +@pytest.fixture(autouse=True) +def setup(): + setup_test_db(User.__tablename__) + + +@pytest.fixture +def client() -> TestClient: + yield TestClient(app=asgi.app) + + +@pytest.fixture +def user() -> User: + user_type = db.query(AccountType, AccountType.ID == USER_ID).first() + with db.begin(): + user = db.create(User, Username="test", Email="test@example.org", + Passwd="testPassword", AccountType=user_type) + yield user + + +@pytest.fixture +def trusted_user(user: User) -> User: + tu_type = db.query(AccountType, + AccountType.ID == TRUSTED_USER_ID).first() + with db.begin(): + user.AccountType = tu_type + yield user + + +def test_archdev_navbar(client: TestClient): + expected = [ + "AUR Home", + "Packages", + "Register", + "Login" + ] + with client as request: + resp = request.get("/") + assert resp.status_code == int(HTTPStatus.OK) + + root = parse_root(resp.text) + items = root.xpath('//div[@id="archdev-navbar"]/ul/li/a') + for i, item in enumerate(items): + assert item.text.strip() == expected[i] + + +def test_archdev_navbar_authenticated(client: TestClient, user: User): + expected = [ + "Dashboard", + "Packages", + "Requests", + "My Account", + "Logout" + ] + cookies = {"AURSID": user.login(Request(), "testPassword")} + with client as request: + resp = request.get("/", cookies=cookies) + assert resp.status_code == int(HTTPStatus.OK) + + root = parse_root(resp.text) + items = root.xpath('//div[@id="archdev-navbar"]/ul/li/a') + for i, item in enumerate(items): + assert item.text.strip() == expected[i] + + +def test_archdev_navbar_authenticated_tu(client: TestClient, + trusted_user: User): + expected = [ + "Dashboard", + "Packages", + "Requests", + "Accounts", + "My Account", + "Trusted User", + "Logout" + ] + cookies = {"AURSID": trusted_user.login(Request(), "testPassword")} + with client as request: + resp = request.get("/", cookies=cookies) + assert resp.status_code == int(HTTPStatus.OK) + + root = parse_root(resp.text) + items = root.xpath('//div[@id="archdev-navbar"]/ul/li/a') + for i, item in enumerate(items): + assert item.text.strip() == expected[i]