예제 #1
0
        public void GivenGetString_WhenEmailContainsValidDecimal_ThenValueIsReturned(string fileName, string elementName, string expected)
        {
            string textFromFile = File.ReadAllText(fileName);
            var    value        = new XmlExtractor(textFromFile).GetString(elementName);

            Assert.Equal(expected, value);
        }
예제 #2
0
        [InlineData("before <total>1,24.53</total> text after", 124.53)] // <- Maybe this is not a desired effect
        public void GivenGetDecimal_WhenElementContainsValidValue_ThenValueIsReturned(string text, decimal expected)
        {
            var total = new XmlExtractor(text).GetDecimal("total");

            output.WriteLine("Total value [{0}]", total);
            Assert.Equal(expected, total);
        }
예제 #3
0
        public HttpResponseMessage PostCustomer([FromBody] string message)
        {
            IXmldocs     returndoc = null;
            XmlExtractor xtract    = new XmlExtractor();

            XmlExtractor.DocType doctype = xtract.DetectType(message);

            string cleanstring = xtract.CleanText(message);

            string xmlstring = xtract.ParseText(cleanstring);

            switch (doctype)
            {
            case XmlExtractor.DocType.Expense:
                returndoc = (IXmldocs)xtract.GetXMLDocument <Expense>(xmlstring);
                break;

            case XmlExtractor.DocType.Reservation:
                returndoc = (Reservation)xtract.GetXMLDocument <Reservation>(xmlstring);
                break;

            default:
                break;
            }

            var response = Request.CreateResponse(HttpStatusCode.Created, returndoc);

            return(response);
        }
예제 #4
0
        public void GivenGetDecimal_WhenEmailContainsValidDecimal_ThenValueIsReturned(string fileName, string elementName, decimal expected)
        {
            string textFromFile = File.ReadAllText(fileName);
            var    value        = new XmlExtractor(textFromFile, CultureInfo.CreateSpecificCulture("en-US")).GetDecimal(elementName);

            Assert.Equal(expected, value);
        }
예제 #5
0
        public void GivenGetDecimal_WhenTextContainsInValidValueNonENUSCulture_ThenUnexpectedValueIsReturned(string text, decimal expected)
        {
            var total = new XmlExtractor(text, CultureInfo.CreateSpecificCulture("da-DK")).GetDecimal("total");

            output.WriteLine("Total value [{0}]", total);
            Assert.NotEqual(expected, total);
        }
예제 #6
0
        public void GivenGetString_WhenTextContainsnValidValue_ThenUnexpectedValueIsReturned(string text, string elementName, string expected)
        {
            var value = new XmlExtractor(text).GetString(elementName);

            output.WriteLine("Element value [{0}]", value);
            Assert.Equal(expected, value);
        }
        public void GivenGetXmlElement_WhenEmailContainsValidXml_ThenValueIsReturned(string fileName, string elementName, string nodePath, string expected)
        {
            string     textFromFile = File.ReadAllText(fileName);
            XmlElement xml          = new XmlExtractor(textFromFile).GetXmlElement(elementName);
            var        node         = xml.SelectSingleNode(nodePath);

            Assert.Equal(expected, node.Value);
        }
        public void GivenGetXmlElement_WhenTextContainsValidXml_ThenValueIsReturned(string text, string elementName, string nodePath, string expected)
        {
            XmlElement xml  = new XmlExtractor(text).GetXmlElement(elementName);
            var        node = xml.SelectSingleNode(nodePath);

            output.WriteLine($"Result {node.FirstChild.Value}");
            Assert.Equal(expected, node.FirstChild.Value);
        }
