Module test_20_users10

Test the users.

Domain

Acts

Getting to know all users.

test_users()
office checks whether all users in the database have a corresponding client fixture.
test_identity()
We check whether all users work as their own identity. This is a test on the web-app as well a test on the mechanics of the test framework.
test_readEmail()
All users try to read the email address of auth, but only some succeed
Expand source code
"""Test the users.

## Domain

*   Users as in `conftest`, under *players*
*   Clean slate, see `starters`
*   The user table

## Acts

Getting to know all users.

`test_users`
:   **office** checks whether all users in the database have a corresponding
    client fixture.

`test_identity`
:   We check whether all users work as their own identity.
    This is a test on the web-app as well a test on the mechanics of the test
    framework.

`test_readEmail`
:   All users try to read the email address of **auth**, but only some succeed
"""

import pytest

import magic  # noqa
from control.utils import E, serverprint
from conftest import USER_LIST, NAMED_USERS, POWER_USERS
from example import AUTH, AUTH_EMAIL, EMAIL, PUBLIC, USER
from helpers import viewField
from starters import start
from subtest import assertFieldValue, assertStatus

startInfo = {}


@pytest.mark.usefixtures("db")
def test_start(clientOffice):
    startInfo.update(start(clientOffice=clientOffice, users=True))


def test_users(clientOffice):
    assert len(USER_LIST) == 11
    valueTables = startInfo["valueTables"]

    users = valueTables[USER]
    for user in USER_LIST:
        if user == PUBLIC:
            assert user not in users
        else:
            assert user in users


def test_identity(clients):
    for (user, cl) in clients.items():
        response = cl.get("/whoami")
        actualUser = response.get_data(as_text=True)
        serverprint(f"{user} says: I am {actualUser}")
        assert user == actualUser


def test_login(clients, clientPublic):
    for user in sorted(NAMED_USERS) + [E, PUBLIC, "xxxxxx"]:
        isNamed = user in NAMED_USERS
        expect = 302 if isNamed else 303
        serverprint(f"LOGIN {user}")
        assertStatus(clientPublic, f"/login?eppn={user}", expect)
        serverprint(f"LOGOUT {user}")
        if user in clients:
            assertStatus(clients[user], "/logout", expect)


def test_readEmail(clients):
    valueTables = startInfo["valueTables"]

    eid = valueTables[USER][AUTH]
    for (user, client) in clients.items():
        (text, fields) = viewField(client, USER, eid, EMAIL)
        if user in POWER_USERS:
            assertFieldValue(fields, EMAIL, AUTH_EMAIL)
        else:
            assertFieldValue(fields, EMAIL, None)

Functions

def test_identity(clients)
Expand source code
def test_identity(clients):
    for (user, cl) in clients.items():
        response = cl.get("/whoami")
        actualUser = response.get_data(as_text=True)
        serverprint(f"{user} says: I am {actualUser}")
        assert user == actualUser
def test_login(clients, clientPublic)
Expand source code
def test_login(clients, clientPublic):
    for user in sorted(NAMED_USERS) + [E, PUBLIC, "xxxxxx"]:
        isNamed = user in NAMED_USERS
        expect = 302 if isNamed else 303
        serverprint(f"LOGIN {user}")
        assertStatus(clientPublic, f"/login?eppn={user}", expect)
        serverprint(f"LOGOUT {user}")
        if user in clients:
            assertStatus(clients[user], "/logout", expect)
def test_readEmail(clients)
Expand source code
def test_readEmail(clients):
    valueTables = startInfo["valueTables"]

    eid = valueTables[USER][AUTH]
    for (user, client) in clients.items():
        (text, fields) = viewField(client, USER, eid, EMAIL)
        if user in POWER_USERS:
            assertFieldValue(fields, EMAIL, AUTH_EMAIL)
        else:
            assertFieldValue(fields, EMAIL, None)
def test_start(clientOffice)
Expand source code
@pytest.mark.usefixtures("db")
def test_start(clientOffice):
    startInfo.update(start(clientOffice=clientOffice, users=True))
def test_users(clientOffice)
Expand source code
def test_users(clientOffice):
    assert len(USER_LIST) == 11
    valueTables = startInfo["valueTables"]

    users = valueTables[USER]
    for user in USER_LIST:
        if user == PUBLIC:
            assert user not in users
        else:
            assert user in users