public void TwoFeatureEventsForSameUserGenerateOnlyOneIndexEvent() { var mockSender = MakeMockSender(); var captured = EventCapture.From(mockSender); using (var ep = MakeProcessor(_config, mockSender)) { var flag1 = new TestFlagProperties { Key = "flagkey1", Version = 11, TrackEvents = true }; var flag2 = new TestFlagProperties { Key = "flagkey2", Version = 22, TrackEvents = true }; var value = LdValue.Of("value"); RecordEval(ep, flag1, BasicEval); RecordEval(ep, flag2, BasicEval); ep.Flush(); ep.WaitUntilInactive(); Assert.Collection(captured.Events, item => CheckIndexEvent(item, BasicEval.Timestamp, _userJson), item => CheckFeatureEvent(item, flag1, BasicEval, LdValue.Null), item => CheckFeatureEvent(item, flag2, BasicEval, LdValue.Null), item => CheckSummaryEvent(item)); } }
private void CheckFeatureOrDebugEvent(string kind, LdValue t, TestFlagProperties f, TestEvalProperties e, LdValue userJson) { Assert.Equal(LdValue.Of(kind), t.Get("kind")); Assert.Equal(LdValue.Of(e.Timestamp.Value), t.Get("creationDate")); Assert.Equal(LdValue.Of(f.Key), t.Get("key")); Assert.Equal(LdValue.Of(f.Version), t.Get("version")); Assert.Equal(e.Variation.HasValue ? LdValue.Of(e.Variation.Value) : LdValue.Null, t.Get("variation")); Assert.Equal(e.Value, t.Get("value")); CheckEventUserOrKey(t, e.User, userJson); Assert.Equal(e.Reason.HasValue ? LdValue.Parse(LdJsonSerialization.SerializeObject(e.Reason.Value)) : LdValue.Null, t.Get("reason")); }
private void RecordEval(EventProcessor ep, TestFlagProperties f, TestEvalProperties e) { ep.RecordEvaluationEvent(new EvaluationEvent { Timestamp = e.Timestamp, User = e.User, FlagKey = f.Key, FlagVersion = f.Version, Variation = e.Variation, Value = e.Value, Default = e.DefaultValue, Reason = e.Reason, PrereqOf = e.PrereqOf, TrackEvents = f.TrackEvents, DebugEventsUntilDate = f.DebugEventsUntilDate }); }
private void CheckDebugEvent(LdValue t, TestFlagProperties f, TestEvalProperties e, LdValue userJson) { CheckFeatureOrDebugEvent("debug", t, f, e, userJson); }
public void NonTrackedEventsAreSummarized() { var mockSender = MakeMockSender(); var captured = EventCapture.From(mockSender); using (var ep = MakeProcessor(_config, mockSender)) { var flag1 = new TestFlagProperties { Key = "flagkey1", Version = 11 }; var flag2 = new TestFlagProperties { Key = "flagkey2", Version = 22 }; var value1 = LdValue.Of("value1"); var value2 = LdValue.Of("value2"); var default1 = LdValue.Of("default1"); var default2 = LdValue.Of("default2"); var earliestTime = UnixMillisecondTime.OfMillis(10000); var latestTime = UnixMillisecondTime.OfMillis(20000); RecordEval(ep, flag1, new TestEvalProperties { Timestamp = earliestTime, User = _user, Variation = 1, Value = value1, DefaultValue = default1 }); RecordEval(ep, flag1, new TestEvalProperties { Timestamp = UnixMillisecondTime.OfMillis(earliestTime.Value + 10), User = _user, Variation = 1, Value = value1, DefaultValue = default1 }); RecordEval(ep, flag1, new TestEvalProperties { Timestamp = UnixMillisecondTime.OfMillis(earliestTime.Value + 20), User = _user, Variation = 2, Value = value2, DefaultValue = default1 }); RecordEval(ep, flag2, new TestEvalProperties { Timestamp = latestTime, User = _user, Variation = 2, Value = value2, DefaultValue = default2 }); ep.Flush(); ep.WaitUntilInactive(); Assert.Collection(captured.Events, item => CheckIndexEvent(item, earliestTime, _userJson), item => CheckSummaryEventDetails(item, earliestTime, latestTime, MustHaveFlagSummary(flag1.Key, default1, MustHaveFlagSummaryCounter(value1, 1, flag1.Version, 2), MustHaveFlagSummaryCounter(value2, 2, flag1.Version, 1) ), MustHaveFlagSummary(flag2.Key, default2, MustHaveFlagSummaryCounter(value2, 2, flag2.Version, 1) ) ) ); } }