@@ -148,11 +148,129 @@ public void ThenTheError_CodeShouldBe(string error)
148148 }
149149 }
150150
151+ [ Then ( "the resolved metadata should contain" ) ]
152+ public void ThenTheResolvedMetadataShouldContain ( DataTable dataTable )
153+ {
154+ foreach ( var row in dataTable . Rows )
155+ {
156+ var key = row [ "key" ] ;
157+ var type = row [ "metadata_type" ] ;
158+ var value = row [ "value" ] ;
159+
160+ switch ( this . _state . Flag ! . Type )
161+ {
162+ case FlagType . Integer :
163+ this . AssertMetadata < int > ( key , type , value ) ;
164+ break ;
165+ case FlagType . Float :
166+ this . AssertMetadata < double > ( key , type , value ) ;
167+ break ;
168+ case FlagType . String :
169+ this . AssertMetadata < string > ( key , type , value ) ;
170+ break ;
171+ case FlagType . Boolean :
172+ this . AssertMetadata < bool > ( key , type , value ) ;
173+ break ;
174+ default :
175+ Assert . Fail ( "FlagType not yet supported." ) ;
176+ break ;
177+ }
178+ }
179+ }
180+
181+ [ Then ( "the resolved metadata is empty" ) ]
182+ public void ThenTheResolvedMetadataIsEmpty ( )
183+ {
184+ switch ( this . _state . Flag ! . Type )
185+ {
186+ case FlagType . Integer :
187+ this . AssertEmptyMetadata < int > ( ) ;
188+ break ;
189+ case FlagType . Float :
190+ this . AssertEmptyMetadata < double > ( ) ;
191+ break ;
192+ case FlagType . String :
193+ this . AssertEmptyMetadata < string > ( ) ;
194+ break ;
195+ case FlagType . Boolean :
196+ this . AssertEmptyMetadata < bool > ( ) ;
197+ break ;
198+ default :
199+ Assert . Fail ( "FlagType not yet supported." ) ;
200+ break ;
201+ }
202+ }
203+
151204 private void AssertOnDetails < T > ( Action < FlagEvaluationDetails < T > > assertion )
152205 {
153206 var details = this . _state . FlagEvaluationDetailsResult as FlagEvaluationDetails < T > ;
154207
155208 Assert . NotNull ( details ) ;
156209 assertion ( details ) ;
157210 }
211+
212+ private void AssertEmptyMetadata < T > ( )
213+ {
214+ var details = this . _state . FlagEvaluationDetailsResult as FlagEvaluationDetails < T > ;
215+
216+ Assert . NotNull ( details ) ;
217+ Assert . NotNull ( details . FlagMetadata ) ;
218+
219+ var count = typeof ( ImmutableMetadata )
220+ . GetProperty ( "Count" , System . Reflection . BindingFlags . Instance |
221+ System . Reflection . BindingFlags . NonPublic )
222+ . GetValue ( details . FlagMetadata ) as int ? ;
223+
224+ Assert . NotNull ( count ) ;
225+ Assert . Equal ( 0 , count ) ;
226+ }
227+
228+ private void AssertMetadata < T > ( string key , string type , string value )
229+ {
230+ var details = this . _state . FlagEvaluationDetailsResult as FlagEvaluationDetails < T > ;
231+
232+ Assert . NotNull ( details ) ;
233+ Assert . NotNull ( details . FlagMetadata ) ;
234+
235+ switch ( type )
236+ {
237+ case "Boolean" :
238+ {
239+ var expectedValue = bool . Parse ( value ) ;
240+ var actualValue = details . FlagMetadata . GetBool ( key ) ;
241+ Assert . NotNull ( actualValue ) ;
242+ Assert . Equal ( expectedValue , actualValue ) ;
243+ break ;
244+ }
245+ case "String" :
246+ {
247+ var expectedValue = value ;
248+ var actualValue = details . FlagMetadata . GetString ( key ) ;
249+ Assert . NotNull ( actualValue ) ;
250+ Assert . Equal ( expectedValue , actualValue ) ;
251+ break ;
252+ }
253+ case "Integer" :
254+ {
255+ var expectedValue = int . Parse ( value ) ;
256+ var actualValue = details . FlagMetadata . GetInt ( key ) ;
257+ Assert . NotNull ( actualValue ) ;
258+ Assert . Equal ( expectedValue , actualValue ) ;
259+ break ;
260+ }
261+ case "Float" :
262+ {
263+ var expectedValue = double . Parse ( value ) ;
264+ var actualValue = details . FlagMetadata . GetDouble ( key ) ;
265+ Assert . NotNull ( actualValue ) ;
266+ Assert . Equal ( expectedValue , actualValue ) ;
267+ break ;
268+ }
269+ default :
270+ {
271+ Assert . Fail ( $ "Metadata type '{ type } ' not supported.") ;
272+ break ;
273+ }
274+ }
275+ }
158276}
0 commit comments