1- using Efrpg ;
1+ using System . Collections . Generic ;
2+ using Efrpg ;
23using NUnit . Framework ;
34using System . Data ;
5+ using System . Linq ;
46using Generator . Tests . Common ;
57
68namespace Generator . Tests . Unit
@@ -9,34 +11,242 @@ namespace Generator.Tests.Unit
911 [ Category ( Constants . CI ) ]
1012 public class StoredProcedureTests
1113 {
12- public StoredProcedure Sut { get ; private set ; }
14+ private StoredProcedure _sut ;
1315
1416 [ SetUp ]
1517 public void Init ( )
1618 {
17- Sut = new StoredProcedure { Schema = new Schema ( "dbo" ) , DbName = "name" , NameHumanCase = "some_sp" , IsStoredProcedure = true } ;
18-
19+ _sut = new StoredProcedure
20+ {
21+ Schema = new Schema ( "dbo" ) ,
22+ DbName = "name" ,
23+ NameHumanCase = "some_sp" ,
24+ IsStoredProcedure = true ,
25+ ReturnModels = new List < List < DataColumn > >
26+ {
27+ new List < DataColumn > { new DataColumn { AllowDBNull = true } }
28+ } ,
29+ Parameters = new List < StoredProcedureParameter >
30+ {
31+ new StoredProcedureParameter
32+ {
33+ Mode = StoredProcedureParameterMode . In ,
34+ PropertyType = "DateTime" ,
35+ NameHumanCase = "A" ,
36+ Ordinal = 1
37+ } ,
38+ new StoredProcedureParameter
39+ {
40+ Mode = StoredProcedureParameterMode . InOut ,
41+ PropertyType = "DateTime" ,
42+ NameHumanCase = "B" ,
43+ Ordinal = 2
44+ } ,
45+ new StoredProcedureParameter
46+ {
47+ Mode = StoredProcedureParameterMode . In ,
48+ PropertyType = "DateTime" ,
49+ NameHumanCase = "C" ,
50+ Ordinal = 3
51+ } ,
52+ new StoredProcedureParameter
53+ {
54+ Mode = StoredProcedureParameterMode . Out , // Ignored
55+ PropertyType = "DateTime" ,
56+ NameHumanCase = "X" ,
57+ Ordinal = 4
58+ } ,
59+ new StoredProcedureParameter
60+ {
61+ Mode = StoredProcedureParameterMode . In ,
62+ PropertyType = "DateTime" ,
63+ NameHumanCase = "D" ,
64+ Ordinal = 5
65+ }
66+ }
67+ } ;
1968 }
2069
2170 [ Description ( "Issue #286" ) ]
22- [ Test ]
2371 [ TestCase ( "JSON_F52E2B61-18A1-11d1-B105-00805F49916B" , "JSON_Value" ) ]
2472 [ TestCase ( "XML_F52E2B61-18A1-11d1-B105-00805F49916B" , "XML_Value" ) ]
2573 public void ColumnNameForXmlOrJsonReturnType ( string exampleServerGenerated , string expected )
2674 {
2775 // Arrange
28-
2976 var col = new DataColumn
3077 {
3178 DataType = typeof ( string ) ,
3279 ColumnName = exampleServerGenerated ,
3380 } ;
3481
3582 // Act
36- var result = Sut . WriteStoredProcReturnColumn ( col ) ;
83+ var result = _sut . WriteStoredProcReturnColumn ( col ) ;
3784
3885 // Assert
3986 Assert . AreEqual ( $ "public string { expected } {{ get; set; }}", result ) ;
4087 }
88+
89+ [ TestCase ( false , false , "DateTime? A, out DateTime? B, DateTime? C = null, DateTime? D = null" ) ]
90+ [ TestCase ( false , true , "DateTime? A, out DateTime? B, DateTime? C, DateTime? D" ) ]
91+ [ TestCase ( true , false , "DateTime? A, out DateTime? B, DateTime? C, DateTime? D, out int procResult" ) ]
92+ [ TestCase ( true , true , "DateTime? A, out DateTime? B, DateTime? C, DateTime? D, out int procResult" ) ]
93+ public void WriteStoredProcFunctionParams_HasTailNullable ( bool includeProcResult , bool forInterface , string expected )
94+ {
95+ // Act
96+ var result = _sut . WriteStoredProcFunctionParams ( includeProcResult , forInterface ) ;
97+
98+ // Assert
99+ Assert . IsNotNull ( result ) ;
100+ Assert . AreEqual ( expected , result ) ;
101+ }
102+
103+ [ TestCase ( false , false , "DateTime? A, out DateTime? B, DateTime? C, out DateTime? D" ) ]
104+ [ TestCase ( false , true , "DateTime? A, out DateTime? B, DateTime? C, out DateTime? D" ) ]
105+ [ TestCase ( true , false , "DateTime? A, out DateTime? B, DateTime? C, out DateTime? D, out int procResult" ) ]
106+ [ TestCase ( true , true , "DateTime? A, out DateTime? B, DateTime? C, out DateTime? D, out int procResult" ) ]
107+ public void WriteStoredProcFunctionParams_NoTailNullable ( bool includeProcResult , bool forInterface , string expected )
108+ {
109+ // Arrange - Set last to be an 'out' parameter.
110+ _sut . Parameters . Single ( x => x . NameHumanCase == "D" ) . Mode = StoredProcedureParameterMode . InOut ;
111+
112+ // Act
113+ var result = _sut . WriteStoredProcFunctionParams ( includeProcResult , forInterface ) ;
114+
115+ // Assert
116+ Assert . IsNotNull ( result ) ;
117+ Assert . AreEqual ( expected , result ) ;
118+ }
119+
120+ [ Test ]
121+ [ TestCase ( false , false , false , 3 ) ]
122+ [ TestCase ( false , true , false , 0 ) ]
123+ [ TestCase ( true , false , false , 0 ) ]
124+ [ TestCase ( true , true , false , 0 ) ]
125+ [ TestCase ( false , false , true , 0 ) ]
126+ [ TestCase ( false , true , true , 0 ) ]
127+ [ TestCase ( true , false , true , 0 ) ]
128+ [ TestCase ( true , true , true , 0 ) ]
129+ public void WhichTailEndParametersCanBeNullable ( bool includeProcResult , bool forInterface , bool noTailNullable , int expected )
130+ {
131+ if ( noTailNullable )
132+ {
133+ // Arrange - Set last to be an 'out' parameter.
134+ _sut . Parameters . Single ( x => x . NameHumanCase == "D" ) . Mode = StoredProcedureParameterMode . InOut ;
135+ }
136+
137+ // Act
138+ var result = _sut . WhichTailEndParametersCanBeNullable ( GetParams ( ) , includeProcResult , forInterface ) ;
139+
140+ // Assert
141+ Assert . IsNotNull ( result ) ;
142+ Assert . AreEqual ( expected , result ) ;
143+ }
144+
145+ [ Test ]
146+ public void WhichTailEndParametersCanBeNullable_AllOutParameters ( )
147+ {
148+ foreach ( var parameter in _sut . Parameters )
149+ {
150+ parameter . Mode = StoredProcedureParameterMode . InOut ;
151+ }
152+
153+ // Act
154+ var result = _sut . WhichTailEndParametersCanBeNullable ( GetParams ( ) , false , false ) ;
155+
156+ // Assert
157+ Assert . IsNotNull ( result ) ;
158+ Assert . AreEqual ( 0 , result ) ;
159+ }
160+
161+ [ Test ]
162+ public void WhichTailEndParametersCanBeNullable_AllInParameters ( )
163+ {
164+ foreach ( var parameter in _sut . Parameters )
165+ {
166+ parameter . Mode = StoredProcedureParameterMode . In ;
167+ }
168+
169+ // Act
170+ var result = _sut . WhichTailEndParametersCanBeNullable ( GetParams ( ) , false , false ) ;
171+
172+ // Assert
173+ Assert . IsNotNull ( result ) ;
174+ Assert . AreEqual ( 1 , result ) ;
175+ }
176+
177+ [ Test ]
178+ public void WhichTailEndParametersCanBeNullable_AllInOutParameters ( )
179+ {
180+ foreach ( var parameter in _sut . Parameters )
181+ {
182+ parameter . Mode = StoredProcedureParameterMode . InOut ;
183+ }
184+
185+ // Act
186+ var result = _sut . WhichTailEndParametersCanBeNullable ( GetParams ( ) , false , false ) ;
187+
188+ // Assert
189+ Assert . IsNotNull ( result ) ;
190+ Assert . AreEqual ( 0 , result ) ;
191+ }
192+
193+ [ Test ]
194+ public void ThisHasMixedOutParameters ( )
195+ {
196+ // Arrange
197+ _sut . Parameters = new List < StoredProcedureParameter >
198+ {
199+ new StoredProcedureParameter
200+ {
201+ Mode = StoredProcedureParameterMode . In ,
202+ NameHumanCase = "foo" ,
203+ PropertyType = "DateTime" ,
204+ Ordinal = 1
205+ } ,
206+ new StoredProcedureParameter
207+ {
208+ Mode = StoredProcedureParameterMode . InOut ,
209+ NameHumanCase = "firstOutParam" ,
210+ PropertyType = "int" ,
211+ Ordinal = 2
212+ } ,
213+ new StoredProcedureParameter
214+ {
215+ Mode = StoredProcedureParameterMode . In ,
216+ NameHumanCase = "bar" ,
217+ PropertyType = "DateTime" ,
218+ Ordinal = 3
219+ } ,
220+ new StoredProcedureParameter
221+ {
222+ Mode = StoredProcedureParameterMode . InOut ,
223+ NameHumanCase = "secondOutParam" ,
224+ PropertyType = "int" ,
225+ Ordinal = 4
226+ } ,
227+ new StoredProcedureParameter
228+ {
229+ Mode = StoredProcedureParameterMode . In ,
230+ NameHumanCase = "baz" ,
231+ PropertyType = "DateTime" ,
232+ Ordinal = 5
233+ }
234+ } ;
235+
236+ // Act
237+ var resultString = _sut . WriteStoredProcFunctionParams ( false , false ) ;
238+ var resultTail = _sut . WhichTailEndParametersCanBeNullable ( GetParams ( ) , false , false ) ;
239+
240+ // Assert
241+ Assert . IsNotNull ( resultString ) ;
242+ Assert . IsNotNull ( resultTail ) ;
243+ Assert . AreEqual ( 5 , resultTail ) ;
244+ Assert . AreEqual ( "DateTime? foo, out int? firstOutParam, DateTime? bar, out int? secondOutParam, DateTime? baz = null" , resultString ) ;
245+ }
246+
247+ private List < StoredProcedureParameter > GetParams ( )
248+ {
249+ return _sut . Parameters . Where ( x => x . Mode != StoredProcedureParameterMode . Out ) . OrderBy ( x => x . Ordinal ) . ToList ( ) ;
250+ }
41251 }
42252}
0 commit comments