File: test_entities.py

package info (click to toggle)
flask-security 5.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,448 kB
  • sloc: python: 23,247; javascript: 204; makefile: 138
file content (106 lines) | stat: -rw-r--r-- 2,631 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
"""
test_entities
~~~~~~~~~~~~~

Entity tests
"""

import inspect
import pytest

from sqlalchemy import Column
from flask_security import RoleMixin, UserMixin
from flask_security.models import fsqla, fsqla_v2
from flask_security.core import AnonymousUser


class Role(RoleMixin):
    def __init__(self, name):
        self.name = name


class User(UserMixin):
    def __init__(self, roles):
        self.roles = roles


def test_role_mixin_equal():
    admin1 = Role("admin")
    admin2 = Role("admin")
    assert admin1 == admin2


def test_role_mixin_not_equal():
    admin = Role("admin")
    editor = Role("editor")
    assert admin != editor


def test_user_mixin_has_role_with_string():
    admin = Role("admin")
    editor = Role("editor")
    user = User([admin, editor])
    assert user.has_role("admin") is True
    assert user.has_role("editor") is True
    assert user.has_role(admin) is True
    assert user.has_role(editor) is True


def test_anonymous_user_has_no_roles():
    user = AnonymousUser()
    assert not user.has_role("admin")


def get_user_attributes(cls):
    boring = dir(type("dummy", (object,), {}))
    return [item for item in inspect.getmembers(cls) if item[0] not in boring]


@pytest.mark.filterwarnings("ignore::sqlalchemy.exc.SAWarning")
def test_fsqla_fields():
    # basic test to verify no one modified fsqla after shipping.
    # Not perfect since not checking relationships etc.
    v1_user_attrs = {
        "id",
        "email",
        "password",
        "username",
        "active",
        "create_datetime",
        "update_datetime",
        "fs_uniquifier",
        "confirmed_at",
        "current_login_at",
        "current_login_ip",
        "last_login_at",
        "last_login_ip",
        "login_count",
        "tf_phone_number",
        "tf_primary_method",
        "tf_totp_secret",
    }
    attrs = {
        a[0] for a in get_user_attributes(fsqla.FsUserMixin) if isinstance(a[1], Column)
    }
    assert attrs == v1_user_attrs

    v2_user_attrs = {"us_totp_secrets", "us_phone_number"}
    attrs = {
        a[0]
        for a in get_user_attributes(fsqla_v2.FsUserMixin)
        if isinstance(a[1], Column)
    }
    assert attrs == v1_user_attrs.union(v2_user_attrs)

    v1_role_attrs = {"id", "name", "description", "permissions", "update_datetime"}
    attrs = {
        a[0] for a in get_user_attributes(fsqla.FsRoleMixin) if isinstance(a[1], Column)
    }
    assert attrs == v1_role_attrs

    attrs = {
        a[0]
        for a in get_user_attributes(fsqla_v2.FsRoleMixin)
        if isinstance(a[1], Column)
    }
    assert attrs == v1_role_attrs