public void LineWriterTest() { var invoiceItems = new List <InvoiceItem> { new InvoiceItem() { Number = 1, Description = "Laptop Dell xps13", Quantity = 1, Price = 821.00m }, new InvoiceItem() { Number = 2, Description = "Monitor Asus 32''", Quantity = 2, Price = 478.00m } }; List <string> resultLinesAlpha = new FixedWidthLinesProvider <InvoiceItem>().Write(invoiceItems, (int)ConfigType.Alpha); List <string> resultLinesBeta = new FixedWidthLinesProvider <InvoiceItem>().Write(invoiceItems, (int)ConfigType.Beta); string resultAlpha = string.Empty; foreach (var line in resultLinesAlpha) { resultAlpha += line + Environment.NewLine; } string resultBeta = string.Empty; foreach (var line in resultLinesBeta) { resultBeta += line + Environment.NewLine; } List <string> expectedLinesAlpha = GetDataLines(ConfigType.Alpha); string expectedAlpha = string.Empty; foreach (var line in expectedLinesAlpha) { expectedAlpha += line + Environment.NewLine; } ; List <string> expectedLinesBeta = GetDataLines(ConfigType.Beta); string expectedBeta = string.Empty; foreach (var line in expectedLinesBeta) { expectedBeta += line + Environment.NewLine; } ; Assert.Equal(expectedAlpha, resultAlpha); Assert.Equal(expectedBeta, resultBeta); }
public void TypedLineParserTest() { var dataLines = GetTypedDataLines(); var actualClients = new Stack <Client>(); var clientProvider = new FixedWidthLinesProvider <Client>(); var invoceProvider = new FixedWidthLinesProvider <InvoiceItem>(); for (int i = 0; i < dataLines.Count; i++) { string line = dataLines[i]; char recordType = line[0]; switch (recordType) { case '1': actualClients.Push(clientProvider.Parse(line)); break; case '2': actualClients.Peek().Invoices.Add(invoceProvider.Parse(line, (int)ConfigType.Omega)); break; default: throw new ArgumentException($"Invalid data type at line {i}"); } } var expectedClients = new List <Client> { new Client() { Name = "John Mike" }, new Client() { Name = "Miranda Klein" } }; var invoiceItems = new List <InvoiceItem> { new InvoiceItem() { Number = 1, Description = "Laptop Dell xps13", Quantity = 1, Price = 821.00m }, new InvoiceItem() { Number = 2, Description = "Monitor Asus 32''", Quantity = 2, Price = 478.00m }, new InvoiceItem() { Number = 3, Description = "Generic Keyboard", Quantity = 1, Price = 19.00m } }; expectedClients[0].Invoices = invoiceItems; invoiceItems = new List <InvoiceItem> { new InvoiceItem() { Number = 1, Description = "Laptop HP DM4", Quantity = 1, Price = 372.00m }, new InvoiceItem() { Number = 2, Description = "Monitor Asus 24''", Quantity = 1, Price = 298.00m }, }; expectedClients[1].Invoices = invoiceItems; for (int i = 0; i < 2; i++) { var actualClient = actualClients.ToArray()[1 - i]; var actualInvoiceItems = actualClient.Invoices; var expectedInvoiceItems = expectedClients[i].Invoices; Assert.Equal(expectedClients[i].Name, actualClient.Name); for (int j = 0; j < actualClient.Invoices.Count; j++) { Assert.Equal(expectedInvoiceItems[j].Number, actualInvoiceItems[j].Number); Assert.Equal(expectedInvoiceItems[j].Description, actualInvoiceItems[j].Description); Assert.Equal(expectedInvoiceItems[j].Quantity, actualInvoiceItems[j].Quantity); Assert.Equal(expectedInvoiceItems[j].Price, actualInvoiceItems[j].Price); Assert.Equal(expectedInvoiceItems[j].Amount, actualInvoiceItems[j].Amount); } } Assert.Equal(expectedClients[0].Name, actualClients.ToArray()[1].Name); Assert.True(actualClients.ToArray()[0].Invoices.Count == 2); Assert.Equal(expectedClients[1].Name, actualClients.ToArray()[0].Name); Assert.True(actualClients.ToArray()[1].Invoices.Count == 3); }