public async Task Should_Import_new_Column_data_into_db_from_excel()
        {
            var excelIoWrapper     = new FakeExcelIo();
            var importer           = new XlsxToTableImporter(GetDb(), excelIoWrapper);
            var order              = new Order();
            var importMatchingData = new DataMatchesForImportingOrderData
            {
                FileName = "foo.xlsx",
                Sheet    = "mysheet",
                Selected = new List <XlsToEfColumnPair>
                {
                    XlsToEfColumnPair.Create(() => order.Id, "xlsCol5"),
                    XlsToEfColumnPair.Create("OrderDate", "xlsCol2"),
                    XlsToEfColumnPair.Create(() => order.DeliveryDate, "xlsCol4"),
                },
            };
            await importer.ImportColumnData <Order>(importMatchingData, saveBehavior : new ImportSaveBehavior {
                RecordMode = RecordMode.Upsert
            });

            var updatedItem = GetDb().Set <Order>().First();

            updatedItem.OrderDate.ShouldBe(new DateTime(2014, 8, 15));
            updatedItem.DeliveryDate.ShouldBe(new DateTime(2015, 9, 22));
        }
        public async Task Should_Return_No_Validation_Errors()
        {
            var orderDate      = DateTime.Today;
            var objectToUpdate = new Order
            {
                Id        = 346,
                OrderDate = orderDate,
            };

            await PersistToDatabase(objectToUpdate);

            var excelIoWrapper     = new FakeExcelIo();
            var importer           = new XlsxToTableImporter(GetDb(), excelIoWrapper);
            var order              = new Order();
            var importMatchingData = new DataMatchesForImportingOrderData
            {
                FileName = "foo.xlsx",
                Sheet    = "mysheet",
                Selected = new List <XlsToEfColumnPair>
                {
                    XlsToEfColumnPair.Create(() => order.Id, "xlsCol5"),
                    XlsToEfColumnPair.Create("OrderDate", "xlsCol2"),
                    XlsToEfColumnPair.Create(() => order.DeliveryDate, "xlsCol4"),
                },
            };

            var orderValidator = new EmptyTestValidator();
            var result         = await importer.ImportColumnData <Order, int>(importMatchingData, validator : orderValidator);

            var valueCollection = result.RowErrorDetails.Values;

            valueCollection.Count.ShouldBe(0);
        }
        public async Task Should_Import_Column_data_matching_nullable_column_without_error()
        {
            var objectToUpdate = new Order
            {
                Id           = 346,
                OrderDate    = DateTime.Today,
                DeliveryDate = null,
            };

            await PersistToDatabase(objectToUpdate);

            var excelIoWrapper     = new FakeExcelIo();
            var importer           = new XlsxToTableImporter(GetDb(), excelIoWrapper);
            var order              = new Order();
            var importMatchingData = new DataMatchesForImportingOrderData
            {
                FileName = "foo.xlsx",
                Sheet    = "mysheet",
                Selected = new List <XlsToEfColumnPair>
                {
                    XlsToEfColumnPair.Create(() => order.Id, "xlsCol5"),
                    XlsToEfColumnPair.Create(() => order.DeliveryDate, "xlsCol2"),
                },
            };
            await importer.ImportColumnData <Order>(importMatchingData);

            var updatedItem = GetDb().Set <Order>().First();

            updatedItem.DeliveryDate.ShouldBe(new DateTime(2014, 8, 15));
        }
        public async Task Should_reject_all_changes_if_all_or_nothing_and_encounters_error()
        {
            var originalOrderDate    = new DateTime(2009, 1, 5);
            var originalDeliveryDate = new DateTime(2010, 5, 7);
            var objectToUpdate       = new Order
            {
                Id           = 346,
                OrderDate    = originalOrderDate,
                DeliveryDate = originalDeliveryDate
            };

            await PersistToDatabase(objectToUpdate);

            var excelIoWrapper       = new FakeExcelIo();
            var badRowIdDoesNotExist = new Dictionary <string, string>
            {
                { "xlsCol5", "999" },
                { "xlsCol2", "12/16/2016" },
                { "xlsCol4", "8/1/2014" }
            };

            excelIoWrapper.Rows.Add(badRowIdDoesNotExist);

            var dbContext          = GetDb();
            var importer           = new XlsxToTableImporter(dbContext, excelIoWrapper);
            var order              = new Order();
            var importMatchingData = new DataMatchesForImportingOrderData
            {
                FileName = "foo.xlsx",
                Sheet    = "mysheet",
                Selected = new List <XlsToEfColumnPair>
                {
                    XlsToEfColumnPair.Create(() => order.Id, "xlsCol5"),
                    XlsToEfColumnPair.Create("OrderDate", "xlsCol2"),
                    XlsToEfColumnPair.Create(() => order.DeliveryDate, "xlsCol4"),
                },
            };
            var results =
                await
                importer.ImportColumnData <Order>(importMatchingData,
                                                  new ImportSaveBehavior
            {
                RecordMode = RecordMode.CreateOnly,
                CommitMode = CommitMode.CommitAllAtEndIfAllGoodOrRejectAll
            });

            results.SuccessCount.ShouldBe(1);
            results.RowErrorDetails.Count.ShouldBe(1);


            var dbSet = dbContext.Set <Order>().ToArray();

            dbSet.Count().ShouldBe(1);
            dbSet
            .Any(x => x.DeliveryDate == originalDeliveryDate && x.OrderDate == originalOrderDate)
            .ShouldBe(true);
        }
        public async Task Should_report_bad_data_and_save_good_data_with_only_updates_allowed_incremental_saves()
        {
            var objectToUpdate = new Order
            {
                Id           = 346,
                OrderDate    = new DateTime(2009, 1, 5),
                DeliveryDate = new DateTime(2010, 5, 7)
            };

            await PersistToDatabase(objectToUpdate);

            var excelIoWrapper       = new FakeExcelIo();
            var badRowIdDoesNotExist = new Dictionary <string, string>
            {
                { "xlsCol5", "999" },
                { "xlsCol2", "12/16/2016" },
                { "xlsCol4", "8/1/2014" }
            };

            excelIoWrapper.Rows.Add(badRowIdDoesNotExist);

            var dbContext          = GetDb();
            var importer           = new XlsxToTableImporter(dbContext, excelIoWrapper);
            var order              = new Order();
            var importMatchingData = new DataMatchesForImportingOrderData
            {
                FileName = "foo.xlsx",
                Sheet    = "mysheet",
                Selected = new List <XlsToEfColumnPair>
                {
                    XlsToEfColumnPair.Create(() => order.Id, "xlsCol5"),
                    XlsToEfColumnPair.Create("OrderDate", "xlsCol2"),
                    XlsToEfColumnPair.Create(() => order.DeliveryDate, "xlsCol4"),
                },
            };
            var results =
                await
                importer.ImportColumnData <Order>(importMatchingData,
                                                  new ImportSaveBehavior
            {
                RecordMode = RecordMode.UpdateOnly,
                CommitMode = CommitMode.AnySuccessfulOneAtATime
            });

            results.SuccessCount.ShouldBe(1);
            results.RowErrorDetails.Count.ShouldBe(1);

            var dbSet = dbContext.Set <Order>().ToArray();

            dbSet.Length.ShouldBe(1);
            var entity = dbSet.First();

            entity.DeliveryDate.ShouldBe(DateTime.Parse("9/22/2015"));
        }
