diff --git a/dev-requirements.txt b/dev-requirements.txt index 3884021..9386086 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -10,3 +10,4 @@ flake8-comprehensions==3.2.2 flake8-mutable==1.2.0 flake8-tuple==0.4.1 coverage==5.1 +beautifulsoup4==4.9.0 diff --git a/templates/navigation/index.html b/templates/navigation/index.html index 99e8c54..5679b6b 100644 --- a/templates/navigation/index.html +++ b/templates/navigation/index.html @@ -1,4 +1,4 @@
  • /home/theorangeone
  • -{% include "navigation/item.html" with reverse="about" text="about" %} -{% include "navigation/item.html" with reverse="blog:list" text="posts" %} +{% include "navigation/item.html" with reverse="about" %} +{% include "navigation/item.html" with reverse="blog:list" %} diff --git a/templates/navigation/item.html b/templates/navigation/item.html index 7b9b456..3e164b7 100644 --- a/templates/navigation/item.html +++ b/templates/navigation/item.html @@ -1 +1,5 @@ -
  • ~/{{ text | lower }}
  • +{% load navigation %} + +{% url reverse as url %} + +
  • {{ url | to_navbar_text }}
  • diff --git a/website/common/templatetags/navigation.py b/website/common/templatetags/navigation.py new file mode 100644 index 0000000..6898687 --- /dev/null +++ b/website/common/templatetags/navigation.py @@ -0,0 +1,8 @@ +from django import template + +register = template.Library() + + +@register.filter(is_safe=True) +def to_navbar_text(path): + return "~/" + path.strip("/") diff --git a/website/common/tests.py b/website/common/tests.py index de6b1b7..f1bff80 100644 --- a/website/common/tests.py +++ b/website/common/tests.py @@ -1,3 +1,4 @@ +from bs4 import BeautifulSoup from django.test import SimpleTestCase from django.urls import reverse @@ -15,6 +16,24 @@ class HomepageViewTestCase(BaseTestCase): response = self.client.get(reverse("homepage")) self.assertContains(response, '') + def test_navbar_links_accessible(self): + response = self.client.get(reverse("homepage")) + soup = BeautifulSoup(response.content, features="html.parser") + nav_links = list(soup.find("nav").find_all("a", class_="nav-link")) + self.assertEqual(len(nav_links), 2) + for nav_link in nav_links: + nav_link_response = self.client.head(nav_link.attrs["href"]) + self.assertEqual(nav_link_response.status_code, 200) + + def test_navbar_link_text(self): + response = self.client.get(reverse("homepage")) + soup = BeautifulSoup(response.content, features="html.parser") + nav_links = list(soup.find("nav").find_all("a", class_="nav-link")) + self.assertEqual( + {nav_link.find("code").text for nav_link in nav_links}, + {"~/about", "~/blog"}, + ) + class AboutViewTestCase(BaseTestCase): def test_accessible(self):