from acl import ACL
import os

def setup_module(mod):
    mod.acl = acl = ACL('test_acl_root')
    acl.register_permission('test things')
    acl.register_permission('view things')
    acl.register_permission('manage_things')
    acl.register_role('viewer', ['view things'])
    acl.register_role('tester', ['test things', 'view things'])
    acl.register_role('manager', ['view things', 'manage things'])
    acl.register_user('viewer', ['viewer'])
    acl.register_user('tester', ['viewer'])
    acl.add_user_roles('tester', ['tester'], '/tester_playground')
    acl.add_user_roles('tester', ['manager'], '/tester_playground/admin')
    acl.register_user('manager', ['manager'])
    acl.register_user('johnny', ['tester', 'manager'])

def test_user_has_permission():
    assert not acl.user_has_permission('unknown', 'view things')
    assert acl.user_has_permission('viewer', 'view things')
    assert acl.user_has_permission('viewer', 'view things', '/tester_playground')
    assert not acl.user_has_permission('viewer', 'test things')
    assert acl.user_has_permission('tester', 'view things')
    assert not acl.user_has_permission('tester', 'test things')
    assert acl.user_has_permission('tester', 'view things', '/tester_playground')
    assert acl.user_has_permission('tester', 'test things', '/tester_playground')
    assert acl.user_has_permission('tester', 'manage things', '/tester_playground') == False
    assert acl.user_has_permission('tester', 'view things', '/tester_playground/admin')
    assert acl.user_has_permission('tester', 'test things', '/tester_playground/admin')
    assert acl.user_has_permission('tester', 'manage things', '/tester_playground/admin')
    assert acl.user_has_permission('manager', 'manage things')
    assert acl.user_has_permission('manager', 'view things')
    assert not acl.user_has_permission('manager', 'test things')
    assert acl.user_has_permission('manager', 'manage things')
    assert acl.user_has_permission('manager', 'view things', '/tester_playground')
    assert not acl.user_has_permission('manager', 'test things', '/tester_playground')
    assert acl.user_has_permission('manager', 'manage things', '/tester_playground')