Exemple #6
0
        public async Task <JsonResult> SubmitOrderColumnMatches([FromBody] DataMatchesForImportingOrderData data)
        {
            var result = await _mediator.Send(data);

            return(Json(result));
        }
Exemple #7
0
        public async Task ShouldImportWithOverrider()
        {
            var dbContext        = GetDb();
            var categoryName     = "Cookies";
            var categoryToSelect = new ProductCategory {
                CategoryCode = "CK", CategoryName = categoryName
            };
            var unselectedCategory = new ProductCategory {
                CategoryCode = "UC", CategoryName = "Unrelated Category"
            };

            PersistToDatabase(categoryToSelect, unselectedCategory);

            var existingProduct = new Product {
                ProductCategoryId = unselectedCategory.Id, ProductName = "Vanilla Wafers"
            };

            PersistToDatabase(existingProduct);


            var overrider = new ProductPropertyOverrider <Product>(dbContext);


            var excelIoWrapper = new FakeExcelIo();

            excelIoWrapper.Rows.Clear();
            var cookieType = "Mint Cookies";

            excelIoWrapper.Rows.Add(new Dictionary <string, string>
            {
                { "xlsCol1", "CK" },
                { "xlsCol2", cookieType },
                { "xlsCol5", "" },
            });
            var updatedCookieName = "Strawberry Wafers";

            excelIoWrapper.Rows.Add(new Dictionary <string, string>
            {
                { "xlsCol1", "CK" },
                { "xlsCol2", updatedCookieName },
                { "xlsCol5", existingProduct.Id.ToString() },
            });


            var importer = new XlsxToTableImporter(dbContext, excelIoWrapper);

            var prod = new Product();
            var importMatchingData = new DataMatchesForImportingOrderData
            {
                FileName = "foo.xlsx",
                Sheet    = "mysheet",
                Selected = new List <XlsToEfColumnPair>
                {
                    XlsToEfColumnPair.Create(() => prod.Id, "xlsCol5"),
                    XlsToEfColumnPair.Create("ProductCategory", "xlsCol1"),
                    XlsToEfColumnPair.Create(() => prod.ProductName, "xlsCol2"),
                },
            };


            Func <int, Expression <Func <Product, bool> > > finderExpression = selectorValue => entity => entity.Id.Equals(selectorValue);
            var result = await importer.ImportColumnData(importMatchingData, finderExpression, overridingMapper : overrider);

            var newItem = GetDb().Set <Product>().Include(x => x.ProductCategory).First(x => x.ProductName == cookieType);

            newItem.ProductCategory.CategoryName.ShouldBe("Cookies");
            newItem.ProductName.ShouldBe(cookieType);

            var updated = GetDb().Set <Product>().Include(x => x.ProductCategory).First(x => x.Id == existingProduct.Id);

            updated.ProductName.ShouldBe(updatedCookieName);
        }