예제 #9
0
 private IList <IRow> ExecuteExtract(string xml, string rowPath, SqlMap <string, string> columnMappings, USqlSchema schema, SqlMap <string, string> namespaces = null)
 {
     using (var dataStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
     {
         var reader    = new USqlStreamReader(dataStream);
         var extractor = new XmlExtractor(rowPath, columnMappings, namespaces);
         return(extractor.Extract(reader, new USqlRow(schema, null).AsUpdatable()).ToList());
     }
 }
예제 #10
0
 static void Main(string[] args)
 {
     try
     {
         Log.InfoFormat("XML:\n{0}", XmlExtractor.ToXml("<html><body>Hello world</body></html>"));
     }
     catch (Exception ex)
     {
         Log.Error("EXCEPTION", ex);
     }
 }
예제 #11
0
        public void Load_XMLFile_Expect_TwoItemInList()
        {
            //Arrange
            XmlExtractor xmlExtractor = new XmlExtractor();
            var          xmlFilePath  = (@"TestData\ValidXML.xml");

            //Act
            var testList = xmlExtractor.LoadXml(xmlFilePath);

            //Assert
            Assert.AreEqual(testList.Count, 2);
        }
예제 #12
0
        public void Load_InvalidXMLFile_ExpectExceptionThrown()
        {
            //Arrange
            //Invalid path set
            XmlExtractor xmlExtractor = new XmlExtractor();
            var          xmlFilePath  = (@"TestData\InvalidXML.xml");

            //Act
            var testList = xmlExtractor.LoadXml(xmlFilePath);

            //Assert above method - Expected exception is set
        }
예제 #13
0
        //This test has for only purpose to check if the the list has been populater correctly from the file
        public void Load_XMLFile_Expect_CorrectHorsesNames()
        {
            //Arrange
            XmlExtractor xmlExtractor = new XmlExtractor();
            var          xmlFilePath  = (@"TestData\ValidXML.xml");

            //Act
            var testList = xmlExtractor.LoadXml(xmlFilePath);

            //Assert
            Assert.AreEqual(testList[0].Name, "Advancing");
            Assert.AreEqual(testList[1].Name, "Coronel");
        }
예제 #14
0
        public void Extract_ValidUsersInputFromBoardgames_Succeeds()
        {
            IUpdatableRow      output = GetUserRow().AsUpdatable();
            IEnumerable <IRow> result;

            using (FileStream fileReader = new FileStream("Input/Board-Games/Users.xml", FileMode.Open, FileAccess.Read))
            {
                USqlStreamReader streamReader = new USqlStreamReader(fileReader);
                XmlExtractor     extractor    = new XmlExtractor();

                result = extractor.Extract(streamReader, output);
                Assert.Equal(9352, result.Count());
            }
        }
        public void Extract_ValidCommentsInputFromBoardgames_Succeeds()
        {
            IUpdatableRow output = GetCommentRow().AsUpdatable();
            IEnumerable<IRow> result;

            using (FileStream fileReader = new FileStream("Input/Board-Games/Comments.xml", FileMode.Open, FileAccess.Read))
            {
                USqlStreamReader streamReader = new USqlStreamReader(fileReader);
                XmlExtractor extractor = new XmlExtractor();

                result = extractor.Extract(streamReader, output);
                Assert.Equal(23343, result.Count());
            }
        }
        public void Extract_ValidUsersInputFromCoffee_Succeeds()
        {
            IUpdatableRow output = GetUserRow().AsUpdatable();
            IEnumerable<IRow> result;

            using (FileStream fileReader = new FileStream("Input/Coffee/Users.xml", FileMode.Open, FileAccess.Read))
            {
                USqlStreamReader streamReader = new USqlStreamReader(fileReader);
                XmlExtractor extractor = new XmlExtractor();

                result = extractor.Extract(streamReader, output);
                Assert.Equal(1162, result.Count());
            }
        }
예제 #17
0
        public void Extract_ValidCommentsInputFromCoffee_Succeeds()
        {
            IUpdatableRow      output = GetCommentRow().AsUpdatable();
            IEnumerable <IRow> result;

            using (FileStream fileReader = new FileStream("Input/Coffee/Comments.xml", FileMode.Open, FileAccess.Read))
            {
                USqlStreamReader streamReader = new USqlStreamReader(fileReader);
                XmlExtractor     extractor    = new XmlExtractor();

                result = extractor.Extract(streamReader, output);
                Assert.Equal(1279, result.Count());
            }
        }
        public void TestCData()
        {
            const string child = "<![CDATA[<>]]><x:child/>";
            const string xml   =
                "<file xmlns=\"http://example.com\" xmlns:x=\"http://example.com\">" +
                "<root>" +
                child +
                "</root>" +
                "</file>";

            using (StringReader input = new StringReader(xml))
                using (XmlReader reader = XmlReader.Create(input))
                {
                    Assert.True(FindRootNode(reader));
                    Assert.That(XmlExtractor.FlattenXml(reader), Is.EqualTo("<><x:child />"));
                }
        }
        public void TestNamespaces()
        {
            const string child = "Root <x:child att=\"hi\">Child Text <empty /></x:child> Text";
            const string xml   =
                "<file xmlns=\"http://example.com\" xmlns:x=\"http://example.com\">" +
                "<root>" +
                child +
                "</root>" +
                "</file>";

            using (StringReader input = new StringReader(xml))
                using (XmlReader reader = XmlReader.Create(input))
                {
                    Assert.True(FindRootNode(reader));
                    Assert.That(XmlExtractor.FlattenXml(reader), Is.EqualTo(child));

                    // Make sure it advanced past the last child part
                    Assert.That(reader.NodeType, Is.EqualTo(XmlNodeType.EndElement));
                    Assert.That(reader.Name, Is.EqualTo("root"));
                }
        }
예제 #20
0
        static void Main(string[] args)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var loadDetails = new LoadDetails();

            Console.WriteLine("Starting to load files");
            //Save structure
            var repo  = new InMemoryDataStore(PathToDblpXml, PathToBhtFolder);
            var saver = new EntityFrameWorkSaver(100);

            Console.WriteLine("Starting to save structure");
            //saver.SaveConferences(repo.Conferences);
            saver.SaveConferencesWithAddedAuthors(repo.Conferences, XmlExtractor.Read(PathToDblpXml).Where(k => (k.Value.StartsWith("<inproceeding")) || k.Value.StartsWith("<proceeding")));
            repo  = null;
            saver = null;

            //Add Authors
            //Console.WriteLine("Updating datasets with authors");
            //saver = new EntityFrameWorkSaver(Settings.Default.BatchSize);
            //saver.UpdateStructureSetAuthor(XmlExtractor.Read(PathToDblpXml).Where(k => (k.Value.StartsWith("<inproceeding")) || k.Value.StartsWith("<proceeding")));

            //Add rawdata
            Console.WriteLine("Starting to load files");
            saver = new EntityFrameWorkSaver(Settings.Default.BatchSize);
            saver.SaveBibTexEntries(XmlExtractor.Read(PathToDblpXml).Where(k => (k.Value.StartsWith("<inproceeding")) || k.Value.StartsWith("<proceeding")).Select(t => new BibTexEntry()
            {
                Key     = t.Key,
                Content = t.Value.ToBibTeX()
            }));
            stopwatch.Stop();

            loadDetails.LoadTime   = stopwatch.Elapsed;
            loadDetails.SizeOfXml  = new FileInfo(PathToDblpXml).Length;
            loadDetails.LastLoaded = DateTime.UtcNow;

            saver.SaveLoadDetails(loadDetails);
        }
