1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using System . Collections . Specialized ;
4
+ using System . Linq ;
5
+ using System . Net . Http ;
6
+ using System . Net . Http . Formatting ;
7
+ using System . Web . Http ;
8
+ using System . Web . Http . Controllers ;
9
+ using System . Web . Http . Filters ;
10
+ using System . Web . Http . Routing ;
11
+ using JQDT . Application ;
12
+ using JQDT . DI ;
13
+ using JQDT . ModelBinders ;
14
+ using JQDT . Models ;
15
+ using JQDT . WebAPI ;
16
+ using Moq ;
17
+ using NUnit . Framework ;
18
+ using Tests . UnitTests . Mocks ;
19
+ using Tests . UnitTests . Models ;
20
+
21
+ namespace Tests . UnitTests
22
+ {
23
+ public class JQDataTableAttributeWebApi2UnitTests
24
+ {
25
+ [ Test ]
26
+ [ TestCase ( nameof ( JQDataTableAttribute . OnDataProcessing ) ) ]
27
+ [ TestCase ( nameof ( JQDataTableAttribute . OnSearchDataProcessing ) ) ]
28
+ [ TestCase ( nameof ( JQDataTableAttribute . OnSearchDataProcessed ) ) ]
29
+ [ TestCase ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessing ) ) ]
30
+ [ TestCase ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessed ) ) ]
31
+ [ TestCase ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessing ) ) ]
32
+ [ TestCase ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessed ) ) ]
33
+ [ TestCase ( nameof ( JQDataTableAttribute . OnSortDataProcessing ) ) ]
34
+ [ TestCase ( nameof ( JQDataTableAttribute . OnSortDataProcessed ) ) ]
35
+ [ TestCase ( nameof ( JQDataTableAttribute . OnPagingDataProcessing ) ) ]
36
+ [ TestCase ( nameof ( JQDataTableAttribute . OnPagingDataProcessed ) ) ]
37
+ [ TestCase ( nameof ( JQDataTableAttribute . OnDataProcessed ) ) ]
38
+ public void AllEventsInsideWebApiJQDTAttributeShouldBeRaized ( string eventName )
39
+ {
40
+ var serviceLocatorMock = this . GetServiceLocatorMock ( ) ;
41
+ var executeFunctionMock = this . GetExecuteFunctionProviderMock ( serviceLocatorMock ) ;
42
+ var contextFake = this . GetHttpContextFake ( ) ;
43
+
44
+ var testAttr = new JQDataTableWebApi2TestAttribute ( serviceLocatorMock . Object , executeFunctionMock . Object ) ;
45
+
46
+ testAttr . OnActionExecuted ( contextFake ) ;
47
+
48
+ Assert . IsTrue ( testAttr . CalledEvents . Contains ( eventName ) ) ;
49
+ }
50
+
51
+ [ Test ]
52
+ public void AllEventsInsideWebApi2JQDTAttributeShouldBeCalledInCorrectOrder ( )
53
+ {
54
+ var serviceLocatorMock = this . GetServiceLocatorMock ( ) ;
55
+ var executeFunctionMock = this . GetExecuteFunctionProviderMock ( serviceLocatorMock ) ;
56
+ var contextFake = this . GetHttpContextFake ( ) ;
57
+
58
+ var testAttr = new JQDataTableWebApi2TestAttribute ( serviceLocatorMock . Object , executeFunctionMock . Object ) ;
59
+
60
+ testAttr . OnActionExecuted ( contextFake ) ;
61
+
62
+ var expectedEventsCalls = new List < string >
63
+ {
64
+ nameof ( JQDataTableAttribute . OnDataProcessing ) ,
65
+ nameof ( JQDataTableAttribute . OnSearchDataProcessing ) ,
66
+ nameof ( JQDataTableAttribute . OnSearchDataProcessed ) ,
67
+ nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessing ) ,
68
+ nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessed ) ,
69
+ nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessing ) ,
70
+ nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessed ) ,
71
+ nameof ( JQDataTableAttribute . OnSortDataProcessing ) ,
72
+ nameof ( JQDataTableAttribute . OnSortDataProcessed ) ,
73
+ nameof ( JQDataTableAttribute . OnPagingDataProcessing ) ,
74
+ nameof ( JQDataTableAttribute . OnPagingDataProcessed ) ,
75
+ nameof ( JQDataTableAttribute . OnDataProcessed ) ,
76
+ } ;
77
+
78
+ Assert . IsTrue ( expectedEventsCalls . SequenceEqual ( testAttr . CalledEvents ) ) ;
79
+ }
80
+
81
+ private HttpActionExecutedContext GetHttpContextFake ( )
82
+ {
83
+ var contextFake = new HttpActionExecutedContext (
84
+ new HttpActionContext (
85
+ new HttpControllerContext (
86
+ new HttpConfiguration ( ) ,
87
+ new Mock < IHttpRouteData > ( ) . Object ,
88
+ new HttpRequestMessage ( ) ) ,
89
+ new Mock < HttpActionDescriptor > ( ) . Object ) ,
90
+ null ) ;
91
+
92
+ contextFake . Response = new HttpResponseMessage ( )
93
+ {
94
+ Content = new ObjectContent ( typeof ( IQueryable < IntModel > ) , new List < IntModel > ( ) . AsQueryable ( ) , new JsonMediaTypeFormatter ( ) ) ,
95
+ StatusCode = System . Net . HttpStatusCode . OK
96
+ } ;
97
+
98
+ return contextFake ;
99
+ }
100
+
101
+ private Mock < IServiceLocator > GetServiceLocatorMock ( )
102
+ {
103
+ var serviceLocatorMock = new Mock < IServiceLocator > ( ) ;
104
+ serviceLocatorMock . Setup ( x => x . GetSearchDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorFilterFake < IntModel > ( ) ) ;
105
+ serviceLocatorMock . Setup ( x => x . GetColumnsFilterDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorFilterFake < IntModel > ( ) ) ;
106
+ serviceLocatorMock . Setup ( x => x . GetCustomFiltersDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorFilterFake < IntModel > ( ) ) ;
107
+ serviceLocatorMock . Setup ( x => x . GetPagingDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorNotFilterFake < IntModel > ( ) ) ;
108
+ serviceLocatorMock . Setup ( x => x . GetSortDataProcessor < IntModel > ( ) ) . Returns ( new DataProcessorNotFilterFake < IntModel > ( ) ) ;
109
+
110
+ return serviceLocatorMock ;
111
+ }
112
+
113
+ private Mock < IExecuteFunctionProvider < HttpActionExecutedContext > > GetExecuteFunctionProviderMock ( Mock < IServiceLocator > serviceLocatorMock )
114
+ {
115
+ var modelBinderMock = new Mock < IFormModelBinder > ( ) ;
116
+ modelBinderMock . Setup ( x => x . BindModel < IQueryable < IntModel > > ( It . IsAny < NameValueCollection > ( ) , It . IsAny < IQueryable < IntModel > > ( ) ) ) . Returns ( new RequestInfoModel ( ) { TableParameters = new DataTableAjaxPostModel { Draw = 0 } } ) ;
117
+
118
+ var executeFunctionProviderMock = new Mock < IExecuteFunctionProvider < HttpActionExecutedContext > > ( ) ;
119
+ executeFunctionProviderMock . Setup ( x => x . GetAppInicializationFunc ( It . IsAny < Type > ( ) , It . IsAny < Type > ( ) ) ) . Returns ( new Func < HttpActionExecutedContext , IServiceLocator , IFormModelBinder , IApplicationBase > ( ( ac , sl , fmb ) => { return new TestApplication < IntModel > ( serviceLocatorMock . Object , modelBinderMock . Object ) ; } ) ) ;
120
+
121
+ return executeFunctionProviderMock ;
122
+ }
123
+ }
124
+
125
+ public class JQDataTableWebApi2TestAttribute : JQDataTableAttribute
126
+ {
127
+ public List < string > CalledEvents { get ; private set ; }
128
+
129
+ internal JQDataTableWebApi2TestAttribute ( IServiceLocator serviceLocator , IExecuteFunctionProvider < HttpActionExecutedContext > executeFunctionProvider )
130
+ : base ( serviceLocator , executeFunctionProvider )
131
+ {
132
+ this . CalledEvents = new List < string > ( ) ;
133
+ }
134
+
135
+ public override void OnDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
136
+ {
137
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnDataProcessing ) ) ;
138
+ }
139
+
140
+ public override void OnDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
141
+ {
142
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnDataProcessed ) ) ;
143
+ }
144
+
145
+ public override void OnSearchDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
146
+ {
147
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnSearchDataProcessing ) ) ;
148
+ }
149
+
150
+ public override void OnSearchDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
151
+ {
152
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnSearchDataProcessed ) ) ;
153
+ }
154
+
155
+ public override void OnCustomFiltersDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
156
+ {
157
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessing ) ) ;
158
+ }
159
+
160
+ public override void OnCustomFiltersDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
161
+ {
162
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnCustomFiltersDataProcessed ) ) ;
163
+ }
164
+
165
+ public override void OnColumnsFilterDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
166
+ {
167
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessing ) ) ;
168
+ }
169
+
170
+ public override void OnColumnsFilterDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
171
+ {
172
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnColumnsFilterDataProcessed ) ) ;
173
+ }
174
+
175
+ public override void OnSortDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
176
+ {
177
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnSortDataProcessing ) ) ;
178
+ }
179
+
180
+ public override void OnSortDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
181
+ {
182
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnSortDataProcessed ) ) ;
183
+ }
184
+
185
+ public override void OnPagingDataProcessing ( ref object data , RequestInfoModel requestInfoModel )
186
+ {
187
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnPagingDataProcessing ) ) ;
188
+ }
189
+
190
+ public override void OnPagingDataProcessed ( ref object data , RequestInfoModel requestInfoModel )
191
+ {
192
+ this . CalledEvents . Add ( nameof ( JQDataTableAttribute . OnPagingDataProcessed ) ) ;
193
+ }
194
+ }
195
+ }
0 commit comments