|
11 | 11 | from aiopg.sa.result import ResultProxy, RowProxy
|
12 | 12 | from faker import Faker
|
13 | 13 | from pytest_simcore.helpers.rawdata_fakers import random_user
|
14 |
| -from simcore_postgres_database.errors import UniqueViolation |
| 14 | +from simcore_postgres_database.errors import InvalidTextRepresentation, UniqueViolation |
15 | 15 | from simcore_postgres_database.models.users import (
|
16 | 16 | _USER_ROLE_TO_LEVEL,
|
17 | 17 | UserRole,
|
@@ -101,10 +101,64 @@ def test_user_roles_compares():
|
101 | 101 | @pytest.fixture
|
102 | 102 | async def clean_users_db_table(connection: SAConnection):
|
103 | 103 | yield
|
104 |
| - |
105 | 104 | await connection.execute(users.delete())
|
106 | 105 |
|
107 | 106 |
|
| 107 | +async def test_user_status_as_pending( |
| 108 | + connection: SAConnection, faker: Faker, clean_users_db_table: None |
| 109 | +): |
| 110 | + """Checks a bug where the expression |
| 111 | +
|
| 112 | + `user_status = UserStatus(user["status"])` |
| 113 | +
|
| 114 | + raise ValueError because **before** this change `UserStatus.CONFIRMATION_PENDING.value == "PENDING"` |
| 115 | + """ |
| 116 | + # after changing to UserStatus.CONFIRMATION_PENDING == "CONFIRMATION_PENDING" |
| 117 | + with pytest.raises(ValueError): # noqa: PT011 |
| 118 | + assert UserStatus("PENDING") == UserStatus.CONFIRMATION_PENDING |
| 119 | + |
| 120 | + assert UserStatus("CONFIRMATION_PENDING") == UserStatus.CONFIRMATION_PENDING |
| 121 | + assert UserStatus.CONFIRMATION_PENDING.value == "CONFIRMATION_PENDING" |
| 122 | + assert UserStatus.CONFIRMATION_PENDING == "CONFIRMATION_PENDING" |
| 123 | + assert str(UserStatus.CONFIRMATION_PENDING) == "UserStatus.CONFIRMATION_PENDING" |
| 124 | + |
| 125 | + # tests that the database never stores the word "PENDING" |
| 126 | + data = random_user(faker, status="PENDING") |
| 127 | + assert data["status"] == "PENDING" |
| 128 | + with pytest.raises(InvalidTextRepresentation) as err_info: |
| 129 | + await connection.execute(users.insert().values(data)) |
| 130 | + |
| 131 | + assert 'invalid input value for enum userstatus: "PENDING"' in f"{err_info.value}" |
| 132 | + |
| 133 | + |
| 134 | +@pytest.mark.parametrize( |
| 135 | + "status_value", |
| 136 | + [ |
| 137 | + UserStatus.CONFIRMATION_PENDING, |
| 138 | + "CONFIRMATION_PENDING", |
| 139 | + ], |
| 140 | +) |
| 141 | +async def test_user_status_inserted_as_enum_or_int( |
| 142 | + status_value: UserStatus | str, |
| 143 | + connection: SAConnection, |
| 144 | + faker: Faker, |
| 145 | + clean_users_db_table: None, |
| 146 | +): |
| 147 | + # insert as `status_value` |
| 148 | + data = random_user(faker, status=status_value) |
| 149 | + assert data["status"] == status_value |
| 150 | + user_id = await connection.scalar(users.insert().values(data).returning(users.c.id)) |
| 151 | + |
| 152 | + # get as UserStatus.CONFIRMATION_PENDING |
| 153 | + user = await ( |
| 154 | + await connection.execute(users.select().where(users.c.id == user_id)) |
| 155 | + ).first() |
| 156 | + assert user |
| 157 | + |
| 158 | + assert UserStatus(user.status) == UserStatus.CONFIRMATION_PENDING |
| 159 | + assert user.status == UserStatus.CONFIRMATION_PENDING |
| 160 | + |
| 161 | + |
108 | 162 | async def test_unique_username(
|
109 | 163 | connection: SAConnection, faker: Faker, clean_users_db_table: None
|
110 | 164 | ):
|
|
0 commit comments