예제 #21
0
        static void Main(string[] args)
        {
            //One extractor per file format
            JsonExtractor.JsonExtractor jsonExtractor = new JsonExtractor.JsonExtractor();
            XmlExtractor xmlExtractor = new XmlExtractor();

            HorseHandler.HorseHandler horseHandler = new HorseHandler.HorseHandler();

            //Retrive file from shared folder
            // Future development would involve an API to retrieve file and parse extension
            var xmlFilePath  = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"Data\Caulfield_Race1.xml");
            var jsonFilePath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"Data\Wolferhampton_Race1.json");

            List <HorseDto> SortedHorsesList = new List <HorseDto>();

            try
            {
                Console.WriteLine("Json file extraction:");
                SortedHorsesList = jsonExtractor.LoadJson(jsonFilePath);
                horseHandler.SortAndDisplayHorseList(SortedHorsesList);

                Console.WriteLine("\n------------------------------");

                Console.WriteLine("XML file extraction:");
                SortedHorsesList = xmlExtractor.LoadXml(xmlFilePath);
                horseHandler.SortAndDisplayHorseList(SortedHorsesList);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }


            Console.WriteLine("\nPress any key to exit");
            Console.ReadKey();
        }
        public void GivenGetXmlElement_WhenTextIsEmpty_ThenNullIsReturned(string text)
        {
            XmlElement xml = new XmlExtractor(text).GetXmlElement("expense");

            Assert.Null(xml);
        }
