public void DoImport() { var param = (ImportHeadersParam)View.CurrentObject; // TODO: refactor for deduplication var csvStream = new MemoryStream(); param.File.SaveToStream(csvStream); csvStream.Position = 0; var xpoMapper = new Xafology.ExpressApp.Xpo.ValueMap.XpoFieldMapper(); ICsvToXpoLoader loader = null; if (param.ImportActionType == ImportActionType.Insert) { loader = new HeadCsvToXpoInserter(param, csvStream, xpoMapper, null); } else if (param.ImportActionType == ImportActionType.Update) { loader = new HeadCsvToXpoUpdater(param, csvStream, xpoMapper, null); } else { throw new ArgumentException("Invalid Import Action Type", "ImportActionType"); } loader.Execute(); }
public void UpdateSimpleHeaderCsv() { // arrange parameters var map1 = ObjectSpace.CreateObject <HeaderToFieldMap>(); map1.SourceName = "Description"; map1.TargetName = map1.SourceName; map1.IsKeyField = true; var map2 = ObjectSpace.CreateObject <HeaderToFieldMap>(); map2.SourceName = "Amount"; map2.TargetName = map2.SourceName; var param = ObjectSpace.CreateObject <ImportHeadersParam>(); param.HeaderToFieldMaps.Add(map1); param.HeaderToFieldMaps.Add(map2); param.ObjectTypeName = "MockFactObject"; // arrange XPO objects var obj1 = ObjectSpace.CreateObject <MockFactObject>(); obj1.Description = "Hello 1"; obj1.Amount = 10; var obj2 = ObjectSpace.CreateObject <MockFactObject>(); obj2.Description = "Hello 2"; obj2.Amount = 20; var obj3 = ObjectSpace.CreateObject <MockFactObject>(); obj3.Description = "Hello 3"; obj3.Amount = 30; ObjectSpace.CommitChanges(); // arrange loader string csvText = @"Description,Amount Hello 1,100 Hello 2,200 Hello 3,300"; var csvStream = ConvertToCsvStream(csvText); var request = ObjectSpace.CreateObject <ImportRequest>(); var logger = new ImportLogger(request); var xpoFieldMapper = new XpoFieldMapper(); ICsvToXpoLoader loader = new HeadCsvToXpoUpdater(param, csvStream, xpoFieldMapper, logger); // act loader.Execute(); // assert var updated = new XPQuery <MockFactObject>(ObjectSpace.Session); Assert.AreEqual(3, updated.Count()); // returns 6 because it inserts instead of updates MockFactObject result = updated.Where(x => x.Description == "Hello 1").FirstOrDefault(); Assert.AreEqual(100, result.Amount); result = updated.Where(x => x.Description == "Hello 2").FirstOrDefault(); Assert.AreEqual(200, result.Amount); result = updated.Where(x => x.Description == "Hello 3").FirstOrDefault(); Assert.AreEqual(300, result.Amount); }