added test for ldap authentication
This commit is contained in:
parent
0c7821cbe5
commit
2855163948
|
@ -32,7 +32,7 @@ def extract_csrf_token(response):
|
|||
|
||||
def headless_login(client, user='gandalf@shire.me', password='shadowfax'):
|
||||
# extract csrf token from the login page source
|
||||
response = client.get('/login')
|
||||
response = client.get('/login', follow_redirects=True)
|
||||
csrf_token = extract_csrf_token(response)
|
||||
|
||||
# send login information
|
||||
|
@ -53,6 +53,65 @@ def test_login_headless(client):
|
|||
for link in soup.findAll('a', attrs={'class': ['btn'], 'role': 'button'})])
|
||||
|
||||
|
||||
def test_login_ldap(client, temp_user, mocker):
|
||||
# mock ldap validation for admin user
|
||||
def mock_validate(username, password):
|
||||
auth = username == temp_user['username'] and password == temp_user['password']
|
||||
user_data = {'username': temp_user['username'],
|
||||
'email': temp_user['email'],
|
||||
'roles': ['admin'],
|
||||
'password': temp_user['password']}
|
||||
return auth, user_data
|
||||
mocker.patch('imaginaerraum_door_admin.auth.validate_ldap', mock_validate)
|
||||
|
||||
user = find_user(temp_user['username'])
|
||||
# remove local role so that ldap authentication is the default
|
||||
user.roles.pop(0)
|
||||
|
||||
# log out admin user
|
||||
client.get('/logout')
|
||||
|
||||
# log in temp user using ldap
|
||||
response = headless_login(client, user=temp_user['username'],
|
||||
password=temp_user['password'])
|
||||
soup = BeautifulSoup(response.data, 'html.parser')
|
||||
|
||||
# make sure login succeeded -> Tür öffnen button will appear
|
||||
assert any(['Tür öffnen' in link.contents[0]
|
||||
for link in soup.findAll('a', attrs={'class': ['btn'],
|
||||
'role': 'button'})])
|
||||
|
||||
|
||||
def test_login_ldap_new_user(client, mocker):
|
||||
# mock ldap validation for admin user
|
||||
def mock_validate(username, password):
|
||||
auth = True
|
||||
user_data = {'username': 'Balrog',
|
||||
'email': 'balrog@moria.me',
|
||||
'roles': ['admin'],
|
||||
'password': 'youshallnotpass'}
|
||||
return auth, user_data
|
||||
mocker.patch('imaginaerraum_door_admin.auth.validate_ldap', mock_validate)
|
||||
|
||||
# initially, the Balrog user should not exist
|
||||
user = find_user('Balrog')
|
||||
assert user is None
|
||||
|
||||
# log in temp user using ldap -> this will succeed and create a local user
|
||||
response = headless_login(client, user='Balrog',
|
||||
password='youshallnotpass')
|
||||
soup = BeautifulSoup(response.data, 'html.parser')
|
||||
|
||||
# make sure user is now created locally
|
||||
user = find_user('Balrog')
|
||||
assert user is not None
|
||||
|
||||
# make sure login succeeded -> Tür öffnen button will appear
|
||||
assert any(['Tür öffnen' in link.contents[0]
|
||||
for link in soup.findAll('a', attrs={'class': ['btn'],
|
||||
'role': 'button'})])
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def client_authenticated(client):
|
||||
# log in using admin account for testing
|
||||
|
|
Loading…
Reference in New Issue
Block a user