예제 #23
0
        public UIManager()
        {
            MainWindow              = new MainWindow();
            WaresWindow             = new WaresWindow();
            ModManager              = new ModManager();
            m_XmlExtractor          = new XmlExtractor(this);
            m_XmlWriter             = new XmlWriter(this);
            m_ReadWriteConfig       = new ReadWriteConfig(this);
            m_Calculations          = new Calculations(this);
            this.UIModel            = new UIModel();
            MainWindow.DataContext  = this.UIModel;
            WaresWindow.DataContext = this.UIModel;

            VanillaXmlFiles = new List <string>();
            Mod1XmlFiles    = new List <string>();
            Mod2XmlFiles    = new List <string>();
            Mod3XmlFiles    = new List <string>();
            Mod4XmlFiles    = new List <string>();
            Mod5XmlFiles    = new List <string>();
            Mod6XmlFiles    = new List <string>();

            m_ModFilesReader    = new ModFilesReader(this, m_XmlExtractor);
            MainWindow.Closing += OnClosing;

            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.ReadAllVanillaFilesCommand, this.ExecuteReadAllVanillaFilesCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.ReadAllModFilesCommand, this.ExecuteReadAllModFilesCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.OpenModPathManager, this.ExecuteOpenModPathManager));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.FilterCommand, this.ExecuteFilterCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.WriteAllChangedFilesCommand, this.ExecuteWriteAllChangedFilesCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.AddToValueCommand, this.ExecuteAddToValueCommand, CanExecuteCalculate));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.SubstractFromValueCommand, this.ExecuteSubstractFromValueCommand, CanExecuteCalculate));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.MultiplyToValueCommand, this.ExecuteMultiplyToValueCommand, CanExecuteCalculate));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.DivideByValueCommand, this.ExecuteDivideByValueCommand, CanExecuteCalculate));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.SetFixedValueCommand, this.ExecuteSetFixedValueCommand, CanExecuteCalculate));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.ShowWaresWindowCommand, this.ExecuteShowWaresWindowCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.OnMainWindowCellRightClick, this.ExecuteOnMainWindowCellRightClick));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.SelectFolderCommand, this.ExecuteSelectFolderCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod1FolderCommand, this.ExecuteSelectMod1FolderCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod2FolderCommand, this.ExecuteSelectMod2FolderCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.SelectExportFolderCommand, this.ExecuteSelectExportFolderCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.RecalculatePriceCommand, this.ExecuteRecalculatePriceCommand));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.OnWeaponDoubleClick, this.ExecuteOnWeaponDoubleClick));
            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.OnProjectileDoubleClick, this.ExecuteOnProjectileDoubleClick));

            MainWindow.CommandBindings.Add(new CommandBinding(X4Commands.ShowHelp, this.ExecuteShowHelp));

            ModManager             = new ModManager();
            ModManager.DataContext = this.UIModel;
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.SelectFolderCommand, this.ExecuteSelectFolderCommand));
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod1FolderCommand, this.ExecuteSelectMod1FolderCommand));
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod2FolderCommand, this.ExecuteSelectMod2FolderCommand));
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod3FolderCommand, this.ExecuteSelectMod3FolderCommand));
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod4FolderCommand, this.ExecuteSelectMod4FolderCommand));
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod5FolderCommand, this.ExecuteSelectMod5FolderCommand));
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.SelectMod6FolderCommand, this.ExecuteSelectMod6FolderCommand));
            ModManager.CommandBindings.Add(new CommandBinding(X4Commands.CloseModPathManager, this.ExecuteCloseModPathManager));

            m_ReadWriteConfig.LoadConfig();
            this.TextDictionary = new Dictionary <string, string>();
            this.TextDictionary = m_XmlExtractor.ReadTextXml(this.UIModel.Path + this.PathToTexts + @"\0001-l044.xml", this.TextDictionary);
            MainWindow.Show();

            this.WaresWindow             = new WaresWindow();
            this.WaresWindow.Owner       = this.MainWindow;
            this.WaresWindow.DataContext = this.UIModel;
            this.WaresWindow.CommandBindings.Add(new CommandBinding(X4Commands.OnWaresWindowCellRightClick, this.ExecuteOnWaresWindowCellRightClick));
            this.WaresWindow.CommandBindings.Add(new CommandBinding(X4Commands.RecalculatePriceCommand, this.ExecuteRecalculatePriceCommand));

            ModManager.Owner  = this.MainWindow;
            WaresWindow.Owner = this.MainWindow;
        }
        public void GivenGetXmlElement_WhenTextContainsNestedElements_ThenValueIsReturned(string text, string elementName, string expected)
        {
            XmlElement xml = new XmlExtractor(text).GetXmlElement(elementName);

            Assert.Equal(expected, xml.InnerXml);
        }
