1
+ using System ;
2
+ using System . Collections . Generic ;
3
+ using System . Data ;
4
+ using System . Data . Common ;
5
+ using System . Linq ;
6
+ using NUnit . Framework ;
7
+ using Projac . Sql . Tests . Framework ;
8
+
9
+ namespace Projac . Sql . Tests
10
+ {
11
+ [ TestFixture ]
12
+ public class AnonymousSqlProjectionBuilderTests
13
+ {
14
+ private AnonymousSqlProjectionBuilder _sut ;
15
+
16
+ [ SetUp ]
17
+ public void SetUp ( )
18
+ {
19
+ _sut = new AnonymousSqlProjectionBuilder ( ) ;
20
+ }
21
+
22
+ [ Test ]
23
+ public void HandlersCanNotBeNull ( )
24
+ {
25
+ Assert . Throws < ArgumentNullException > ( ( ) => new AnonymousSqlProjectionBuilder ( null ) ) ;
26
+ }
27
+
28
+ [ Test ]
29
+ public void HandlersAreCopiedOnConstruction ( )
30
+ {
31
+ var handler1 = new SqlProjectionHandler ( typeof ( object ) , o => new SqlNonQueryCommand [ 0 ] ) ;
32
+ var handler2 = new SqlProjectionHandler ( typeof ( object ) , o => new SqlNonQueryCommand [ 0 ] ) ;
33
+ var sut = new AnonymousSqlProjectionBuilder ( new [ ]
34
+ {
35
+ handler1 ,
36
+ handler2
37
+ } ) ;
38
+
39
+ var result = sut . Build ( ) ;
40
+
41
+ Assert . That ( result , Is . EquivalentTo ( new [ ]
42
+ {
43
+ handler1 , handler2
44
+ } ) ) ;
45
+
46
+ }
47
+
48
+ [ Test ]
49
+ public void EmptyInstanceBuildReturnsExpectedResult ( )
50
+ {
51
+ var result = new AnonymousSqlProjectionBuilder ( ) . Build ( ) ;
52
+
53
+ Assert . That ( result , Is . Empty ) ;
54
+ }
55
+
56
+ [ Test ]
57
+ public void InitialInstanceBuildReturnsExpectedResult ( )
58
+ {
59
+ var result = _sut . Build ( ) ;
60
+
61
+ Assert . That ( result , Is . Empty ) ;
62
+ }
63
+
64
+ [ Test ]
65
+ public void WhenHandlerWithSingleCommandCanNotBeNull ( )
66
+ {
67
+ Assert . Throws < ArgumentNullException > ( ( ) => _sut . When ( ( Func < object , SqlNonQueryCommand > ) null ) ) ;
68
+ }
69
+
70
+
71
+ [ Test ]
72
+ public void WhenHandlerWithSingleCommandReturnsExpectedResult ( )
73
+ {
74
+ var result = _sut . When ( ( object _ ) => CommandFactory ( ) ) ;
75
+
76
+ Assert . That ( result , Is . InstanceOf < AnonymousSqlProjectionBuilder > ( ) ) ;
77
+ }
78
+
79
+ [ Test ]
80
+ public void WhenHandlerWithSingleCommandIsPreservedUponBuild ( )
81
+ {
82
+ var command = CommandFactory ( ) ;
83
+ Func < object , SqlNonQueryCommand > handler = _ => command ;
84
+ var result = _sut . When ( handler ) . Build ( ) ;
85
+
86
+ Assert . That (
87
+ result . Count ( _ => _ . Message == typeof ( object ) && _ . Handler ( null ) . SequenceEqual ( new [ ] { command } ) ) ,
88
+ Is . EqualTo ( 1 ) ) ;
89
+ }
90
+
91
+ [ Test ]
92
+ public void WhenHandlerWithSingleStatementPreservesPreviouslyCollectedStatementsUponBuild ( )
93
+ {
94
+ var commands = new [ ]
95
+ {
96
+ CommandFactory ( ) ,
97
+ CommandFactory ( )
98
+ } ;
99
+ var command = CommandFactory ( ) ;
100
+ Func < object , SqlNonQueryCommand > handler = _ => command ;
101
+ var result = _sut . When ( ( object _ ) => commands ) . When ( handler ) . Build ( ) ;
102
+
103
+ Assert . That (
104
+ result . Count ( _ => _ . Message == typeof ( object ) && _ . Handler ( null ) . SequenceEqual ( commands ) ) ,
105
+ Is . EqualTo ( 1 ) ) ;
106
+ }
107
+
108
+ [ Test ]
109
+ public void WhenHandlerWithCommandArrayCanNotBeNull ( )
110
+ {
111
+ Assert . Throws < ArgumentNullException > ( ( ) => _sut . When ( ( Func < object , SqlNonQueryCommand [ ] > ) null ) ) ;
112
+ }
113
+
114
+ [ Test ]
115
+ public void WhenHandlerWithCommandArrayReturnsExpectedResult ( )
116
+ {
117
+ var result = _sut . When ( ( object _ ) => new [ ] { CommandFactory ( ) , CommandFactory ( ) } ) ;
118
+
119
+ Assert . That ( result , Is . InstanceOf < AnonymousSqlProjectionBuilder > ( ) ) ;
120
+ }
121
+
122
+ [ Test ]
123
+ public void WhenHandlerWithStatementArrayIsPreservedUponBuild ( )
124
+ {
125
+ var command1 = CommandFactory ( ) ;
126
+ var command2 = CommandFactory ( ) ;
127
+ Func < object , SqlNonQueryCommand [ ] > handler = _ => new [ ] { command1 , command2 } ;
128
+ var result = _sut . When ( handler ) . Build ( ) ;
129
+
130
+ Assert . That (
131
+ result . Count ( _ => _ . Message == typeof ( object ) && _ . Handler ( null ) . SequenceEqual ( new [ ] { command1 , command2 } ) ) ,
132
+ Is . EqualTo ( 1 ) ) ;
133
+ }
134
+
135
+ [ Test ]
136
+ public void WhenHandlerWithStatementArrayPreservesPreviouslyCollectedStatementsUponBuild ( )
137
+ {
138
+ var commands = new [ ]
139
+ {
140
+ CommandFactory ( ) ,
141
+ CommandFactory ( )
142
+ } ;
143
+ var command1 = CommandFactory ( ) ;
144
+ var command2 = CommandFactory ( ) ;
145
+ Func < object , SqlNonQueryCommand [ ] > handler = _ => new [ ] { command1 , command2 } ;
146
+ var result = _sut . When ( ( object _ ) => commands ) . When ( handler ) . Build ( ) ;
147
+
148
+ Assert . That (
149
+ result . Count ( _ => _ . Message == typeof ( object ) && _ . Handler ( null ) . SequenceEqual ( commands ) ) ,
150
+ Is . EqualTo ( 1 ) ) ;
151
+ }
152
+
153
+ [ Test ]
154
+ public void WhenHandlerWithCommandEnumerationCanNotBeNull ( )
155
+ {
156
+ Assert . Throws < ArgumentNullException > ( ( ) => _sut . When ( ( Func < object , IEnumerable < SqlNonQueryCommand > > ) null ) ) ;
157
+ }
158
+
159
+ [ Test ]
160
+ public void WhenHandlerWithCommandEnumerationReturnsExpectedResult ( )
161
+ {
162
+ var result = _sut . When ( ( object _ ) => ( IEnumerable < SqlNonQueryCommand > ) new [ ]
163
+ {
164
+ CommandFactory ( ) , CommandFactory ( )
165
+ } ) ;
166
+
167
+ Assert . That ( result , Is . InstanceOf < AnonymousSqlProjectionBuilder > ( ) ) ;
168
+ }
169
+
170
+ [ Test ]
171
+ public void WhenHandlerWithStatementEnumerationIsPreservedUponBuild ( )
172
+ {
173
+ var command1 = CommandFactory ( ) ;
174
+ var command2 = CommandFactory ( ) ;
175
+ Func < object , IEnumerable < SqlNonQueryCommand > > handler = _ => ( IEnumerable < SqlNonQueryCommand > ) new [ ]
176
+ {
177
+ command1 , command2
178
+ } ;
179
+ var result = _sut . When ( handler ) . Build ( ) ;
180
+
181
+ Assert . That (
182
+ result . Count ( _ => _ . Message == typeof ( object ) && _ . Handler ( null ) . SequenceEqual ( new [ ] { command1 , command2 } ) ) ,
183
+ Is . EqualTo ( 1 ) ) ;
184
+ }
185
+
186
+ [ Test ]
187
+ public void WhenHandlerWithCommandEnumerationPreservesPreviouslyCollectedStatementsUponBuild ( )
188
+ {
189
+ var commands = new [ ]
190
+ {
191
+ CommandFactory ( ) ,
192
+ CommandFactory ( )
193
+ } ;
194
+ var command1 = CommandFactory ( ) ;
195
+ var command2 = CommandFactory ( ) ;
196
+ Func < object , IEnumerable < SqlNonQueryCommand > > handler = _ => ( IEnumerable < SqlNonQueryCommand > ) new [ ]
197
+ {
198
+ command1 , command2
199
+ } ;
200
+ var result = _sut . When ( ( object _ ) => commands ) . When ( handler ) . Build ( ) ;
201
+
202
+ Assert . That (
203
+ result . Count ( _ => _ . Message == typeof ( object ) && _ . Handler ( null ) . SequenceEqual ( commands ) ) ,
204
+ Is . EqualTo ( 1 ) ) ;
205
+ }
206
+
207
+ private static SqlNonQueryCommand CommandFactory ( )
208
+ {
209
+ return new SqlNonQueryCommandStub ( "text" , new DbParameter [ 0 ] , CommandType . Text ) ;
210
+ }
211
+ }
212
+ }
0 commit comments