public void EventTrackingAndReasonAreNotForcedIfFlagIsNotSetForMatchingRule() { var clause0 = ClauseBuilder.ShouldNotMatchUser(user); var clause1 = ClauseBuilder.ShouldMatchUser(user); var rule0 = new RuleBuilder().Id("id0").Variation(1).Clauses(clause0).TrackEvents(true).Build(); var rule1 = new RuleBuilder().Id("id1").Variation(1).Clauses(clause1).TrackEvents(false).Build(); var flag = new FeatureFlagBuilder("flag") .On(true) .Rules(rule0, rule1) .OffVariation(0) .Variations(new JValue("off"), new JValue("on")) .Build(); featureStore.Upsert(VersionedDataKind.Features, flag); client.StringVariation("flag", user, "default"); // It matched rule1, which has trackEvents: false, so we don't get the override behavior Assert.Equal(1, eventSink.Events.Count); var e = Assert.IsType <FeatureRequestEvent>(eventSink.Events[0]); Assert.False(e.TrackEvents); Assert.Null(e.Reason); }
public void FlagMatchesUserFromRules() { var user = User.WithKey("userkey"); var clause0 = ClauseBuilder.ShouldNotMatchUser(user); var clause1 = ClauseBuilder.ShouldMatchUser(user); var rule0 = new RuleBuilder().Id("ruleid0").Variation(2).Clauses(clause0).Build(); var rule1 = new RuleBuilder().Id("ruleid1").Variation(2).Clauses(clause1).Build(); var f = FeatureFlagWithRules(rule0, rule1); var result = f.Evaluate(user, featureStore, EventFactory.Default); var expected = new EvaluationDetail <LdValue>(LdValue.Of("on"), 2, EvaluationReason.RuleMatchReason(1, "ruleid1")); Assert.Equal(expected, result.Result); Assert.Equal(0, result.PrerequisiteEvents.Count); }