Skip to content

Commit

Permalink
admin access for admin, anonymous, users done, all tests 100%
Browse files Browse the repository at this point in the history
  • Loading branch information
pdamoune committed Aug 21, 2019
1 parent df0f3cb commit c7f8994
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 13 deletions.
6 changes: 4 additions & 2 deletions TODO
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
[V] Register
[V] Login
[V] Logout
[X] Permissions anonymous/user/admin
[V] Permissions anonymous/user/admin
[V] Flask Admin with bootstrap4, permissions set

[V] Test Register
[V] Test Login
[V] Test Logout
[X] Test Permissions anonymous/user/admin
[V] Test Permissions anonymous/user/admin
[V] Flask Admin test
8 changes: 5 additions & 3 deletions app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@
from flask_sqlalchemy import SQLAlchemy
from flask_debugtoolbar import DebugToolbarExtension
from flask_login import LoginManager
from .admin import Admin, SecuredHomeView


from config import config
from .admin import Admin, SecuredHomeView

bootstrap = Bootstrap()
db = SQLAlchemy()
toolbar = DebugToolbarExtension()
admin = Admin(template_mode='bootstrap4', base_template='/admin/new_master.html')

admin = Admin(
template_mode='bootstrap4',
base_template='/admin/new_master.html')
login_manager = LoginManager()
login_manager.login_view = 'auth.login'

Expand All @@ -26,6 +27,7 @@ def create_app(config_name):
toolbar.init_app(app)
db.init_app(app)
login_manager.init_app(app)

admin.init_app(app, index_view=SecuredHomeView())

from app import blueprints
Expand Down
1 change: 1 addition & 0 deletions app/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def add_model_views(self, models, db):
for model in models:
self.add_model_view(model, db)


class ModelView(FlaskModelView):
def is_accessible(self):
return login.current_user.is_administrator()
Expand Down
7 changes: 4 additions & 3 deletions app/blueprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ def init_app(app):
app.register_blueprint(auth_blueprint, url_prefix='/auth')

from app import admin
admin.add_model_views([
User, Role
], db)
if len(admin._views) == 1: # Secure blueprints for app testing
admin.add_model_views([
User, Role
], db)
1 change: 0 additions & 1 deletion tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ def setUpClass(cls):
print(f"\033[36m[{cls.__name__}] \033[m")

def setUpApp(self):
admin._views = []
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
Expand Down
71 changes: 67 additions & 4 deletions tests/test_client.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import re
import unittest
from app import create_app, db, admin
from app import create_app, db, admin, config
from app.models import User, Role
from wtforms import ValidationError
from tests import SetUpClass
Expand Down Expand Up @@ -38,7 +38,6 @@ def test_register_page(self):
self.assertEqual(r.status_code, 200)
self.assertTrue('Register' in r.get_data(as_text=True))


def test_register_and_login(self):
r = self.client.post('/auth/register', data={
'email': '[email protected]',
Expand All @@ -54,8 +53,9 @@ def test_register_and_login(self):
'password': 'test'
}, follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue(re.search('Log Out',
r.get_data(as_text=True)))
self.assertTrue(re.search(
'Log Out',
r.get_data(as_text=True)))

# Log Out
r = self.client.get('/auth/logout', follow_redirects=True)
Expand Down Expand Up @@ -89,3 +89,66 @@ def test_username_or_email_already_exists(self):
r = self.client.post('/auth/register', data=data)
self.assertTrue('Username already in use.' in r.get_data(
as_text=True))

def test_admin_page_admin(self):
r = self.client.post('/auth/register', data={
'email': config['testing'].ADMIN_EMAIL,
'username': 'admin',
'password': config['testing'].ADMIN_PASSWORD,
'password2': config['testing'].ADMIN_PASSWORD})
self.assertEqual(r.status_code, 302)

r = self.client.post('/auth/login', data={
'email': config['testing'].ADMIN_EMAIL,
'password': config['testing'].ADMIN_PASSWORD},
follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Log Out' in r.get_data(as_text=True))

r = self.client.get('/admin', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Admin' in r.get_data(as_text=True))

r = self.client.get('/admin', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Admin' in r.get_data(as_text=True))

r = self.client.get('/admin/user', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Admin' in r.get_data(as_text=True))

def test_admin_page_anonymous(self):
r = self.client.get('/admin', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Login' in r.get_data(as_text=True))

r = self.client.get('/admin/user', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Login' in r.get_data(as_text=True))

def test_admin_page_user(self):
r = self.client.post('/auth/register', data={
'email': "[email protected]",
'username': 'simple_user',
'password': 'password',
'password2': 'password'})
self.assertEqual(r.status_code, 302)

r = self.client.post('/auth/login', data={
'email': '[email protected]',
'password': 'password'},
follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Log Out' in r.get_data(as_text=True))

r = self.client.get('/admin', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Login' in r.get_data(as_text=True))

r = self.client.get('/admin/user', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Login' in r.get_data(as_text=True))

r = self.client.get('/admin/user', follow_redirects=True)
self.assertEqual(r.status_code, 200)
self.assertTrue('Login' in r.get_data(as_text=True))

0 comments on commit c7f8994

Please sign in to comment.