public void Convert_PassJsonWithoutLastProperty_ReturnsEmptyCollection()
        {
            // Arrange
            var converter = new JustForTestConverter();
            var entity    = GetEntityAsJson().Take(GetEntityAsJson().Count() - 1).ToArray();

            // Act
            var result = converter.Convert <JustForTestEntity>(entity);

            //Assert
            result.ShouldBeEmpty();
        }
        public void Convert_PassEmptyJson_ReturnsEmptyCollection()
        {
            // Arrange
            var converter = new JustForTestConverter();
            var entity    = Enumerable.Empty <string>();

            // Act
            var result = converter.Convert <JustForTestEntity>(entity);

            //Assert
            result.ShouldBeEmpty();
        }
        public void Convert_PassJsoWithOneEntity_ReturnsCollectionWithOneEntity()
        {
            // Arrange
            var expectedEntity = GetExpectedEntity();
            var converter      = new JustForTestConverter();
            var entity         = GetEntityAsJson().ToArray();

            // Act
            var result = converter.Convert <JustForTestEntity>(entity);

            // Assert
            result.ShouldSatisfyAllConditions(
                () => result.ShouldHaveSingleItem(),
                () => result.ShouldContain(
                    x => x.First == expectedEntity.First &&
                    x.Second == expectedEntity.Second &&
                    x.Last == expectedEntity.Last));
        }
        public void Convert_PassJsoWithSeveralEntities_ReturnsCollectionSeveralEntities()
        {
            // Arrange
            const int twoItems       = 2;
            var       converter      = new JustForTestConverter();
            var       expectedEntity = GetExpectedEntity();
            var       entity         = GetEntityAsJson().Concat(GetEntityAsJson()).ToArray();

            // Act
            var result = converter.Convert <JustForTestEntity>(entity);

            // Assert
            result.ShouldSatisfyAllConditions(
                () => result.Count().ShouldBe(twoItems),
                () => result.ShouldContain(
                    x => x.First == expectedEntity.First &&
                    x.Second == expectedEntity.Second &&
                    x.Last == expectedEntity.Last));
        }
        public void Convert_PassJsonWithInvalidProperty_ReturnsValidEntity()
        {
            // Arrange
            var          expectedEntity = GetExpectedEntity();
            const string invalidPropertyValue = " \"Invalid\": 1";
            var          entity = new[] { invalidPropertyValue }.Union(GetEntityAsJson()).ToArray();
            var          converter = new JustForTestConverter();

            // Act
            var result = converter.Convert <JustForTestEntity>(entity);

            // Assert
            result.ShouldSatisfyAllConditions(
                () => result.ShouldHaveSingleItem(),
                () => result.ShouldContain(
                    x => x.First == expectedEntity.First &&
                    x.Second == expectedEntity.Second &&
                    x.Last == expectedEntity.Last));
        }
        public void Convert_AddCustomConverterForProperty_ReturnsCollectionWithCustomConverterPropertyAtEntity()
        {
            // Arrange
            const string propertyToMultiply = "First";
            const int    TenMultiplier      = 10;
            var          expectedEntity     = GetExpectedEntity();
            var          entity             = GetEntityAsJson().ToArray();
            var          converter          = new JustForTestConverter();

            converter.AddPropertyConverter(propertyToMultiply, x => Convert.ToInt32(x) * TenMultiplier);

            // Act
            var result = converter.Convert <JustForTestEntity>(entity);

            // Assert
            result.ShouldSatisfyAllConditions(
                () => result.ShouldHaveSingleItem(),
                () => result.ShouldContain(
                    x => x.First == expectedEntity.First * TenMultiplier &&
                    x.Second == expectedEntity.Second &&
                    x.Last == expectedEntity.Last));
        }
        public void Convert_AddPropertyMapping_ReturnsCollectionWithEntityWhereOriginalPropertyHasMappedValue()
        {
            // Arrange
            const int    mappedValue = 222;
            const string originalProperty = "First";
            const string propertyFromJson = "Mapped";
            var          mappedPropertyValue = $" \"{propertyFromJson}\": {mappedValue}";
            var          expectedEntity = GetExpectedEntity();
            var          entity = new[] { mappedPropertyValue }.Union(GetEntityAsJson().Where(x => !x.Contains(originalProperty))).ToArray();
            var          converter = new JustForTestConverter();

            converter.AddPropertyMapping(originalProperty, propertyFromJson);

            // Act
            var result = converter.Convert <JustForTestEntity>(entity);

            // Assert
            result.ShouldSatisfyAllConditions(
                () => result.ShouldHaveSingleItem(),
                () => result.ShouldContain(
                    x => x.First == mappedValue &&
                    x.Second == expectedEntity.Second &&
                    x.Last == expectedEntity.Last));
        }