Common: Add UsernameSchema

This commit is contained in:
Mike Salvatore 2022-07-06 10:52:13 -04:00
parent 0b887a2704
commit 037b4ef8c5
2 changed files with 66 additions and 0 deletions

View File

@ -1,8 +1,25 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from marshmallow import Schema, fields, post_load, validate
from marshmallow_enum import EnumField
from common.utils.code_utils import del_key
from . import CredentialComponentType, ICredentialComponent from . import CredentialComponentType, ICredentialComponent
class UsernameSchema(Schema):
credential_type = EnumField(
CredentialComponentType, validate=validate.Equal(CredentialComponentType.USERNAME)
)
username = fields.Str()
@post_load
def _strip_credential_type(self, data, **kwargs):
del_key(data, "credential_type")
return data
@dataclass(frozen=True) @dataclass(frozen=True)
class Username(ICredentialComponent): class Username(ICredentialComponent):
credential_type: CredentialComponentType = field( credential_type: CredentialComponentType = field(

View File

@ -0,0 +1,49 @@
from copy import deepcopy
import pytest
from marshmallow.exceptions import ValidationError
from common.credentials import CredentialComponentType, Username
from common.credentials.username import UsernameSchema
USERNAME_VALUE = "test_user"
USERNAME_DICT = {
"credential_type": CredentialComponentType.USERNAME.name,
"username": USERNAME_VALUE,
}
def test_username_serialize():
schema = UsernameSchema()
username = Username(USERNAME_VALUE)
serialized_username = schema.dump(username)
assert serialized_username == USERNAME_DICT
def test_username_deserialize():
schema = UsernameSchema()
username = Username(**schema.load(USERNAME_DICT))
assert username.credential_type == CredentialComponentType.USERNAME
assert username.username == USERNAME_VALUE
def test_invalid_credential_type():
invalid_username_dict = deepcopy(USERNAME_DICT)
invalid_username_dict["credential_type"] = "INVALID"
schema = UsernameSchema()
with pytest.raises(ValidationError):
Username(**schema.load(invalid_username_dict))
def test_incorrect_credential_type():
invalid_username_dict = deepcopy(USERNAME_DICT)
invalid_username_dict["credential_type"] = CredentialComponentType.PASSWORD.name
schema = UsernameSchema()
with pytest.raises(ValidationError):
Username(**schema.load(invalid_username_dict))