Skip to content

Commit

Permalink
Adjusting tests and fixing
Browse files Browse the repository at this point in the history
  • Loading branch information
MarekSuchanek committed Jul 23, 2018
1 parent c89c064 commit 4eaf62a
Show file tree
Hide file tree
Showing 9 changed files with 48 additions and 25 deletions.
9 changes: 6 additions & 3 deletions repocribro/controllers/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,8 @@ def role_edit(name):
if not role.valid_privileges():
flask.flash('Unsaved - incorrect characters in privileges '
'for role {}'.format(name), 'warning')
return flask.redirect(flask.url_for('admin.role_detail', name=role.name))
return flask.redirect(flask.url_for('admin.role_detail',
name=role.name))
try:
db.session.commit()
if name == Anonymous.rolename:
Expand Down Expand Up @@ -231,7 +232,8 @@ def role_create():
if not role.valid_privileges():
flask.flash('Unsaved - incorrect characters in privileges '
'for role {}'.format(name), 'warning')
return flask.redirect(flask.url_for('admin.role_detail', name=role.name))
return flask.redirect(flask.url_for('admin.role_detail',
name=role.name))
try:
db.session.add(role)
db.session.commit()
Expand All @@ -242,7 +244,8 @@ def role_create():
'warning')
db.session.rollback()
return flask.redirect(flask.url_for('admin.index', tab='roles'))
return flask.redirect(flask.url_for('admin.role_detail', name=role.name))
return flask.redirect(flask.url_for('admin.role_detail',
name=role.name))


@admin.route('/role/<name>/add', methods=['POST'])
Expand Down
1 change: 0 additions & 1 deletion repocribro/controllers/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ def index():
@core.route('/search/')
@core.route('/search')
@core.route('/search/<query>')
@permissions.actions.search.require(403)
def search(query=''):
"""Search page (GET handler)
Expand Down
6 changes: 4 additions & 2 deletions repocribro/ext_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,10 @@ def provide_filters():
def provide_roles():
return {
'admin': Role('admin', '*', 'Service administrators'),
'user': Role(UserAccount.default_rolename, 'search*', 'Regular users'),
'anonymous': Role(Anonymous.rolename, 'search*:login', 'Not-logged users')
'user': Role(UserAccount.default_rolename, 'search*',
'Regular users'),
'anonymous': Role(Anonymous.rolename, 'search*:login',
'Not-logged users')
}

@staticmethod
Expand Down
4 changes: 4 additions & 0 deletions repocribro/repocribro.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ def __init__(self):
super().__init__(PROG_NAME)
self.container = DI_Container()

def ext_call(self, what_to_call):
ext_master = self.container.get('ext_master')
ext_master.call(what_to_call)


def create_app(cfg_files=['DEFAULT']):
"""Factory for making the web Flask application
Expand Down
35 changes: 23 additions & 12 deletions repocribro/security.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,29 +100,40 @@ def clear_session(*args):

def reload_anonymous_role(app, db):
with app.app_context():
anonymous_role = db.session.query(Role).filter_by(
name=Anonymous.rolename
).first()
anonymous_role = None
try:
anonymous_role = db.session.query(Role).filter_by(
name=Anonymous.rolename
).first()
except:
pass
if anonymous_role is not None:
Anonymous.roles.append(anonymous_role)


def get_default_user_role(app, db):
user_role = None
with app.app_context():
user_role = db.session.query(Role).filter_by(
name=UserAccount.default_rolename
).first()
try:
user_role = db.session.query(Role).filter_by(
name=UserAccount.default_rolename
).first()
except:
pass
return user_role


def create_default_role(app, db, role):
with app.app_context():
existing_role = db.session.query(Role).filter_by(
name=role.name
).first()
if existing_role is None:
db.session.add(role)
db.session.commit()
try:
existing_role = db.session.query(Role).filter_by(
name=role.name
).first()
if existing_role is None:
db.session.add(role)
db.session.commit()
except:
pass


@flask_principal.identity_loaded.connect
Expand Down
5 changes: 4 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ def teardown():
_db.app = app
_db.create_all()

app.ext_call('init_security') # create default roles

request.addfinalizer(teardown)
return _db

Expand Down Expand Up @@ -161,11 +163,12 @@ def filled_db_session(empty_db_session):
session = empty_db_session
import datetime
from repocribro.models import Role, UserAccount, User, \
Organization, Repository, Commit, Release, Push
Organization, Repository, Commit, Release, Push, Anonymous

# Setup admin role
admin_role = Role('admin', '*', 'Administrators')
session.add(admin_role)
Anonymous.permits = lambda x: True

account_banned = UserAccount()
account_banned.active = False
Expand Down
9 changes: 5 additions & 4 deletions tests/test_controller_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,17 +118,18 @@ def test_account_delete(filled_db_session, app_client):
def test_role_create_edit_delete(filled_db_session, app_client):
from repocribro.models import Role
app_client.get('/test/login/admin')
existing_role = {'name': 'admin', 'description': ''}
existing_role = {'name': 'admin', 'privileges': '*', 'description': ''}
ret = app_client.post('/admin/roles/create', data=existing_role)
assert ret.status == '302 FOUND'

bad_role = {'name': '', 'description': ''}
bad_role = {'name': '', 'privileges': '', 'description': ''}
ret = app_client.post('/admin/roles/create', data=bad_role)
assert ret.status == '302 FOUND'

role = filled_db_session.query(Role).filter_by(name='testadmin').first()
assert role is None
new_role = {'name': 'testadmin', 'description': ''}
new_role = {'name': 'testadmin', 'privileges': 'login:s*',
'description': ''}
ret = app_client.post('/admin/roles/create', data=new_role)
assert ret.status == '302 FOUND'
role = filled_db_session.query(Role).filter_by(name='testadmin').first()
Expand All @@ -147,7 +148,7 @@ def test_role_create_edit_delete(filled_db_session, app_client):

role = filled_db_session.query(Role).filter_by(name='test_admin').first()
assert role is None
edit_role = {'name': 'test_admin', 'description': ''}
edit_role = {'name': 'test_admin', 'privileges': '*', 'description': ''}
ret = app_client.post('/admin/role/testadmin/edit', data=edit_role)
assert ret.status == '302 FOUND'
role = filled_db_session.query(Role).filter_by(name='test_admin').first()
Expand Down
2 changes: 1 addition & 1 deletion tests/test_controller_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def test_landing(app_client):
app_client.get('/').data.decode('utf-8')


def test_search(app_client):
def test_search(filled_db_session, app_client):
res = app_client.get('/search')
assert res.status == '200 OK'
assert '<h1>Search</h1>' in res.data.decode('utf-8')
Expand Down
2 changes: 1 addition & 1 deletion tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ def test_anonymous():
assert not anonym.has_role('user')
assert not anonym.is_active
assert not anonym.is_authenticated
assert anonym.rolenames == []
assert anonym.rolenames == ['anonymous']
assert anonym.is_anonymous
repo = Repository(777, None, 'some/repo', 'repo', 'C++', '', '', '',
False, None, None, Repository.VISIBILITY_PRIVATE)
Expand Down

0 comments on commit 4eaf62a

Please sign in to comment.