Skip to content

Commit 091081c

Browse files
test(flagd): Add metadata assertions and test files for flagd e2e tests (#569)
Signed-off-by: Kyle Julian <[email protected]>
1 parent 23a1aeb commit 091081c

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

test/OpenFeature.Contrib.Providers.Flagd.E2e.Common/Steps/FlagSteps.cs

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

test/OpenFeature.Contrib.Providers.Flagd.E2e.ProcessTest/OpenFeature.Contrib.Providers.Flagd.E2e.ProcessTest.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/evaluation.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
66
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/targeting.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
77
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/selector.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
8+
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/metadata.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
89
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/contextEnrichment.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
910
</ItemGroup>
1011

test/OpenFeature.Contrib.Providers.Flagd.E2e.RpcTest/OpenFeature.Contrib.Providers.Flagd.E2e.RpcTest.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<ItemGroup>
55
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/evaluation.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
66
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/targeting.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
7+
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/metadata.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
78
<None Include="../../src/OpenFeature.Contrib.Providers.Flagd/flagd-testbed/gherkin/contextEnrichment.feature" Link="../../../Features/%(Filename)%(Extension)" DestinationFolder="../../../Features/" CopyToOutputDirectory="PreserveNewest" />
89
</ItemGroup>
910

0 commit comments

Comments
 (0)