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 ConstructingAInsolvencyResponse_WithAddressResolverProvided_ConstructsInsolvencyResponse()
        {
            // Arrange
            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

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

            // Assert
            Assert.IsNotNull(responseObject);
        }
        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_WithAValidInsolvency_ShouldSetResponseProperties()
        {
            // Arrange
            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            var expectedInsolvency = Helpers.TestHelpers.CreateInsolvency();
            var responseObject     = new InsolvencyOrderResponse(addressResolverMock.Object, includeReader.Object);

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

            // Assert
            halRootObject.ShouldHaveModel(expectedInsolvency);
        }
        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 ConfiguringAnInsolvencyAsHal_WithAValidInsolvency_ShouldSetEmbeddedLinks()
        {
            // Arrange
            var expectedLinks = new List <Link>
            {
                new Link(DomainResources.InsolvencyOrder, CommonLinks.Self),
                new Link(DomainResources.InsolvencyOrders, CommonLinks.Parent),
            };

            var expectedInsolvency  = Helpers.TestHelpers.CreateInsolvency();
            var addressResolverMock = new Mock <IAddressResolver>();
            var includeReader       = new Mock <IIncludeReader>();

            addressResolverMock.Setup(s => s.GetLink(It.IsAny <string>(), It.IsAny <string>()))
            .Returns((string routeName, string linkName) => new Link(routeName, linkName));

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

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

            // Assert
            halRootObject.ShouldHaveLinks(expectedLinks);
        }