public void ExportDataAsCsv_TwoYears_DifferentCountOfOwners() { CompanyOutputData companyOutputData = new CompanyOutputData { ICO = "123", Name = "Test company", OwnersByYears = new Dictionary <int, List <OwnerInfo> >() { { 2011, new List <OwnerInfo> { new OwnerInfo { LegalFormOfOwner = "s.r.o", CountryOfOwner = "Czech republic", OwnerCountrySign = "DOM", OwnerType = "FO", OwnerShare = "51", FromTime = DateTime.ParseExact("01.01.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture), ToTime = DateTime.ParseExact("31.12.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture), IsValid = "1", }, new OwnerInfo { LegalFormOfOwner = "s.r.o", CountryOfOwner = "USA", OwnerCountrySign = "FOR", OwnerType = "FO", OwnerShare = "49", FromTime = DateTime.ParseExact("01.01.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture), ToTime = DateTime.ParseExact("31.12.2011", "dd.MM.yyyy", CultureInfo.CurrentCulture), IsValid = "1", } } }, { 2012, new List <OwnerInfo> { new OwnerInfo { LegalFormOfOwner = "s.r.o", CountryOfOwner = "Czech republic", OwnerCountrySign = "DOM", OwnerType = "FO", OwnerShare = "100", FromTime = DateTime.ParseExact("01.01.2012", "dd.MM.yyyy", CultureInfo.CurrentCulture), ToTime = DateTime.ParseExact("31.12.2012", "dd.MM.yyyy", CultureInfo.CurrentCulture), IsValid = "1", }, } } } }; var dataExporter = new CsvDataExporter(); var result = dataExporter.TransformCompanyDataToCsvString(companyOutputData); var expectedResult = "123;Test company;s.r.o;Czech republic;DOM;51;FO;s.r.o;USA;FOR;49;FO;;;;;;s.r.o;Czech republic;DOM;100;FO;;;;;;;;;;;"; Console.WriteLine(expectedResult); Console.WriteLine(result); Assert.AreEqual(expectedResult, result); }
public string TransformCompanyDataToCsvString(CompanyOutputData companyData) { var basicCompanyInfo = $"{companyData.ICO};{companyData.Name}"; var companyDataByYears = ""; for (int currentYear = START_YEAR; currentYear <= END_YEAR; currentYear++) { if (companyData.OwnersByYears.ContainsKey(currentYear)) { companyData.OwnersByYears[currentYear].Sort(delegate(OwnerInfo x, OwnerInfo y) { if (x.OwnerShare == null && y.OwnerShare == null) { return(0); } else if (x.OwnerShare == null) { return(-1); } else if (y.OwnerShare == null) { return(1); } else { return(y.OwnerShare.CompareTo(x.OwnerShare)); } }); var ownersCount = companyData.OwnersByYears[currentYear].Count; var ownerData = ownersCount > COUNT_OF_TOP_OWNERS ? companyData.OwnersByYears[currentYear].GetRange(0, COUNT_OF_TOP_OWNERS - 1) : companyData.OwnersByYears[currentYear]; foreach (var owner in ownerData) { // Remove companies (from result csv) with not numeric owner share if (!double.TryParse(owner.OwnerShare, out _)) { return(null); } companyDataByYears += $"{owner.LegalFormOfOwner};{owner.CountryOfOwner};{owner.OwnerCountrySign};{owner.OwnerShare};{owner.OwnerType};"; } if (ownersCount < COUNT_OF_TOP_OWNERS) { var missingOwnersCount = COUNT_OF_TOP_OWNERS - ownersCount; for (var i = 0; i < missingOwnersCount; i++) { companyDataByYears += ";;;;;"; } } } } if (companyDataByYears == "") { return(null); } return($"{basicCompanyInfo};{companyDataByYears}"); }