Passed
Push — master ( ea9620...d1c079 )
by Jochen
02:22
created

test_initialize_account_as_admin()   A

Complexity

Conditions 1

Size

Total Lines 40
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 25
nop 1
dl 0
loc 40
rs 9.28
c 0
b 0
f 0
1
"""
2
:Copyright: 2006-2019 Jochen Kupperschmidt
3
:License: Modified BSD, see LICENSE for details.
4
"""
5
6
import pytest
7
from pytest import raises
8
9
from byceps.services.authorization import service as authorization_service
10
from byceps.services.user import command_service as user_command_service
11
from byceps.services.user import event_service
12
13
from tests.helpers import create_user
14
15
from ...conftest import database_recreated
16
17
18
@pytest.fixture(scope='module')
19
def app(admin_app, db):
20
    with admin_app.app_context():
21
        with database_recreated(db):
22
            _app = admin_app
23
24
            admin = create_user('Administrator')
25
            _app.admin_id = admin.id
26
27
            authorization_service.create_role('board_user', 'Board User')
28
29
            yield _app
30
31
32
def test_initialize_account_as_user(app):
33
    user_id = create_user('CreatedOnline', initialized=False).id
34
35
    user_before = user_command_service._get_user(user_id)
36
    assert not user_before.initialized
37
38
    events_before = event_service.get_events_for_user(user_before.id)
39
    assert len(events_before) == 0
40
41
    role_ids_before = authorization_service.find_role_ids_for_user(user_id)
42
    assert role_ids_before == set()
43
44
    # -------------------------------- #
45
46
    user_command_service.initialize_account(user_id)
47
48
    # -------------------------------- #
49
50
    user_after = user_command_service._get_user(user_id)
51
    assert user_after.initialized
52
53
    events_after = event_service.get_events_for_user(user_after.id)
54
    assert len(events_after) == 2
55
56
    user_enabled_event = events_after[0]
57
    assert user_enabled_event.event_type == 'user-initialized'
58
    assert user_enabled_event.data == {}
59
60
    role_assigned_event = events_after[1]
61
    assert role_assigned_event.event_type == 'role-assigned'
62
    assert role_assigned_event.data == {
63
        'role_id': 'board_user',
64
    }
65
66
    role_ids_after = authorization_service.find_role_ids_for_user(user_id)
67
    assert role_ids_after == {'board_user'}
68
69
70
def test_initialize_account_as_admin(app):
71
    admin_id = app.admin_id
72
    user_id = create_user('CreatedAtPartyCheckInByAdmin', initialized=False).id
73
74
    user_before = user_command_service._get_user(user_id)
75
    assert not user_before.initialized
76
77
    events_before = event_service.get_events_for_user(user_before.id)
78
    assert len(events_before) == 0
79
80
    role_ids_before = authorization_service.find_role_ids_for_user(user_id)
81
    assert role_ids_before == set()
82
83
    # -------------------------------- #
84
85
    user_command_service.initialize_account(user_id, initiator_id=admin_id)
86
87
    # -------------------------------- #
88
89
    user_after = user_command_service._get_user(user_id)
90
    assert user_after.initialized
91
92
    events_after = event_service.get_events_for_user(user_after.id)
93
    assert len(events_after) == 2
94
95
    user_enabled_event = events_after[0]
96
    assert user_enabled_event.event_type == 'user-initialized'
97
    assert user_enabled_event.data == {
98
        'initiator_id': str(admin_id),
99
    }
100
101
    role_assigned_event = events_after[1]
102
    assert role_assigned_event.event_type == 'role-assigned'
103
    assert role_assigned_event.data == {
104
        'initiator_id': str(admin_id),
105
        'role_id': 'board_user',
106
    }
107
108
    role_ids_after = authorization_service.find_role_ids_for_user(user_id)
109
    assert role_ids_after == {'board_user'}
110
111
112
def test_initialize_already_initialized_account(app):
113
    admin_id = app.admin_id
114
    user_id = create_user('AlreadyInitialized').id
115
116
    user_before = user_command_service._get_user(user_id)
117
    assert user_before.initialized
118
119
    events_before = event_service.get_events_for_user(user_before.id)
120
    assert len(events_before) == 0
121
122
    # -------------------------------- #
123
124
    with raises(ValueError):
125
        user_command_service.initialize_account(user_id, initiator_id=admin_id)
126
127
    # -------------------------------- #
128
129
    user_after = user_command_service._get_user(user_id)
130
    assert user_after.initialized  # still initialized
131
132
    events_after = event_service.get_events_for_user(user_after.id)
133
    assert len(events_after) == 0  # no additional user events
134