Esempio n. 1
0
        public static void Presence_of_concreteType_token_does_not_interfere_with_normal_deserialization()
        {
            // Arrange
            var expectedId            = "year-field";
            var expectedDecimalPlaces = 5;
            var expectedTitle         = "my-title";

            var year = new YearField(expectedId)
            {
                NumberOfDecimalPlaces = expectedDecimalPlaces,
                Title = expectedTitle,
            };

            var serializer = new NaosJsonSerializer(typeof(GenericDiscoveryJsonConfiguration <Field>));

            var jsonWithConcreteType = serializer.SerializeToString(year);

            var settings = new NullJsonConfiguration().BuildJsonSerializerSettings(SerializationDirection.Deserialize);

            settings.Converters = new JsonConverter[0];

            // Act
            var actual = JsonConvert.DeserializeObject <YearField>(jsonWithConcreteType, settings);

            // Assert
            typeof(YearField).IsAssignableTo(typeof(Field)).Should().BeTrue();
            jsonWithConcreteType.Should().Contain("$concreteType");
            actual.Id.Should().Be(expectedId);
            actual.NumberOfDecimalPlaces.Should().Be(expectedDecimalPlaces);
            actual.Title.Should().Be(expectedTitle);
        }
        public static void RoundtripSerializeDeserialize___Using_Field_NumberField_YearField__Works()
        {
            // Arrange
            var bsonConfigType = typeof(GenericDiscoveryBsonConfiguration <Field>);
            var jsonConfigType = typeof(GenericDiscoveryJsonConfiguration <Field>);

            var expectedId1 = "my-field-1";
            var expectedId2 = "my-field-2";

            var expectedTitle1 = "my-title-1";
            var expectedTitle2 = "my-title-2";

            var expectedNumberOfDecimalPlaces1 = 2;
            var expectedNumberOfDecimalPlaces2 = 4;

            var expected1 = new NumberField(expectedId1)
            {
                Title = expectedTitle1,
                NumberOfDecimalPlaces = expectedNumberOfDecimalPlaces1,
            };

            var expected2 = new YearField(expectedId2)
            {
                Title = expectedTitle2,
                NumberOfDecimalPlaces = expectedNumberOfDecimalPlaces2,
            };

            void ThrowIfObjectsDiffer1(DescribedSerialization serialized, NumberField deserialized)
            {
                (deserialized is YearField).Should().BeFalse();

                deserialized.Should().NotBeNull();
                deserialized.Id.Should().Be(expectedId1);
                deserialized.FieldDataKind.Should().Be(FieldDataKind.NumberWithDecimals);
                deserialized.NumberOfDecimalPlaces.Should().Be(expectedNumberOfDecimalPlaces1);
                deserialized.Title.Should().Be(expectedTitle1);
            }

            void ThrowIfObjectsDiffer2(DescribedSerialization serialized, YearField deserialized)
            {
                deserialized.Should().NotBeNull();
                deserialized.Id.Should().Be(expectedId2);
                deserialized.FieldDataKind.Should().Be(FieldDataKind.Year);
                deserialized.NumberOfDecimalPlaces.Should().Be(expectedNumberOfDecimalPlaces2);
                deserialized.Title.Should().Be(expectedTitle2);
            }

            // Act & Assert
            expected1.RoundtripSerializeWithCallback(ThrowIfObjectsDiffer1, jsonConfigType, bsonConfigType);
            expected2.RoundtripSerializeWithCallback(ThrowIfObjectsDiffer2, jsonConfigType, bsonConfigType);
        }