예제 #25
0
        static void Main(string[] args)
        {
            var extractor = new XmlExtractor(File.ReadAllText(@"A_Lion_1952-10-27_OMUL.xml"));


            XmlNodeList holdings = extractor.ExtractNodes("Holding");

            foreach (XmlNode holding in holdings)
            {
                var HoldingName      = extractor.ExtractString("HoldingName", holding.ChildNodes);
                var HoldingTypeCode  = extractor.ExtractString("HoldingTypeCode", holding.ChildNodes);
                var CurrencyTypeCode = extractor.ExtractString("CurrencyTypeCode", holding.ChildNodes);

                XmlNodeList policys = extractor.ExtractNodes("Policy", holding);
                foreach (XmlNode policy in policys)
                {
                    var PolNumber      = extractor.ExtractString("PolNumber", policy.ChildNodes);
                    var LineOfBusiness = extractor.ExtractString("LineOfBusiness", policy.ChildNodes);
                    var ProductType    = extractor.ExtractString("ProductType", policy.ChildNodes);
                    var PolicyStatus   = extractor.ExtractString("PolicyStatus", policy.ChildNodes);
                    var EffDate        = extractor.ExtractString("EffDate", policy.ChildNodes);
                    var TermDate       = extractor.ExtractString("TermDate", policy.ChildNodes);

                    XmlNodeList Lifes = extractor.ExtractNodes("Life", policy);
                    foreach (XmlNode life in Lifes)
                    {
                        var CashValueAmt    = extractor.ExtractString("CashValueAmt", life.ChildNodes);
                        var DeathBenefitAmt = extractor.ExtractString("DeathBenefitAmt", life.ChildNodes);

                        XmlNodeList Coverages = extractor.ExtractNodes("Coverage", life);
                        foreach (XmlNode Coverage in Coverages)
                        {
                            var PlanName         = extractor.ExtractString("PlanName", Coverage.ChildNodes);
                            var ProductCode      = extractor.ExtractString("ProductCode", Coverage.ChildNodes);
                            var LifeCovStatus    = extractor.ExtractString("LifeCovStatus", Coverage.ChildNodes);
                            var LifeCovTypeCode  = extractor.ExtractString("LifeCovTypeCode", Coverage.ChildNodes);
                            var IndicatorCode    = extractor.ExtractString("IndicatorCode", Coverage.ChildNodes);
                            var CashValue        = extractor.ExtractString("CashValue", Coverage.ChildNodes);
                            var CoverageEffDate  = extractor.ExtractString("EffDate", Coverage.ChildNodes);
                            var CoverageTermDate = extractor.ExtractString("TermDate", Coverage.ChildNodes);
                        }
                    }
                }

                XmlNodeList Investments = extractor.ExtractNodes("Investment", holding);
                foreach (XmlNode Investment in Investments)
                {
                    var AcctNum      = extractor.ExtractString("AcctNum", Investment.ChildNodes);
                    var AcctOpenDate = extractor.ExtractString("AcctOpenDate", Investment.ChildNodes);
                    var CarrierCode  = extractor.ExtractString("CarrierCode", Investment.ChildNodes);
                    var AccountValue = extractor.ExtractString("AccountValue", Investment.ChildNodes);

                    XmlNodeList SubAccounts = extractor.ExtractNodes("SubAccount", Investment);
                    foreach (XmlNode SubAccount in SubAccounts)
                    {
                        var SubAccountCarrierCode = extractor.ExtractString("CarrierCode", SubAccount.ChildNodes);
                        var ProductFullName       = extractor.ExtractString("ProductFullName", SubAccount.ChildNodes);
                        var PortfolioFullName     = extractor.ExtractString("PortfolioFullName", SubAccount.ChildNodes);
                        var AsOfDate        = extractor.ExtractString("AsOfDate", SubAccount.ChildNodes);
                        var CurrNumberUnits = extractor.ExtractString("CurrNumberUnits", SubAccount.ChildNodes);
                        var UnitValue       = extractor.ExtractString("UnitValue", SubAccount.ChildNodes);
                        var TotValue        = extractor.ExtractString("TotValue", SubAccount.ChildNodes);
                        var AllocPercent    = extractor.ExtractString("AllocPercent", SubAccount.ChildNodes);
                    }
                }
            }
        }
