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
|