From 4635e7e5d834b055fd4269145cea65665cecfacb Mon Sep 17 00:00:00 2001 From: Garvin Date: Sun, 19 Nov 2017 16:26:22 -0500 Subject: [PATCH] Fixed logic in Enumerable path and added tests --- src/DatatablesParser/DatatablesParser.cs | 18 ++++++++++----- src/DatatablesParser/DatatablesParser.csproj | 2 +- .../LinqToObjectTests.cs | 20 +++++++++++++++++ .../MssqlEntityTests.cs | 22 +++++++++++++++++++ .../MysqlEntityTests.cs | 22 +++++++++++++++++++ .../PgsqlEntityTests.cs | 20 +++++++++++++++++ 6 files changed, 98 insertions(+), 6 deletions(-) diff --git a/src/DatatablesParser/DatatablesParser.cs b/src/DatatablesParser/DatatablesParser.cs index 9cc0ad8..042a41d 100755 --- a/src/DatatablesParser/DatatablesParser.cs +++ b/src/DatatablesParser/DatatablesParser.cs @@ -246,20 +246,28 @@ private bool EnumerablFilter(T item) { var globalFilter = _config[Constants.SEARCH_KEY]; - + var globalMatch = false; + var individualMatch = true; foreach (var map in _propertyMap.Where(m => m.Value.Searchable)) { var propValue = Convert.ToString(map.Value.Property.GetValue(item, null)).ToLower(); if (!string.IsNullOrWhiteSpace(globalFilter) && propValue.Contains(globalFilter.ToLower())) { - return true; + globalMatch = true; } - if (!string.IsNullOrWhiteSpace(map.Value.Filter) && propValue.Contains(map.Value.Filter.ToLower())) + if (!string.IsNullOrWhiteSpace(map.Value.Filter) && !propValue.Contains(map.Value.Filter.ToLower())) { - return true; + individualMatch = false; } } - return false; + + if(!string.IsNullOrWhiteSpace(globalFilter)) + { + return globalMatch && individualMatch; + } + + return individualMatch; + } /// diff --git a/src/DatatablesParser/DatatablesParser.csproj b/src/DatatablesParser/DatatablesParser.csproj index e715b92..ae1f170 100644 --- a/src/DatatablesParser/DatatablesParser.csproj +++ b/src/DatatablesParser/DatatablesParser.csproj @@ -4,7 +4,7 @@ netstandard1.3 DatatablesParser DatatablesParser-core - 1.2.0 + 1.2.1 false C# Datatables Datatables.net javascript parser json Linq entity framework asp.net mvc grid table database query builder core https://github.com/garvincasimir/csharp-datatables-parser diff --git a/test/DatatablesParser.Tests/LinqToObjectTests.cs b/test/DatatablesParser.Tests/LinqToObjectTests.cs index 4a9a45d..5576b18 100644 --- a/test/DatatablesParser.Tests/LinqToObjectTests.cs +++ b/test/DatatablesParser.Tests/LinqToObjectTests.cs @@ -84,6 +84,26 @@ public void TotalDisplayIndividualTest() } + [Fact] + public void TotalDisplayIndividualMutiTest() + { + var context = TestHelper.GetInMemoryContext(); + var p = TestHelper.CreateParams(); + var displayLength = 1; + + + //Set filter parameter + p[Constants.SEARCH_KEY] = new StringValues("a"); + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "0")] = "omie"; + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "1")] = "mmer"; + + var parser = new Parser(p, context.People); + + Console.WriteLine("InMemory - Total People TotalDisplayIndividualMutiTest: {0}",context.People.Count()); + + Assert.Equal(displayLength, parser.Parse().recordsFiltered); + + } } } \ No newline at end of file diff --git a/test/DatatablesParser.Tests/MssqlEntityTests.cs b/test/DatatablesParser.Tests/MssqlEntityTests.cs index 6bd43ee..7d0721e 100644 --- a/test/DatatablesParser.Tests/MssqlEntityTests.cs +++ b/test/DatatablesParser.Tests/MssqlEntityTests.cs @@ -105,6 +105,28 @@ public void TotalDisplayCustomFormatTest() } + [Fact] + public void TotalDisplayIndividualMutiTest() + { + var context = TestHelper.GetInMemoryContext(); + var p = TestHelper.CreateParams(); + var displayLength = 1; + + + //Set filter parameter + p[Constants.SEARCH_KEY] = new StringValues("a"); + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "0")] = "omie"; + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "1")] = "mmer"; + + var parser = new Parser(p, context.People); + + Console.WriteLine("Mssql - Total People TotalDisplayIndividualMutiTest: {0}",context.People.Count()); + + Assert.Equal(displayLength, parser.Parse().recordsFiltered); + + } + + } } \ No newline at end of file diff --git a/test/DatatablesParser.Tests/MysqlEntityTests.cs b/test/DatatablesParser.Tests/MysqlEntityTests.cs index 073d2e3..0e1d9bb 100644 --- a/test/DatatablesParser.Tests/MysqlEntityTests.cs +++ b/test/DatatablesParser.Tests/MysqlEntityTests.cs @@ -107,6 +107,28 @@ public void TotalDisplayCustomFormatTest() } + [Fact] + public void TotalDisplayIndividualMutiTest() + { + var context = TestHelper.GetInMemoryContext(); + var p = TestHelper.CreateParams(); + var displayLength = 1; + + + //Set filter parameter + p[Constants.SEARCH_KEY] = new StringValues("a"); + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "0")] = "omie"; + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "1")] = "mmer"; + + var parser = new Parser(p, context.People); + + Console.WriteLine("MySql - Total People TotalDisplayIndividualMutiTest: {0}",context.People.Count()); + + Assert.Equal(displayLength, parser.Parse().recordsFiltered); + + } + + } } \ No newline at end of file diff --git a/test/DatatablesParser.Tests/PgsqlEntityTests.cs b/test/DatatablesParser.Tests/PgsqlEntityTests.cs index 9dc02df..c10d581 100644 --- a/test/DatatablesParser.Tests/PgsqlEntityTests.cs +++ b/test/DatatablesParser.Tests/PgsqlEntityTests.cs @@ -107,6 +107,26 @@ public void TotalDisplayCustomFormatTest() } + [Fact] + public void TotalDisplayIndividualMutiTest() + { + var context = TestHelper.GetInMemoryContext(); + var p = TestHelper.CreateParams(); + var displayLength = 1; + + + //Set filter parameter + p[Constants.SEARCH_KEY] = new StringValues("a"); + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "0")] = "omie"; + p[Constants.GetKey(Constants.SEARCH_VALUE_PROPERTY_FORMAT, "1")] = "mmer"; + + var parser = new Parser(p, context.People); + + Console.WriteLine("Pgsql - Total People TotalDisplayIndividualMutiTest: {0}",context.People.Count()); + + Assert.Equal(displayLength, parser.Parse().recordsFiltered); + + } } } \ No newline at end of file