public CompanyCharges Build(CompaniesHouseCompanyChargesClientTestCase testCase)
        {
            var fixture = new Fixture();

            fixture.Customizations.Add(new UniversalDateSpecimenBuilder <ChargeItem>(x => x.ResolvedOn));
            fixture.Customizations.Add(new UniversalDateSpecimenBuilder <ChargeItem>(x => x.SatisfiedOn));
            fixture.Customizations.Add(new UniversalDateSpecimenBuilder <ChargeItem>(x => x.AcquiredOn));
            fixture.Customizations.Add(new UniversalDateSpecimenBuilder <ChargeItem>(x => x.CoveringInstrumentDate));
            fixture.Customizations.Add(new UniversalDateSpecimenBuilder <ChargeItem>(x => x.CreatedOn));
            fixture.Customizations.Add(new UniversalDateSpecimenBuilder <ChargeItem>(x => x.DeliveredOn));


            var insolvencyCases = fixture.Build <InsolvencyCases>()
                                  .CreateMany(2).ToList();

            var personsEntitled = fixture.Build <PersonsEntitled>()
                                  .CreateMany(2).ToList();

            var transactions = fixture.Build <Transaction>()
                               .With(x => x.FilingType, testCase.Filing)
                               .CreateMany(2).ToList();

            var securedDetails = fixture.Build <SecuredDetails>()
                                 .With(x => x.Type, testCase.SecuredDetails)
                                 .Create();

            var link = fixture.Build <Links>()
                       .Create();


            var classification = fixture.Build <Classification>()
                                 .With(x => x.ClassificationType, testCase.Classification)
                                 .Create();

            var particular = fixture.Build <Particulars>()
                             .With(x => x.Type, testCase.Particulars)
                             .Create();

            var items = fixture.Build <ChargeItem>()
                        .With(x => x.StatusType, testCase.Status)
                        .With(x => x.AssetsCeasedReleasedType, testCase.AssetsCeasedReleased)
                        .With(x => x.InsolvencyCases, insolvencyCases)
                        .With(x => x.PersonsEntitled, personsEntitled)
                        .With(x => x.Transactions, transactions)
                        .With(x => x.Classification, classification)
                        .With(x => x.SecuredDetails, securedDetails)
                        .With(x => x.Particulars, particular)
                        .With(x => x.Links, link)
                        .CreateMany(2).ToList();

            var companyCharges = fixture.Build <CompanyCharges>()
                                 .With(x => x.Items, items)
                                 .With(x => x.PartSatisfiedCount, items.Count)
                                 .With(x => x.SatisfiedCount, items.Count)
                                 .With(x => x.TotalCount, items.Count)
                                 .With(x => x.UnfilteredCount, items.Count)
                                 .Create();

            return(companyCharges);
        }
        public void GivenACompaniesHouseCompanyProfileClient_WhenGettingACompanyProfile(CompaniesHouseCompanyChargesClientTestCase testCase)
        {
            _companyCharges = new CompanyChargesBuilder().Build(testCase);
            var resource = new CompanyChargesResourceBuilder(_companyCharges)
                           .Create();

            var uri = new Uri("https://wibble.com/search/companies");

            HttpMessageHandler handler = new StubHttpMessageHandler(uri, resource);

            var uriBuilder = new Mock <ICompanyChargesUriBuilder>();

            uriBuilder.Setup(x => x.Build(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>()))
            .Returns(uri);

            var uriItemBuilder = new Mock <IChargeItemUriBuilder>();

            uriItemBuilder.Setup(x => x.Build(It.IsAny <string>(), It.IsAny <string>()))
            .Returns(uri);


            _client = new CompaniesHouseCompanyChargesClient(new HttpClient(handler), uriBuilder.Object, uriItemBuilder.Object);

            _result = _client.GetCompanyChargesAsync("abc", 0, 25).Result;

            _result.Data.ShouldBeEquivalentTo(_companyCharges, options => options.ComparingEnumsByName());
        }