22{
33 using System ;
44 using System . Collections . Generic ;
5+ using System . Collections . Specialized ;
56 using System . Linq ;
67 using System . Net ;
78 using System . Web ;
89 using System . Web . Mvc ;
10+ using JQDT . Application ;
911 using JQDT . DI ;
12+ using JQDT . ModelBinders ;
13+ using JQDT . Models ;
14+ using JQDT . MVC ;
1015 using Moq ;
1116 using NUnit . Framework ;
1217 using Tests . UnitTests . Mocks ;
1520 public class JQDataTableAttributeMvcUnitTests
1621 {
1722 [ Test ]
18- public void OnDataProcessingEventShouldBeRaized ( )
23+ [ TestCase ( nameof ( JQDataTableAttribute . OnDataProcessing ) ) ]
24+ [ TestCase ( nameof ( JQDataTableAttribute . OnSearchDataProcessing ) ) ]
25+ [ TestCase ( nameof ( JQDataTableAttribute . OnSearchDataProcessed ) ) ]
26+ [ TestCase ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessing ) ) ]
27+ [ TestCase ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessed ) ) ]
28+ [ TestCase ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessing ) ) ]
29+ [ TestCase ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessed ) ) ]
30+ [ TestCase ( nameof ( JQDataTableAttribute . OnSortDataProcessing ) ) ]
31+ [ TestCase ( nameof ( JQDataTableAttribute . OnSortDataProcessed ) ) ]
32+ [ TestCase ( nameof ( JQDataTableAttribute . OnPagingDataProcessing ) ) ]
33+ [ TestCase ( nameof ( JQDataTableAttribute . OnPagingDataProcessed ) ) ]
34+ [ TestCase ( nameof ( JQDataTableAttribute . OnDataProcessed ) ) ]
35+ public void AllEventsInsideMvcJQDTAttributeShouldBeRaized ( string eventName )
36+ {
37+ var serviceLocatorMock = this . GetServiceLocatorMock ( ) ;
38+ var executeFunctionMock = this . GetExecuteFunctionProviderMock ( serviceLocatorMock ) ;
39+ var contextMock = this . GetHttpContextMock ( ) ;
40+
41+ var calledEvents = new List < string > ( ) ;
42+ var testAttr = new JQDataTableTestAttribute ( serviceLocatorMock . Object , executeFunctionMock . Object , ref calledEvents ) ;
43+
44+ testAttr . OnActionExecuted ( contextMock . Object ) ;
45+
46+ Assert . IsTrue ( calledEvents . Contains ( eventName ) ) ;
47+ }
48+
49+ [ Test ]
50+ public void AllEventsInsideMvcJQDTAttributeShouldBeCalledInCorrectOrder ( )
51+ {
52+ var serviceLocatorMock = this . GetServiceLocatorMock ( ) ;
53+ var executeFunctionMock = this . GetExecuteFunctionProviderMock ( serviceLocatorMock ) ;
54+ var contextMock = this . GetHttpContextMock ( ) ;
55+
56+ var calledEvents = new List < string > ( ) ;
57+ var testAttr = new JQDataTableTestAttribute ( serviceLocatorMock . Object , executeFunctionMock . Object , ref calledEvents ) ;
58+
59+ testAttr . OnActionExecuted ( contextMock . Object ) ;
60+
61+ var expectedEventsCalls = new List < string >
62+ {
63+ nameof ( JQDataTableAttribute . OnDataProcessing ) ,
64+ nameof ( JQDataTableAttribute . OnSearchDataProcessing ) ,
65+ nameof ( JQDataTableAttribute . OnSearchDataProcessed ) ,
66+ nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessing ) ,
67+ nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessed ) ,
68+ nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessing ) ,
69+ nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessed ) ,
70+ nameof ( JQDataTableAttribute . OnSortDataProcessing ) ,
71+ nameof ( JQDataTableAttribute . OnSortDataProcessed ) ,
72+ nameof ( JQDataTableAttribute . OnPagingDataProcessing ) ,
73+ nameof ( JQDataTableAttribute . OnPagingDataProcessed ) ,
74+ nameof ( JQDataTableAttribute . OnDataProcessed ) ,
75+ } ;
76+
77+ Assert . IsTrue ( expectedEventsCalls . SequenceEqual ( calledEvents ) ) ;
78+ }
79+
80+ private Mock < IServiceLocator > GetServiceLocatorMock ( )
1981 {
2082 var serviceLocatorMock = new Mock < IServiceLocator > ( ) ;
2183 serviceLocatorMock . Setup ( x => x . GetSearchDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorFilterFake < IntModel > ( ) ) ;
@@ -24,7 +86,29 @@ public void OnDataProcessingEventShouldBeRaized()
2486 serviceLocatorMock . Setup ( x => x . GetPagingDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorNotFilterFake < IntModel > ( ) ) ;
2587 serviceLocatorMock . Setup ( x => x . GetSortDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorNotFilterFake < IntModel > ( ) ) ;
2688
27- var attribute = new JQDT . MVC . JQDataTableAttribute ( serviceLocatorMock . Object ) ;
89+ return serviceLocatorMock ;
90+ }
91+
92+ private Mock < IExecuteFunctionProvider < ActionExecutedContext > > GetExecuteFunctionProviderMock ( Mock < IServiceLocator > serviceLocatorMock )
93+ {
94+ var modelBinderMock = new Mock < IFormModelBinder > ( ) ;
95+ modelBinderMock . Setup ( x => x . BindModel < IQueryable < IntModel > > ( It . IsAny < NameValueCollection > ( ) , It . IsAny < IQueryable < IntModel > > ( ) ) ) . Returns ( new RequestInfoModel ( ) { TableParameters = new DataTableAjaxPostModel { Draw = 0 } } ) ;
96+
97+ var executeFunctionProviderMock = new Mock < IExecuteFunctionProvider < ActionExecutedContext > > ( ) ;
98+ executeFunctionProviderMock . Setup ( x => x . GetAppInicializationFunc ( It . IsAny < Type > ( ) , It . IsAny < Type > ( ) ) ) . Returns ( new Func < ActionExecutedContext , IServiceLocator , IFormModelBinder , IApplicationBase > ( ( ac , sl , fmb ) => { return new TestApplication < IntModel > ( serviceLocatorMock . Object , modelBinderMock . Object ) ; } ) ) ;
99+
100+ return executeFunctionProviderMock ;
101+ }
102+
103+ private JQDataTableAttribute HttpGetAttribute ( Mock < IServiceLocator > serviceLocatorMock , Mock < IExecuteFunctionProvider < ActionExecutedContext > > executeFunctionProviderMock )
104+ {
105+ var attribute = new JQDT . MVC . JQDataTableAttribute ( serviceLocatorMock . Object , executeFunctionProviderMock . Object ) ;
106+
107+ return attribute ;
108+ }
109+
110+ private Mock < ActionExecutedContext > GetHttpContextMock ( )
111+ {
28112 var request = new Mock < HttpRequestBase > ( ) ;
29113
30114 request . SetupGet ( r => r . HttpMethod ) . Returns ( "GET" ) ;
@@ -43,7 +127,7 @@ public void OnDataProcessingEventShouldBeRaized()
43127 actionExecutedContextMock . SetupGet ( c => c . Controller ) . Returns ( new TestControllerFake ( ) ) ;
44128 actionExecutedContextMock . SetupGet ( c => c . HttpContext ) . Returns ( httpContext . Object ) ;
45129
46- attribute . OnActionExecuted ( actionExecutedContextMock . Object ) ;
130+ return actionExecutedContextMock ;
47131 }
48132 }
49133
@@ -59,4 +143,93 @@ protected override void ExecuteCore()
59143 throw new NotImplementedException ( ) ;
60144 }
61145 }
146+
147+ public class TestApplication < T > : ApplicationBase < T >
148+ {
149+ public TestApplication ( IServiceLocator serviceLocator , IFormModelBinder modelBinder )
150+ : base ( serviceLocator , modelBinder )
151+ {
152+ }
153+
154+ protected override NameValueCollection GetAjaxForm ( )
155+ {
156+ return new NameValueCollection ( ) ;
157+ }
158+
159+ protected override IQueryable < T > GetData ( )
160+ {
161+ return new List < T > ( ) . AsQueryable ( ) ;
162+ }
163+ }
164+
165+ public class JQDataTableTestAttribute : JQDataTableAttribute
166+ {
167+ private readonly List < string > calledEvents ;
168+
169+ internal JQDataTableTestAttribute ( IServiceLocator serviceLocator , IExecuteFunctionProvider < ActionExecutedContext > executeFunctionProvider , ref List < string > calledEvents )
170+ : base ( serviceLocator , executeFunctionProvider )
171+ {
172+ this . calledEvents = calledEvents ;
173+ }
174+
175+ public override void OnDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
176+ {
177+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnDataProcessing ) ) ;
178+ }
179+
180+ public override void OnDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
181+ {
182+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnDataProcessed ) ) ;
183+ }
184+
185+ public override void OnSearchDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
186+ {
187+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnSearchDataProcessing ) ) ;
188+ }
189+
190+ public override void OnSearchDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
191+ {
192+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnSearchDataProcessed ) ) ;
193+ }
194+
195+ public override void OnCustomFiltersDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
196+ {
197+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessing ) ) ;
198+ }
199+
200+ public override void OnCustomFiltersDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
201+ {
202+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessed ) ) ;
203+ }
204+
205+ public override void OnColumnsFilterDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
206+ {
207+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessing ) ) ;
208+ }
209+
210+ public override void OnColumnsFilterDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
211+ {
212+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessed ) ) ;
213+ }
214+
215+ public override void OnSortDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
216+ {
217+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnSortDataProcessing ) ) ;
218+ }
219+
220+ public override void OnSortDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
221+ {
222+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnSortDataProcessed ) ) ;
223+ }
224+
225+ public override void OnPagingDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
226+ {
227+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnPagingDataProcessing ) ) ;
228+ }
229+
230+ public override void OnPagingDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
231+ {
232+ this . calledEvents . Add ( nameof ( JQDataTableAttribute . OnPagingDataProcessed ) ) ;
233+ }
234+ }
62235}
0 commit comments