import atlas_um.tokens.claims_serializer as sut from atlas_um.tokens.claim_values_serializers import ( ClaimValuesSerializer, RegisteredSerializers, ) from tests.atlas_um.factories import ClaimNameFactory, ClaimValueFactory class TestClaimsSerializer: def test_empty_results(self): assert sut.ClaimsSerializer.serialize([]) == dict() def test_single_value_list_append(self, faker, mocker): claim_name = ClaimNameFactory.build( claim_values_serializer="ListAppend" ) components = faker.pydict( variable_nb_elements=True, value_types=("str", "float", "int", "uri", "email"), ) claim_value = ClaimValueFactory.build( claim_name=claim_name, components=components ) expected = {claim_name.url: [components]} query_results = [(claim_name, claim_value)] assert sut.ClaimsSerializer.serialize(query_results) == expected def test_single_value(self, faker, mocker): fake_serializer_name = faker.pystr() claim_name = ClaimNameFactory.build( claim_values_serializer=fake_serializer_name ) claim_value = ClaimValueFactory.build(claim_name=claim_name) mocked_of = mocker.patch.object(RegisteredSerializers, "of") mocked_values_serializer = mocker.Mock(ClaimValuesSerializer) mocked_of.return_value = mocked_values_serializer mocked_serialize = mocker.patch.object( mocked_values_serializer, "serialize" ) serialized_mock = mocker.Mock() mocked_serialize.return_value = serialized_mock actual = sut.ClaimsSerializer.serialize([(claim_name, claim_value)]) assert actual == {claim_name.url: serialized_mock} assert mocked_of.call_args_list == [mocker.call(fake_serializer_name)] assert mocked_serialize.call_args_list == [mocker.call([claim_value])] def test_several_values_same_name(self, faker, mocker): fake_serializer_name = faker.pystr() claim_name = ClaimNameFactory.build( claim_values_serializer=fake_serializer_name ) claim_value_count = faker.pyint(min_value=2, max_value=5) claim_values = ClaimValueFactory.build_batch( claim_value_count, claim_name=claim_name ) mocked_of = mocker.patch.object(RegisteredSerializers, "of") mocked_values_serializer = mocker.Mock() mocked_of.return_value = mocked_values_serializer mocked_serialize = mocker.patch.object( mocked_values_serializer, "serialize" ) serialized_mock = mocker.Mock() mocked_serialize.return_value = serialized_mock query_results = list(map((lambda a: (claim_name, a)), claim_values)) actual = sut.ClaimsSerializer.serialize(query_results) assert actual == {claim_name.url: serialized_mock} assert mocked_of.call_args_list == [mocker.call(fake_serializer_name)] assert mocked_serialize.call_args_list == [mocker.call(claim_values)] def test_unknown_serializer(self, faker, mocker): claim_name = ClaimNameFactory.build( claim_values_serializer="__UnknownSerializer" ) components = faker.pydict( variable_nb_elements=True, value_types=("str", "float", "int", "uri", "email"), ) claim_value = ClaimValueFactory.build( claim_name=claim_name, components=components ) expected = {} query_results = [(claim_name, claim_value)] assert sut.ClaimsSerializer.serialize(query_results) == expected def test_absent_serializer(self, faker, mocker): claim_name = ClaimNameFactory.build(claim_values_serializer=None) components = faker.pydict( variable_nb_elements=True, value_types=("str", "float", "int", "uri", "email"), ) claim_value = ClaimValueFactory.build( claim_name=claim_name, components=components ) expected = {} query_results = [(claim_name, claim_value)] assert sut.ClaimsSerializer.serialize(query_results) == expected