Skip to content

Commit 70d2a98

Browse files
authored
feat: add tracking to FeatBitProvider (#2)
1 parent 4106859 commit 70d2a98

File tree

5 files changed

+71
-1
lines changed

5 files changed

+71
-1
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ Console.WriteLine(
6767
$"Reason: {boolVariationDetail.Reason}"
6868
);
6969

70+
// optionally track the event with a metric for experimentation
71+
var trackingDetail = TrackingEventDetails.Builder().SetValue(1.0).Build();
72+
client.Track("games-run", context, trackingDetail);
73+
7074
// shut down OpenFeature
7175
await Api.Instance.ShutdownAsync();
7276

examples/ConsoleApp/Program.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
$"Reason: {boolVariationDetail.Reason}"
5050
);
5151

52+
// optionally track the event with a metric for experimentation
53+
var trackingDetail = TrackingEventDetails.Builder().SetValue(1.0).Build();
54+
client.Track("games-run", context, trackingDetail);
55+
5256
// shut down OpenFeature
5357
await Api.Instance.ShutdownAsync();
5458

src/FeatBit.OpenFeature.ServerProvider/FeatBit.OpenFeature.ServerProvider.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
<ItemGroup>
3939
<PackageReference Include="FeatBit.ServerSdk" Version="1.2.4" />
4040
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
41-
<PackageReference Include="OpenFeature" Version="2.1.0" />
41+
<PackageReference Include="OpenFeature" Version="2.5.0" />
4242
</ItemGroup>
4343

4444
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">

src/FeatBit.OpenFeature.ServerProvider/FeatBitProvider.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,22 @@ public override Task<ResolutionDetails<Value>> ResolveStructureValueAsync(
6262
CancellationToken cancellationToken = default)
6363
=> Task.FromResult(ResolveCore(flagKey, defaultValue, context, ValueConverters.Value));
6464

65+
public override void Track(
66+
string trackingEventName,
67+
EvaluationContext? evaluationContext = null,
68+
TrackingEventDetails? trackingEventDetails = null)
69+
{
70+
var user = evaluationContext.AsFbUser();
71+
if (trackingEventDetails?.Value is { } value)
72+
{
73+
_client.Track(user, trackingEventName, value);
74+
}
75+
else
76+
{
77+
_client.Track(user, trackingEventName);
78+
}
79+
}
80+
6581
private ResolutionDetails<TValue> ResolveCore<TValue>(
6682
string flagKey,
6783
TValue defaultValue,

tests/FeatBit.OpenFeature.ServerProvider.Tests/FeatBitProviderTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,52 @@ public async Task ResolveTypeMismatchError()
125125
Assert.Null(detail.Variant);
126126
}
127127

128+
[Fact]
129+
public void TrackShouldCallFbClientTrackWithNameAndUser()
130+
{
131+
_subject.Track("test", Context);
132+
133+
_fbClient.Verify(c => c.Track(It.Is<FbUser>(u => u.Key == "test-key"), "test"), Times.Once);
134+
}
135+
136+
[Fact]
137+
public void TrackShouldCallFbClientTrackWithNameAndUserAndEmptyDetails()
138+
{
139+
var details = TrackingEventDetails.Empty;
140+
141+
_subject.Track("test", Context, details);
142+
143+
_fbClient.Verify(c => c.Track(It.Is<FbUser>(u => u.Key == "test-key"), "test"), Times.Once);
144+
}
145+
146+
[Fact]
147+
public void TrackShouldCallFbClientTrackWithNameAndUserAndValue()
148+
{
149+
var details = TrackingEventDetails.Builder().SetValue(1.2).Build();
150+
151+
_subject.Track("test", Context, details);
152+
153+
_fbClient.Verify(c => c.Track(It.Is<FbUser>(u => u.Key == "test-key"), "test", 1.2), Times.Once);
154+
}
155+
156+
[Fact]
157+
public void TrackShouldCallFbClientTrackWithNameAndValue()
158+
{
159+
var details = TrackingEventDetails.Builder().SetValue(1.2).Build();
160+
161+
_subject.Track("test", null, details);
162+
163+
_fbClient.Verify(c => c.Track(It.Is<FbUser>(u => u.Key == ""), "test", 1.2), Times.Once);
164+
}
165+
166+
[Fact]
167+
public void TrackShouldCallFbClientTrackWithNameOnly()
168+
{
169+
_subject.Track("test");
170+
171+
_fbClient.Verify(c => c.Track(It.Is<FbUser>(u => u.Key == ""), "test"), Times.Once);
172+
}
173+
128174
private void Setup(ReasonKind kind, string reason, string value)
129175
{
130176
_fbClient

0 commit comments

Comments
 (0)