Skip to content

Commit 368ed09

Browse files
committed
Merge pull request mcintyre321#32 from mcshaz/master
Unit test for entities retreived to memory
2 parents 3cdb83d + 0fd62b8 commit 368ed09

File tree

7 files changed

+104
-189
lines changed

7 files changed

+104
-189
lines changed

Mvc.Jquery.DataTables.Tests/EF/EntityFramework.cs

Lines changed: 0 additions & 71 deletions
This file was deleted.

Mvc.Jquery.DataTables.Tests/EF/SomeModel.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

Mvc.Jquery.DataTables.Tests/EF/SomeView.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,84 @@
11
using System.Data.Entity;
22
using System.Data.Entity.Infrastructure;
33
using System.IO;
4-
using Mvc.JQuery.Datatables;
54
using NUnit.Framework;
65
using System;
76
using System.Linq;
8-
using System.Collections.Generic;
7+
using Mvc.JQuery.Datatables;
98

109
namespace Mvc.JQuery.DataTables.Tests
1110
{
12-
public abstract class EntityFramework : Linq
11+
public class EntityFramework : Linq, IDisposable
1312
{
1413
public class SomeContext : DbContext
1514
{
1615
public DbSet<SomeModel> Models { get; set; }
1716
}
1817

19-
protected readonly SomeContext DataContext;
20-
21-
public EntityFramework(SomeContext dataContext)
18+
private readonly IDbConnectionFactory _defaultConnectionFactory;
19+
private SomeContext _dataContext;
20+
protected SomeContext DataContext
2221
{
23-
DataContext = dataContext;
24-
if (DataContext.Models.Any())
22+
get { return _dataContext; }
23+
set
2524
{
26-
DataContext.Database.ExecuteSqlCommand("DELETE FROM SomeModels");
25+
_dataContext = value;
26+
SomeModelQueryable = (_dataContext==null)?null:_dataContext.Models.AsQueryable();
2727
}
28-
foreach (var sm in SomeModelQueryable)
28+
}
29+
30+
protected const string DbFile = "Test.sdf";
31+
protected const string Password = "1234567890";
32+
33+
public EntityFramework()
34+
: this(new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "",
35+
string.Format("Data Source=\"{0}\";Password={1}", DbFile, Password))) { }
36+
37+
public EntityFramework(IDbConnectionFactory connectionFactory)
38+
{
39+
_defaultConnectionFactory = Database.DefaultConnectionFactory;
40+
Database.DefaultConnectionFactory = connectionFactory;
41+
var oldQueryable = SomeModelQueryable;
42+
DataContext = new SomeContext();
43+
DataContext.Database.Initialize(true);
44+
foreach (var sm in oldQueryable)
2945
{
3046
DataContext.Models.Add(sm);
3147
}
3248
DataContext.SaveChanges();
49+
}
3350

34-
SomeModelQueryable = DataContext.Models;
51+
[Test, TestCaseSource(typeof(MyFactoryClass), "TestCases")]
52+
public override int[] ExecuteParams(DataTablesParam dataTablesParam)
53+
{
54+
DataContext.Dispose(); //reset datacontext in order to clear local
55+
DataContext = new SomeContext();
56+
int[] returnVar = base.ExecuteParams(dataTablesParam);
57+
Assert.AreEqual(returnVar.Length, DataContext.Models.Local.Count, "records loaded in memory");
58+
return returnVar;
59+
}
60+
61+
#region IDisposable implementation
62+
private bool _disposed = false;
63+
public void Dispose()
64+
{
65+
Dispose(true);
66+
GC.SuppressFinalize(this);
3567
}
3668

69+
protected virtual void Dispose(bool disposing)
70+
{
71+
if (!_disposed)
72+
{
73+
if (disposing)
74+
{
75+
if (DataContext != null) { DataContext.Dispose(); }
76+
if (File.Exists(DbFile)) { File.Delete(DbFile); }
77+
Database.DefaultConnectionFactory = _defaultConnectionFactory;
78+
}
79+
_disposed = true;
80+
}
81+
}
82+
#endregion
3783
}
3884
}

