diff --git a/ordr/resources/__init__.py b/ordr/resources/__init__.py
index 65c5e36..8c2780b 100644
--- a/ordr/resources/__init__.py
+++ b/ordr/resources/__init__.py
@@ -8,6 +8,8 @@ class RootResource:
:param pyramid.request.Request request: the current request object
'''
+
+ nav_active = 'welcome'
def __init__(self, request):
''' Create the root resource
diff --git a/ordr/templates/layout.jinja2 b/ordr/templates/layout.jinja2
index 02b8afc..3b5d874 100644
--- a/ordr/templates/layout.jinja2
+++ b/ordr/templates/layout.jinja2
@@ -3,25 +3,71 @@
-
Ordr
-
Welcome to Ordr, a Pyramid application generated by
Cookiecutter.
+
+
+
+
Welcome to ordr!
+
An order management system to simplify your shopping for laborartory supplies.
+
+
+
+
+
+
+
Register
+
+ Registration is easy as 1-2-3.
+ Just fill out the form and as soon as your
+ account has been activated you can start shopping.
+
+
{% endblock content %}
diff --git a/tests/_functional/__init__.py b/tests/_functional/__init__.py
index 6c9c852..3b52226 100644
--- a/tests/_functional/__init__.py
+++ b/tests/_functional/__init__.py
@@ -13,6 +13,15 @@ WEBTEST_SETTINGS = APP_SETTINGS.copy()
class CustomTestApp(webtest.TestApp):
''' might add custom functionality to webtest.TestApp '''
pass
+
+ def login(self, username, password):
+ ''' stub for user login '''
+ self.logout()
+ pass
+
+ def logout(self):
+ ''' stub for user logout '''
+ pass
def create_users(dbsession):
diff --git a/tests/_functional/layout.py b/tests/_functional/layout.py
new file mode 100644
index 0000000..7cc077f
--- /dev/null
+++ b/tests/_functional/layout.py
@@ -0,0 +1,38 @@
+''' functional tests for ordr2.templates.layout
+
+The tests for the layout are performed on '/faqs' or '/orders', since these
+two urls are accessible by either everyone or all active users
+'''
+
+import pytest
+
+from . import testapp # noqa: F401
+
+
+def test_navbar_no_user(testapp): # noqa: F811
+ result = testapp.get('/faq')
+ navbar = result.html.find('nav', class_='navbar-dark')
+ expected = ['/', '/', '/faq', '/register']
+ hrefs = [a['href'] for a in navbar.find_all('a')]
+ assert expected == hrefs
+ assert '/orders' not in result
+ assert 'nav-item dropdown' not in result
+
+
+@pytest.mark.xfail # noqa: F811
+@pytest.mark.parametrize(
+ 'username,password,expected', [
+ ('user', 'password', ['/', '/orders', '/logout', '/account']),
+ ('purchaser', 'password', ['/', '/orders', '/logout', '/account']),
+ ('admin', 'password', [
+ '/', '/orders', '/admin', '/logout', '/account'
+ ]),
+ ]
+ )
+def test_navbar_with_user(testapp, username, password, expected):
+ testapp.login(username, password)
+ result = testapp.get('/faq')
+ navbar = result.html.find('nav', class_='navbar-dark')
+ hrefs = [a['href'] for a in navbar.find_all('a')]
+ assert expected == hrefs
+ assert 'nav-item dropdown' in result
diff --git a/tests/_functional/pages.py b/tests/_functional/pages.py
index 1901e36..e9164db 100644
--- a/tests/_functional/pages.py
+++ b/tests/_functional/pages.py
@@ -5,9 +5,20 @@ from . import testapp # noqa: F401
def test_welcome(testapp): # noqa: F811
result = testapp.get('/')
- assert 'Ordr' in result
+ active = result.html.find('li', class_='active')
+ assert active.a['href'] == '/'
+ expected = {'/', '/faq', '/register', '/forgot', '/register'}
+ hrefs = {a['href'] for a in result.html.find_all('a')}
+ assert expected == hrefs
+ forms = result.html.find_all('form')
+ assert len(forms) == 1
+ login_form = forms[0]
+ assert login_form['action'] == '/login'
+ assert login_form['method'] == 'POST'
+ assert 'wrong username' not in result
def test_faq(testapp): # noqa: F811
result = testapp.get('/faq')
- assert 'FAQ' in result
+ active = result.html.find('li', class_='active')
+ assert active.a['href'] == '/faq'