예제 #26
0
        public async Task <IActionResult> UploadFile(IFormFile file)
        {
            if (file == null)
            {
                return(BadRequest("File required"));
            }

            var ext = Path.GetExtension(file.FileName).ToLower();

            if (!(ext == ".csv" || ext == ".xml"))
            {
                return(BadRequest("Unknown format"));
            }

            if (file.Length > (MAX_FILE_SIZE))
            {
                return(BadRequest($"Invalid File Size (Maximum: {MAX_FILE_SIZE / (1024 * 1024)} MB)"));
            }


            // Save file into Uploads folder
            var    transFile = new TransactionFile();
            string errormsg  = "";

            try
            {
                //throw new Exception();
                transFile = await SaveFileAsync(file);

                Strategy strategy;
                if (ext == ".csv")
                {
                    strategy = new CsvExtractor();
                }
                else
                {
                    strategy = new XmlExtractor();
                }

                var entityExtractor = new TransactionExtractor(strategy);
                var entities        = entityExtractor.ExtractTransaction(file);
                if (entities.Where(x => !string.IsNullOrWhiteSpace(x.Errors)).Count() == 0)
                {
                    // Clean records, add to transaction
                    var cleanEntities = entities.Select(x => new TransactionEntity
                    {
                        TransactionId = x.TransactionId,
                        Amount        = x.ValidAmount.Value,
                        CurrencyCode  = x.CurrencyCode,
                        DateTime      = x.ValidTransactionDate.Value.UtcDateTime,
                        Status        = x.ValidStatus
                    });
                    _dbcontext.TransactionEntity.AddRange(cleanEntities);
                }
                else
                {
                    // Dirty records, add to error log
                    var errors = entities.Select(x => new TransactionErrorLog
                    {
                        TransactionId = x.TransactionId,
                        Amount        = x.Amount,
                        CurrencyCode  = x.CurrencyCode,
                        DateTime      = x.TransactionDate,
                        Status        = x.Status,
                        Error         = x.Errors,
                        FileId        = transFile.Id
                    });
                    _dbcontext.TransactionErrorLog.AddRange(errors);
                    errormsg = "Some records in uploaded file is not valid, please check error log for details.";
                }
                await _dbcontext.SaveChangesAsync();

                if (string.IsNullOrWhiteSpace(errormsg))
                {
                    return(Ok("Success"));
                }
                else
                {
                    return(BadRequest(errormsg));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);

                if (System.IO.File.Exists(Path.Combine(_hostingEnvironment.ContentRootPath, "Uploads", transFile.FileName ?? "")))
                {
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    System.IO.File.Delete(Path.Combine(_hostingEnvironment.ContentRootPath, "Uploads", transFile.FileName ?? ""));
                }
                // TODO: If db exception in here
                if (transFile.Id != 0)
                {
                    _dbcontext.TransactionFile.Remove(transFile);
                    await _dbcontext.SaveChangesAsync();
                }
                return(new StatusCodeResult(500));
            }
        }
        [InlineData("<vendor>Viaduct Steakhouse</vendor>", "cost_centre")] // neither opening nor closing tag found
        public void GivenGetXmlElement_WhenTextDoesntContainElementWeAreLookingFor_ThenNullIsReturned(string text, string elementName)
        {
            XmlElement xml = new XmlExtractor(text).GetXmlElement(elementName);

            Assert.Null(xml);
        }