diff --git a/Mvc.Jquery.DataTables.Tests/EF/EntityFramework.cs b/Mvc.Jquery.DataTables.Tests/EF/EntityFramework.cs deleted file mode 100644 index 9b55455..0000000 --- a/Mvc.Jquery.DataTables.Tests/EF/EntityFramework.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Data.Entity; -using System.Data.Entity.Infrastructure; -using System.IO; -using Mvc.JQuery.Datatables; -using NUnit.Framework; - -namespace Mvc.JQuery.DataTables.Tests.EF -{ - - - [TestFixture] - public class EntityFramework - { - public class SomeContext : DbContext - { - public DbSet Models { get; set; } - } - - protected const string DbFile = "test.sdf"; - protected const string Password = "1234567890"; - - [SetUp] - public void InitTest() - { - DataContext = new SomeContext(); - Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", string.Format("Data Source=\"{0}\";Password={1}", DbFile, Password)); - - DataContext.Database.Initialize(true); - for (var i = 0; i < 100; i++) - { - DataContext.Models.Add(new SomeModel() {DisplayName = "Name " + i}); - - } - DataContext.SaveChanges(); - } - - protected SomeContext DataContext { get; set; } - - [Test] - public void ItMakesAppropriateQueries() - { - //arrange - var source = DataContext.Models; - var dataTablesParam = new DataTablesParam(); - dataTablesParam.iColumns = 2; - dataTablesParam.bSearchable.Add(false); - dataTablesParam.bSearchable.Add(true); - - dataTablesParam.sSearch = "Name 10"; - - //act - var result = new DataTablesResult(source, dataTablesParam, model => model); - var data = (DataTablesData) result.Data; - - //assert - //TODO: need to check that appropriate SQL queries are made somehow. - - } - - [TearDown] - public void CleanupTest() - { - DataContext.Dispose(); - - if (File.Exists(DbFile)) - { - File.Delete(DbFile); - } - } - } -} diff --git a/Mvc.Jquery.DataTables.Tests/EF/SomeModel.cs b/Mvc.Jquery.DataTables.Tests/EF/SomeModel.cs deleted file mode 100644 index 0f7b366..0000000 --- a/Mvc.Jquery.DataTables.Tests/EF/SomeModel.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace Mvc.JQuery.DataTables.Tests.EF -{ - public class SomeModel - { - [Key] - public int Id { get; set; } - public string DisplayName { get; set; } - } -} \ No newline at end of file diff --git a/Mvc.Jquery.DataTables.Tests/EF/SomeView.cs b/Mvc.Jquery.DataTables.Tests/EF/SomeView.cs deleted file mode 100644 index 2f4c5d6..0000000 --- a/Mvc.Jquery.DataTables.Tests/EF/SomeView.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Mvc.JQuery.DataTables.Tests.EF -{ - public class SomeView - { - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/Mvc.Jquery.DataTables.Tests/Fixtures/EntityFramework.cs b/Mvc.Jquery.DataTables.Tests/Fixtures/EntityFramework.cs index 48fd20c..b1bb963 100644 --- a/Mvc.Jquery.DataTables.Tests/Fixtures/EntityFramework.cs +++ b/Mvc.Jquery.DataTables.Tests/Fixtures/EntityFramework.cs @@ -1,38 +1,84 @@ using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.IO; -using Mvc.JQuery.Datatables; using NUnit.Framework; using System; using System.Linq; -using System.Collections.Generic; +using Mvc.JQuery.Datatables; namespace Mvc.JQuery.DataTables.Tests { - public abstract class EntityFramework : Linq + public class EntityFramework : Linq, IDisposable { public class SomeContext : DbContext { public DbSet Models { get; set; } } - protected readonly SomeContext DataContext; - - public EntityFramework(SomeContext dataContext) + private readonly IDbConnectionFactory _defaultConnectionFactory; + private SomeContext _dataContext; + protected SomeContext DataContext { - DataContext = dataContext; - if (DataContext.Models.Any()) + get { return _dataContext; } + set { - DataContext.Database.ExecuteSqlCommand("DELETE FROM SomeModels"); + _dataContext = value; + SomeModelQueryable = (_dataContext==null)?null:_dataContext.Models.AsQueryable(); } - foreach (var sm in SomeModelQueryable) + } + + protected const string DbFile = "Test.sdf"; + protected const string Password = "1234567890"; + + public EntityFramework() + : this(new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", + string.Format("Data Source=\"{0}\";Password={1}", DbFile, Password))) { } + + public EntityFramework(IDbConnectionFactory connectionFactory) + { + _defaultConnectionFactory = Database.DefaultConnectionFactory; + Database.DefaultConnectionFactory = connectionFactory; + var oldQueryable = SomeModelQueryable; + DataContext = new SomeContext(); + DataContext.Database.Initialize(true); + foreach (var sm in oldQueryable) { DataContext.Models.Add(sm); } DataContext.SaveChanges(); + } - SomeModelQueryable = DataContext.Models; + [Test, TestCaseSource(typeof(MyFactoryClass), "TestCases")] + public override int[] ExecuteParams(DataTablesParam dataTablesParam) + { + DataContext.Dispose(); //reset datacontext in order to clear local + DataContext = new SomeContext(); + int[] returnVar = base.ExecuteParams(dataTablesParam); + Assert.AreEqual(returnVar.Length, DataContext.Models.Local.Count, "records loaded in memory"); + return returnVar; + } + + #region IDisposable implementation + private bool _disposed = false; + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); } + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + if (DataContext != null) { DataContext.Dispose(); } + if (File.Exists(DbFile)) { File.Delete(DbFile); } + Database.DefaultConnectionFactory = _defaultConnectionFactory; + } + _disposed = true; + } + } + #endregion } } diff --git a/Mvc.Jquery.DataTables.Tests/Fixtures/EntityFrameworkCe.cs b/Mvc.Jquery.DataTables.Tests/Fixtures/EntityFrameworkCe.cs deleted file mode 100644 index a23aeb6..0000000 --- a/Mvc.Jquery.DataTables.Tests/Fixtures/EntityFrameworkCe.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Data.Entity; -using System.Data.Entity.Infrastructure; -using System.IO; -using Mvc.JQuery.Datatables; -using NUnit.Framework; -using System; -using System.Linq; -using System.Collections.Generic; - -namespace Mvc.JQuery.DataTables.Tests -{ - public class EntityFrameworkCe : EntityFramework, IDisposable - { - - protected const string DbFile = "Test.sdf"; - protected const string Password = "1234567890"; - - public EntityFrameworkCe() : base(CreateDb()) - { - } - - private static SomeContext CreateDb() - { - var context = new SomeContext(); - Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", - string.Format("Data Source=\"{0}\";Password={1}", DbFile, Password)); - - context.Database.Initialize(true); - return context; - } - - public void Dispose() - { - DataContext.Dispose(); - if (File.Exists(DbFile)) - { - File.Delete(DbFile); - } - } - } -} diff --git a/Mvc.Jquery.DataTables.Tests/Fixtures/Linq.cs b/Mvc.Jquery.DataTables.Tests/Fixtures/Linq.cs index e300293..d618318 100644 --- a/Mvc.Jquery.DataTables.Tests/Fixtures/Linq.cs +++ b/Mvc.Jquery.DataTables.Tests/Fixtures/Linq.cs @@ -4,8 +4,6 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading; namespace Mvc.JQuery.DataTables.Tests { @@ -15,7 +13,7 @@ public class Linq internal const int SomeModelPropertyCount = 4; internal const int SomeViewPropertyCount = 4; private const int TotalRecords = 100; - private const int DisplayLength = 5; + internal const int DisplayLength = 5; protected IQueryable SomeModelQueryable { get; set; } @@ -34,49 +32,19 @@ public Linq() } SomeModelQueryable = dataSet.AsQueryable(); } - - [Test(Description = "Simple Ordering")] - public void SimpleOrder() + + [Test, TestCaseSource(typeof(MyFactoryClass), "TestCases")] + public virtual int[] ExecuteParams(DataTablesParam dataTablesParam) { - var dataTablesParam = EmptyParam(); - dataTablesParam.sSortDir[0] = "asc"; - dataTablesParam.iSortingCols = 1; - var result = DataTablesResult.Create(SomeModelQueryable, //DataContext.Models, + var result = DataTablesResult.Create(SomeModelQueryable, dataTablesParam, model => model); var data = (DataTablesData)result.Data; - Assert.AreEqual(data.RecordIds(), Enumerable.Range(1, DisplayLength).ToArray()); + return data.RecordIds(); } - [Test(Description = "Simple Ordering with transform to view model")] - public void SimpleOrderAndTransform() - { - var dataTablesParam = EmptyParam(); - dataTablesParam.sSortDir[0] = "asc"; - dataTablesParam.iSortingCols = 1; - Assert.AreEqual(ExecuteParams(dataTablesParam).RecordIds(), Enumerable.Range(1, DisplayLength).ToArray()); - } - - [Test(Description = "Single Record Text Search")] - public void SingleRecordSearch() - { - var dataTablesParam = EmptyParam(); - //dataTablesParam.sSortDir[0] = "asc"; - dataTablesParam.sSearch = "Name 10"; - Assert.AreEqual(ExecuteParams(dataTablesParam).RecordIds(), new int[] { 10 }); - } - [Test(Description = "Combination of Sort, Filter & Paginate")] - public void SortFilterPage() - { - var dataTablesParam = EmptyParam(); - dataTablesParam.iSortingCols = 1; - dataTablesParam.iSortCol[0] = 2; - dataTablesParam.sSearchColumns[3] = "25~35"; - dataTablesParam.iDisplayStart = 6; - var result = ExecuteParams(dataTablesParam).RecordIds(); - Assert.AreEqual(ExecuteParams(dataTablesParam).RecordIds(), new int[] { 17,21,25,77,81 }); - } - private DataTablesData ExecuteParams(DataTablesParam dataTablesParam) + [Test, TestCaseSource(typeof(MyFactoryClass), "TestCases")] + public virtual int[] ExecuteParamsAndTransform(DataTablesParam dataTablesParam) { var result = DataTablesResult.Create(SomeModelQueryable, dataTablesParam, @@ -87,10 +55,44 @@ private DataTablesData ExecuteParams(DataTablesParam dataTablesParam) ViewScale = model.Scale, Id = model.Id }); - return (DataTablesData)result.Data; + var data = (DataTablesData)result.Data; + return data.RecordIds(); } + } + public static class MyFactoryClass + { + public static IEnumerable TestCases + { + get + { + var dataTablesParam = EmptyParam(); + dataTablesParam.sSortDir[0] = "asc"; + dataTablesParam.iSortingCols = 1; + yield return new TestCaseData(dataTablesParam) + .Returns(Enumerable.Range(1, Linq.DisplayLength).ToArray()) + .SetName("SimpleOrder") + .SetDescription("Simple Ordering"); + + dataTablesParam = EmptyParam(); + dataTablesParam.sSearch = "Name 10"; + yield return new TestCaseData(dataTablesParam) + .Returns(new int[] { 10 }) + .SetName("SingleRecordSearch") + .SetDescription("Single Record Text Search"); - protected static DataTablesParam EmptyParam(int columns = SomeModelPropertyCount) + dataTablesParam = EmptyParam(); + dataTablesParam.iSortingCols = 1; + dataTablesParam.iSortCol[0] = 2; + dataTablesParam.sSearchColumns[3] = "25~35"; + dataTablesParam.iDisplayStart = 6; + yield return new TestCaseData(dataTablesParam) + .Returns(new int[] { 17, 21, 25, 77, 81 }) + .SetName("SortFilterPage") + .SetDescription("Combination of Sort, Filter & Paginate"); + } + } + + public static DataTablesParam EmptyParam(int columns = Linq.SomeModelPropertyCount) { return new DataTablesParam { @@ -99,8 +101,8 @@ protected static DataTablesParam EmptyParam(int columns = SomeModelPropertyCount bSearchable = LinqTestStaticMethods.Populate(true, columns), bSortable = LinqTestStaticMethods.Populate(true, columns), iColumns = columns, - iDisplayLength = DisplayLength, - iSortingCols=1, + iDisplayLength = Linq.DisplayLength, + iSortingCols = 1, iSortCol = LinqTestStaticMethods.Populate(0, columns), sEcho = 1, sSearchColumns = LinqTestStaticMethods.Populate("", columns), @@ -109,6 +111,7 @@ protected static DataTablesParam EmptyParam(int columns = SomeModelPropertyCount }; } } + public static class LinqTestStaticMethods { public static int[] RecordIds(this DataTablesData data) diff --git a/Mvc.Jquery.DataTables.Tests/Mvc.JQuery.DataTables.Tests.csproj b/Mvc.Jquery.DataTables.Tests/Mvc.JQuery.DataTables.Tests.csproj index e144ca6..c9ba407 100644 --- a/Mvc.Jquery.DataTables.Tests/Mvc.JQuery.DataTables.Tests.csproj +++ b/Mvc.Jquery.DataTables.Tests/Mvc.JQuery.DataTables.Tests.csproj @@ -55,12 +55,8 @@ - - - -