public void CompanysAllExistInDatabaseAlready()
        {
            var companyRepositoryResult = CompanyFinderResult.Select(d => Company.Create(d.Value, d.Key, Company.ConstituentOfIndex.Unknown));
            this.SetupMocks(CompanyFinderResult, companyRepositoryResult);
            var service = new CompanyDataManagementService(companyFinderService.Object, companyRepository.Object);
            service.GetNewCompanies();

            companyRepository.Verify(m => m.InsertAll(It.IsAny<IEnumerable<Company>>()), Times.Never);
        }
        public void CompanyDoesntExistInDatabase()
        {
            var companyRepositoryResult = CompanyFinderResult.Select(d => Company.Create(d.Value, d.Key, Company.ConstituentOfIndex.Unknown));
            this.SetupMocks(CompanyFinderResult, companyRepositoryResult.Skip(1).Take(2));
            var service = new CompanyDataManagementService(companyFinderService.Object, companyRepository.Object);
            service.GetNewCompanies();

            companyRepository.Verify(m => m.InsertAll(It.Is<IEnumerable<Company>>(c => c.Count() == 1)), Times.Once);
            companyRepository.Verify(m => m.InsertAll(It.Is<IEnumerable<Company>>(c => c.Count(r => r.Name == "Test 1") == 1)), Times.Once);
        }
        public void UpdateCompanyMetaDataTest()
        {
            var ftse100 = new Dictionary<string, string> { { "TST", "Test Company"}, { "HI", "Another company"}};
            var ftse250 = new Dictionary<string, string> { { "HOD", "HOD Company" }, { "HEL", "Hello company" } };
            var smallCap = new Dictionary<string, string> { { "SMA", "Small Company" }, { "ASC", "Another small company" } };
            this.companyFinderService.Setup(m => m.GetFtseIndex(Company.ConstituentOfIndex.Ftse100)).Returns(ftse100);
            this.companyFinderService.Setup(m => m.GetFtseIndex(Company.ConstituentOfIndex.Ftse250)).Returns(ftse250);
            this.companyFinderService.Setup(m => m.GetFtseIndex(Company.ConstituentOfIndex.SmallCap)).Returns(smallCap);

            var companiesInDb = new[]
                {
                    Company.Create("", "TST.L", Company.ConstituentOfIndex.Unknown),
                    Company.Create("", "HI.L", Company.ConstituentOfIndex.Unknown),
                    Company.Create("", "HOD.L", Company.ConstituentOfIndex.Unknown),
                    Company.Create("", "HEL.L", Company.ConstituentOfIndex.Unknown),
                    Company.Create("", "SMA.L", Company.ConstituentOfIndex.Unknown),
                    Company.Create("", "NOT.L", Company.ConstituentOfIndex.Unknown),
                };
            this.companyRepository.Setup(m => m.FindAll()).Returns(companiesInDb);
            var service = new CompanyDataManagementService(this.companyFinderService.Object, this.companyRepository.Object);
            service.UpdateCompanyMetaData();
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Count() == 2)), Times.Exactly(2));
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Count() == 1)), Times.Exactly(1));
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Any(e => e.Symbol == "TST.L" && e.Index == Company.ConstituentOfIndex.Ftse100))));
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Any(e => e.Symbol == "HI.L" && e.Index == Company.ConstituentOfIndex.Ftse100))));
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Any(e => e.Symbol == "HOD.L" && e.Index == Company.ConstituentOfIndex.Ftse250))));
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Any(e => e.Symbol == "HEL.L" && e.Index == Company.ConstituentOfIndex.Ftse250))));
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Any(e => e.Symbol == "SMA.L" && e.Index == Company.ConstituentOfIndex.SmallCap))));
            this.companyRepository.Verify(m => m.UpdateAll(It.Is<IEnumerable<Company>>(c => c.Any(e => e.Symbol == "NOT.L"))), Times.Never);
        }