Skip to content

Commit

Permalink
test: Add unit tests for EvaluationEventBuilder to validate event cre…
Browse files Browse the repository at this point in the history
…ation

Signed-off-by: André Silva <2493377+askpt@users.noreply.github.com>
  • Loading branch information
askpt committed Mar 7, 2025
1 parent f94d83a commit f6f3d0f
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions test/OpenFeature.Tests/Telemetry/EvaluationEventBuilderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using System.Collections.Generic;
using OpenFeature.Constant;
using OpenFeature.Model;
using OpenFeature.Telemetry;
using Xunit;

namespace OpenFeature.Tests.Telemetry
{
public class EvaluationEventBuilderTests
{
[Fact]
public void Build_ShouldReturnEventWithCorrectAttributes()
{
// Arrange
var clientMetadata = new ClientMetadata("client", "1.0.0");
var providerMetadata = new Metadata("provider");
var hookContext = new HookContext<Value>("flagKey", new Value(), FlagValueType.Object, clientMetadata,
providerMetadata, EvaluationContext.Empty);
var metadata = new Dictionary<string, object>
{
{ "flagSetId", "flagSetId" }, { "contextId", "contextId" }, { "version", "version" }
};
var flagMetadata = new ImmutableMetadata(metadata);
var details = new FlagEvaluationDetails<Value>("flagKey", new Value("value"), ErrorType.None,
reason: "reason", variant: "variant", flagMetadata: flagMetadata);

// Act
var evaluationEvent = EvaluationEventBuilder.Build(hookContext, details);

// Assert
Assert.Equal("feature_flag.evaluation", evaluationEvent.Name);
Assert.Equal("flagKey", evaluationEvent.Attributes[TelemetryConstants.Key]);
Assert.Equal("provider", evaluationEvent.Attributes[TelemetryConstants.Provider]);
Assert.Equal("reason", evaluationEvent.Attributes[TelemetryConstants.Reason]);
Assert.Equal("variant", evaluationEvent.Attributes[TelemetryConstants.Variant]);
Assert.Equal("contextId", evaluationEvent.Attributes[TelemetryFlagMetadata.ContextId]);
Assert.Equal("flagSetId", evaluationEvent.Attributes[TelemetryFlagMetadata.FlagSetId]);
Assert.Equal("version", evaluationEvent.Attributes[TelemetryFlagMetadata.Version]);
}

[Fact]
public void Build_ShouldHandleErrorDetails()
{
// Arrange
var clientMetadata = new ClientMetadata("client", "1.0.0");
var providerMetadata = new Metadata("provider");
var hookContext = new HookContext<Value>("flagKey", new Value(), FlagValueType.Object, clientMetadata,
providerMetadata, EvaluationContext.Empty);
var metadata = new Dictionary<string, object>
{
{ "flagSetId", "flagSetId" }, { "contextId", "contextId" }, { "version", "version" }
};
var flagMetadata = new ImmutableMetadata(metadata);
var details = new FlagEvaluationDetails<Value>("flagKey", new Value("value"), ErrorType.General,
errorMessage: "errorMessage", reason: "reason", variant: "variant", flagMetadata: flagMetadata);

// Act
var evaluationEvent = EvaluationEventBuilder.Build(hookContext, details);

// Assert
Assert.Equal("General", evaluationEvent.Attributes[TelemetryConstants.ErrorCode]);
Assert.Equal("errorMessage", evaluationEvent.Attributes[TelemetryConstants.ErrorMessage]);
}

[Fact]
public void Build_ShouldHandleMissingVariant()
{
// Arrange
var clientMetadata = new ClientMetadata("client", "1.0.0");
var providerMetadata = new Metadata("provider");
var hookContext = new HookContext<Value>("flagKey", new Value("value"), FlagValueType.Object, clientMetadata,
providerMetadata, EvaluationContext.Empty);
var metadata = new Dictionary<string, object>
{
{ "flagSetId", "flagSetId" }, { "contextId", "contextId" }, { "version", "version" }
};
var flagMetadata = new ImmutableMetadata(metadata);
var details = new FlagEvaluationDetails<Value>("flagKey", new Value("value"), ErrorType.None,
reason: "reason", variant: "", flagMetadata: flagMetadata);

// Act
var evaluationEvent = EvaluationEventBuilder.Build(hookContext, details);

// Assert
Assert.Throws<KeyNotFoundException>(() => evaluationEvent.Attributes[TelemetryConstants.Variant]);
}
}
}

0 comments on commit f6f3d0f

Please sign in to comment.