Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }