public void ConfiguringAnInsolvencyAsHal_WithDisputesProvided_EmbedsDisputesIntoHalResponse()
        {
            // Arrange
            var expectedDispute = new DisputeModel
            {
                DateRaised        = new DateTime(2017, 10, 12),
                Displayed         = true,
                DisputeId         = 1,
                InsolvencyOrderId = 2,
                ReferenceNumber   = "fdshiu308j"
            };

            var expectedInsolvency = new InsolvencyOrderModel {
                Disputes = new List <DisputeModel> {
                    expectedDispute
                }
            };

            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            includeReader.Setup(x => x.GetIncludes()).Returns(new string[] { "disputes" });

            var responseObject = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);

            // Act
            var halResponse = responseObject.FormatForHal(expectedInsolvency);

            // Assert
            halResponse.ShouldHaveEmbeddedCollection(DomainResources.Disputes_camelCase, expectedInsolvency.Disputes);
        }
        public void ConfiguringAnInsolvencyAsHal_SettingHalForceTrue_ConfiguresForceHalTrue()
        {
            // Arrange
            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            var responseObject = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);
            var insolvency     = new InsolvencyOrderModel();

            // Act
            var halResponse = responseObject.FormatForHal(insolvency);

            // Assert
            Assert.IsTrue(halResponse.Config.ForceHAL);
        }
        public void ConfiguringAnInsolvencyAsHal_WithNullDataProvided_ThrowsArgumentNullException()
        {
            // Arrange
            InsolvencyOrderModel insolvency = null;
            var addressResolverMock         = new Mock <IAddressResolver>();
            var includeReader = new Mock <IIncludeReader>();

            var responseObject = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);

            // Act
            void CreateHalResponse() => responseObject.FormatForHal(insolvency);

            // Assert
            Assert.ThrowsException <ArgumentNullException>((Action)CreateHalResponse);
        }
        public void ConfiguringAnInsolvencyAsHal_WithDataProvided_CreatesHalConfigurationModelEqualToTheProvidedData()
        {
            // Arrange
            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            var responseObject = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);

            var expectedInsolvency = new InsolvencyOrderModel();

            // Act
            var halResponse = responseObject.FormatForHal(expectedInsolvency);

            // Assert
            halResponse.ShouldHaveModel(expectedInsolvency);
        }
        public void ConfiguringAnInsolvencyAsHal_WithDataProvided_CreatesHalConfigurationForTheData()
        {
            // Arrange
            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            var responseObject = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);

            var insolvency = new InsolvencyOrderModel();

            // Act
            var halResponse = responseObject.FormatForHal(insolvency);

            // Assert
            Assert.IsNotNull(halResponse);
        }
        public void ConfiguringAnInsolvencyAsHal_WithACallToGetALinkToTheInsolvencyCollectionInTheConfiguration_CallsGetLink()
        {
            // Arrange
            const string routeName = DomainResources.InsolvencyOrders;
            const string linkName  = CommonLinks.Parent;

            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            var responseObject     = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);
            var expectedInsolvency = new InsolvencyOrderModel();

            // Act
            responseObject.FormatForHal(expectedInsolvency);

            // Assert
            addressResolverMock.Verify(mock => mock.GetLink(routeName, linkName), Times.Once);
        }
        public void ConfiguringAnInsolvencyAsHal_WithACallToGetTheSelfLinkInTheConfiguration_CallsGetLinkForTwoLinks()
        {
            // Arrange
            const int NumberOfGetLinkCalls = 7;

            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            var responseObject     = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);
            var expectedInsolvency = new InsolvencyOrderModel();

            var numberOfTimesGetLinkWasCalled = Times.Exactly(NumberOfGetLinkCalls);

            // Act
            responseObject.FormatForHal(expectedInsolvency);

            // Assert
            addressResolverMock.Verify(mock => mock.GetLink(It.IsAny <string>(), It.IsAny <string>()), numberOfTimesGetLinkWasCalled);
        }
        public void ConfiguringAnInsolvencyAsHal_WithNullDataProvided_HasCorrectParameterNameInException()
        {
            // Arrange
            const string expectedParameterName = "item";

            InsolvencyOrderModel insolvency = null;
            var addressResolverMock         = new Mock <IAddressResolver>();
            var includeReader = new Mock <IIncludeReader>();

            var responseObject = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);

            // Act
            void CreateHalResponse() => responseObject.FormatForHal(insolvency);

            // Assert
            ExceptionAssert.HasCorrectParameterNameForArgumentException(
                CreateHalResponse,
                expectedParameterName);
        }
        public void ConfiguringAnInsolvencyAsHal_WithZeroDisputesProvided_EmbedsEmptyDisputeIntoHalResponse()
        {
            // Arrange
            var expectedInsolvency = new InsolvencyOrderModel {
                Disputes = new List <DisputeModel>()
            };

            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            includeReader.Setup(x => x.GetIncludes()).Returns(new string[] { "disputes" });

            var responseObject = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);

            // Act
            var halResponse = responseObject.FormatForHal(expectedInsolvency);

            // Assert
            halResponse.ShouldHaveEmbeddedCollection(DomainResources.Disputes_camelCase, expectedInsolvency.Disputes);
        }
        public void ConfiguringAnInsolvencyAsHal_WithAllLinkCallsInTheConfiguration_DoesntAskForMoreLinksThanItNeeds()
        {
            // Arrange
            const int insolvencyOrderId    = 12345;
            const int NumberOfGetLinkCalls = 7;

            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            var responseObject     = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);
            var expectedInsolvency = new InsolvencyOrderModel {
                InsolvencyOrderId = insolvencyOrderId
            };

            var callsToGetLink = Times.Exactly(NumberOfGetLinkCalls);

            // Act
            responseObject.FormatForHal(expectedInsolvency);

            // Assert
            addressResolverMock.Verify(mock => mock.GetLink(It.IsAny <string>(), It.IsAny <string>()), callsToGetLink);
        }
        public void MappingInsolvencyOrderEntityToModel_WithConfiguredModelMapping_ReturnsEqualModel()
        {
            // Arrange
            AutoMapper.Mapper.Reset();
            ModelMappingConfiguration.CreateModelMapping();

            var insolvencyOrderEntity =
                new InsolvencyOrderEntity()
            {
                InsolvencyOrderId     = 1,
                InsolvencyOrderTypeId = 2,
                InsolvencyOrderType   =
                    new InsolvencyOrderTypeEntity()
                {
                    InsolvencyOrderTypeId   = 2,
                    CallReportCode          = "code1",
                    Description             = "type desc",
                    InsolvencyOrderEntities = null
                },
                ResidenceId                = 3,
                OrderDate                  = DateTime.Parse("2014-02-15"),
                RestrictionsTypeId         = 4,
                InsolvencyRestrictionsType =
                    new InsolvencyRestrictionsTypeEntity()
                {
                    RestrictionsTypeId = 4,
                    Code                    = "A",
                    Description             = "restriction description",
                    InsolvencyOrderEntities = null
                },
                RestrictionsStartDate   = DateTime.Parse("2015-02-15"),
                RestrictionsEndDate     = DateTime.Parse("2015-04-15"),
                LineOfBusiness          = "Entertainer",
                InsolvencyServiceCaseId = 5,
                ValueOfDebt             = 5000,
                DischargeDate           = DateTime.Parse("2017-02-15"),
                InsolvencyOrderPersons  =
                    new List <InsolvencyOrderPersonEntity>()
                {
                    new InsolvencyOrderPersonEntity()
                    {
                        InsolvencyOrderPersonId = 8,
                        InsolvencyOrderId       = 1,
                        DateOfBirth             = DateTime.Parse("1990, 07, 21"),
                        Forename = "John",
                        Surname  = "Smith",
                        Title    = "Mr"
                    }
                },
                InsolvencyOrderAddresses =
                    new List <InsolvencyOrderAddressEntity>()
                {
                    new InsolvencyOrderAddressEntity()
                    {
                        InsolvencyOrderAddressId = 9,
                        InsolvencyOrderId        = 1,
                        LastKnownAddress         = "12 Low Street",
                        LastKnownPostCode        = "OX4 3PE"
                    }
                },
                InsolvencyOrderHistory =
                    new List <InsolvencyOrderHistoryEntity>()
                {
                    new InsolvencyOrderHistoryEntity()
                    {
                        InsolvencyOrderHistoryId = 10,
                        InsolvencyOrderId        = 1,
                        CaseReference            = "1234",
                        CaseYear = 2014,
                        CourtId  = 11,
                        Court    =
                            new CourtEntity()
                        {
                            CourtId   = 11,
                            CourtCode = "AB",
                            CourtName = "The Old Bailey",
                            District  = "Nine"
                        }
                    }
                },
                InsolvencyTradingDetails =
                    new List <InsolvencyTradingDetailsEntity>()
                {
                    new InsolvencyTradingDetailsEntity()
                    {
                        InsolvencyTradingId = 12,
                        InsolvencyOrderId   = 1,
                        TradingAddress      = "20 High Street",
                        TradingName         = "Tescos"
                    }
                },
                InsolvencyOrderDisputes =
                    new List <InsolvencyOrderDisputeEntity>()
                {
                    new InsolvencyOrderDisputeEntity()
                    {
                        DisputeId         = 13,
                        InsolvencyOrderId = 1,
                        Deleted           = false,
                        Dispute           =
                            new DisputeEntity()
                        {
                            DisputeId  = 13,
                            DateRaised = DateTime.Parse("2016-08-14"),
                            Deleted    = false,
                            Displayed  = true,
                            InsolvencyOrderDisputes = null,
                            RefNum = "7890"
                        },
                        InsolvencyOrder = null
                    }
                }
            };

            InsolvencyOrderModel expected =
                new InsolvencyOrderModel()
            {
                InsolvencyOrderId     = 1,
                InsolvencyOrderTypeId = 2,
                InsolvencyOrderType   =
                    new InsolvencyOrderTypeModel()
                {
                    InsolvencyOrderTypeId = 2,
                    Code        = "code1",
                    Description = "type desc"
                },
                ResidenceId        = 3,
                OrderDate          = DateTime.Parse("2014-02-15"),
                RestrictionsTypeId = 4,
                RestrictionsType   =
                    new InsolvencyOrderRestrictionsTypeModel()
                {
                    RestrictionsTypeId = 4,
                    Code        = "A",
                    Description = "restriction description"
                },
                RestrictionsStartDate   = DateTime.Parse("2015-02-15"),
                RestrictionsEndDate     = DateTime.Parse("2015-04-15"),
                LineOfBusiness          = "Entertainer",
                InsolvencyServiceCaseId = 5,
                ValueOfDebt             = 5000,
                DischargeDate           = DateTime.Parse("2017-02-15"),
                InsolvencyOrderPersons  =
                    new List <InsolvencyOrderPersonModel>()
                {
                    new InsolvencyOrderPersonModel()
                    {
                        InsolvencyOrderPersonId = 8,
                        InsolvencyOrderId       = 1,
                        DateOfBirth             = DateTime.Parse("1990, 07, 21"),
                        Forename = "John",
                        Surname  = "Smith",
                        Title    = "Mr"
                    }
                },
                InsolvencyOrderAddresses =
                    new List <InsolvencyOrderAddressModel>()
                {
                    new InsolvencyOrderAddressModel()
                    {
                        InsolvencyOrderAddressId = 9,
                        InsolvencyOrderId        = 1,
                        Address  = "12 Low Street",
                        PostCode = "OX4 3PE"
                    }
                },
                InsolvencyOrderHistories =
                    new List <InsolvencyOrderHistoryModel>()
                {
                    new InsolvencyOrderHistoryModel()
                    {
                        InsolvencyOrderHistoryId = 10,
                        InsolvencyOrderId        = 1,
                        CaseReference            = "1234",
                        CaseYear = 2014,
                        CourtId  = 11,
                        Court    =
                            new CourtModel()
                        {
                            CourtId  = 11,
                            Code     = "AB",
                            Name     = "The Old Bailey",
                            District = "Nine"
                        }
                    }
                },
                InsolvencyOrderTradingDetails =
                    new List <InsolvencyOrderTradingDetailsModel>()
                {
                    new InsolvencyOrderTradingDetailsModel()
                    {
                        InsolvencyOrderTradingDetailsId = 12,
                        InsolvencyOrderId = 1,
                        Address           = "20 High Street",
                        Name = "Tescos"
                    }
                },
                Disputes =
                    new List <DisputeModel>()
                {
                    new DisputeModel()
                    {
                        DisputeId         = 13,
                        InsolvencyOrderId = 1,
                        DateRaised        = DateTime.Parse("2016-08-14"),
                        Displayed         = true,
                        ReferenceNumber   = "7890"
                    }
                }
            };

            // Act
            var actual = AutoMapper.Mapper.Map <InsolvencyOrderModel>(insolvencyOrderEntity);

            // Assert
            Assert.IsTrue(new InsolvencyModelEqualityComparer().Equals(expected, actual));
        }