Mvc.Jquery.DataTables.Tests/Fixtures/EntityFrameworkCe.cs

Lines changed: 0 additions & 41 deletions
This file was deleted.

Mvc.Jquery.DataTables.Tests/Fixtures/Linq.cs

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
using System.Collections;
55
using System.Collections.Generic;
66
using System.Linq;
7-
using System.Text;
8-
using System.Threading;
97

108
namespace Mvc.JQuery.DataTables.Tests
119
{
@@ -15,7 +13,7 @@ public class Linq
1513
internal const int SomeModelPropertyCount = 4;
1614
internal const int SomeViewPropertyCount = 4;
1715
private const int TotalRecords = 100;
18-
private const int DisplayLength = 5;
16+
internal const int DisplayLength = 5;
1917

2018
protected IQueryable<SomeModel> SomeModelQueryable { get; set; }
2119

@@ -34,49 +32,19 @@ public Linq()
3432
}
3533
SomeModelQueryable = dataSet.AsQueryable();
3634
}
37-
38-
[Test(Description = "Simple Ordering")]
39-
public void SimpleOrder()
35+
36+
[Test, TestCaseSource(typeof(MyFactoryClass), "TestCases")]
37+
public virtual int[] ExecuteParams(DataTablesParam dataTablesParam)
4038
{
41-
var dataTablesParam = EmptyParam();
42-
dataTablesParam.sSortDir[0] = "asc";
43-
dataTablesParam.iSortingCols = 1;
44-
var result = DataTablesResult.Create(SomeModelQueryable, //DataContext.Models,
39+
var result = DataTablesResult.Create(SomeModelQueryable,
4540
dataTablesParam,
4641
model => model);
4742
var data = (DataTablesData)result.Data;
48-
Assert.AreEqual(data.RecordIds(), Enumerable.Range(1, DisplayLength).ToArray());
43+
return data.RecordIds();
4944
}
50-
[Test(Description = "Simple Ordering with transform to view model")]
51-
public void SimpleOrderAndTransform()
52-
{
53-
var dataTablesParam = EmptyParam();
54-
dataTablesParam.sSortDir[0] = "asc";
55-
dataTablesParam.iSortingCols = 1;
56-
Assert.AreEqual(ExecuteParams(dataTablesParam).RecordIds(), Enumerable.Range(1, DisplayLength).ToArray());
57-
}
58-
59-
[Test(Description = "Single Record Text Search")]
60-
public void SingleRecordSearch()
61-
{
62-
var dataTablesParam = EmptyParam();
63-
//dataTablesParam.sSortDir[0] = "asc";
64-
dataTablesParam.sSearch = "Name 10";
6545

66-
Assert.AreEqual(ExecuteParams(dataTablesParam).RecordIds(), new int[] { 10 });
67-
}
68-
[Test(Description = "Combination of Sort, Filter & Paginate")]
69-
public void SortFilterPage()
70-
{
71-
var dataTablesParam = EmptyParam();
72-
dataTablesParam.iSortingCols = 1;
73-
dataTablesParam.iSortCol[0] = 2;
74-
dataTablesParam.sSearchColumns[3] = "25~35";
75-
dataTablesParam.iDisplayStart = 6;
76-
var result = ExecuteParams(dataTablesParam).RecordIds();
77-
Assert.AreEqual(ExecuteParams(dataTablesParam).RecordIds(), new int[] { 17,21,25,77,81 });
78-
}
79-
private DataTablesData ExecuteParams(DataTablesParam dataTablesParam)
46+
[Test, TestCaseSource(typeof(MyFactoryClass), "TestCases")]
47+
public virtual int[] ExecuteParamsAndTransform(DataTablesParam dataTablesParam)
8048
{
8149
var result = DataTablesResult.Create(SomeModelQueryable,
8250
dataTablesParam,
@@ -87,10 +55,44 @@ private DataTablesData ExecuteParams(DataTablesParam dataTablesParam)
8755
ViewScale = model.Scale,
8856
Id = model.Id
8957
});
90-
return (DataTablesData)result.Data;
58+
var data = (DataTablesData)result.Data;
59+
return data.RecordIds();
9160
}
61+
}
62+
public static class MyFactoryClass
63+
{
64+
public static IEnumerable TestCases
65+
{
66+
get
67+
{
68+
var dataTablesParam = EmptyParam();
69+
dataTablesParam.sSortDir[0] = "asc";
70+
dataTablesParam.iSortingCols = 1;
71+
yield return new TestCaseData(dataTablesParam)
72+
.Returns(Enumerable.Range(1, Linq.DisplayLength).ToArray())
73+
.SetName("SimpleOrder")
74+
.SetDescription("Simple Ordering");
75+
76+
dataTablesParam = EmptyParam();
77+
dataTablesParam.sSearch = "Name 10";
78+
yield return new TestCaseData(dataTablesParam)
79+
.Returns(new int[] { 10 })
80+
.SetName("SingleRecordSearch")
81+
.SetDescription("Single Record Text Search");
9282

93-
protected static DataTablesParam EmptyParam(int columns = SomeModelPropertyCount)
83+
dataTablesParam = EmptyParam();
84+
dataTablesParam.iSortingCols = 1;
85+
dataTablesParam.iSortCol[0] = 2;
86+
dataTablesParam.sSearchColumns[3] = "25~35";
87+
dataTablesParam.iDisplayStart = 6;
88+
yield return new TestCaseData(dataTablesParam)
89+
.Returns(new int[] { 17, 21, 25, 77, 81 })
90+
.SetName("SortFilterPage")
91+
.SetDescription("Combination of Sort, Filter & Paginate");
92+
}
93+
}
94+
95+
public static DataTablesParam EmptyParam(int columns = Linq.SomeModelPropertyCount)
9496
{
9597
return new DataTablesParam
9698
{
@@ -99,8 +101,8 @@ protected static DataTablesParam EmptyParam(int columns = SomeModelPropertyCount
99101
bSearchable = LinqTestStaticMethods.Populate<bool>(true, columns),
100102
bSortable = LinqTestStaticMethods.Populate<bool>(true, columns),
101103
iColumns = columns,
102-
iDisplayLength = DisplayLength,
103-
iSortingCols=1,
104+
iDisplayLength = Linq.DisplayLength,
105+
iSortingCols = 1,
104106
iSortCol = LinqTestStaticMethods.Populate<int>(0, columns),
105107
sEcho = 1,
106108
sSearchColumns = LinqTestStaticMethods.Populate<string>("", columns),
@@ -109,6 +111,7 @@ protected static DataTablesParam EmptyParam(int columns = SomeModelPropertyCount
109111
};
110112
}
111113
}
114+
112115
public static class LinqTestStaticMethods
113116
{
114117
public static int[] RecordIds(this DataTablesData data)

Mvc.Jquery.DataTables.Tests/Mvc.JQuery.DataTables.Tests.csproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,8 @@
5555
<Compile Include="DummyPocos\SomeModel.cs" />
5656
<Compile Include="DummyPocos\SomeView.cs" />
5757
<Compile Include="Fixtures\EntityFramework.cs" />
58-
<Compile Include="Fixtures\EntityFrameworkCe.cs" />
5958
<Compile Include="Fixtures\Linq.cs" />
60-
<Compile Include="EF\EntityFramework.cs" />
6159
<Compile Include="Properties\AssemblyInfo.cs" />
62-
<Compile Include="EF\SomeModel.cs" />
63-
<Compile Include="EF\SomeView.cs" />
6460
</ItemGroup>
6561
<ItemGroup>
6662
<None Include="App.config" />

0 commit comments

Comments
 (0)