public void ShouldRecordInstrumentationForIsEnabled([Values(true, false)] Boolean enabled)
        {
            var instrumenter = new MockInstrumenter();
            var feature      = new Feature("Name", new MemoryAdapter(), instrumenter);

            if (enabled)
            {
                feature.Enable();
            }
            else
            {
                feature.Disable();
            }
            instrumenter.Events.Clear();

            feature.IsEnabled();

            var expectedPayload = new InstrumentationPayload {
                FeatureName = "Name",
                Operation   = "enabled?",
                Thing       = null,
                Result      = enabled
            };

            if (enabled)
            {
                expectedPayload.GateName = feature.BooleanGate.Name;
            }
            var expectedEvent = new MockInstrumenter.Event {
                Type    = InstrumentationType.FeatureOperation,
                Payload = expectedPayload,
            };

            Assert.That(instrumenter.Events, Has.Member(expectedEvent));
        }
        public void ShouldRecordGateInstrumentationForIsEnabledFor([Values(true, false)] Boolean enabled)
        {
            var instrumenter = new MockInstrumenter();
            var feature      = new Feature("Name", new MemoryAdapter(), instrumenter);

            var flipperActor = MockActor("User:5");

            if (enabled)
            {
                feature.EnableActor(flipperActor);
            }
            else
            {
                feature.DisableActor(flipperActor);
            }
            instrumenter.Events.Clear();

            feature.IsEnabledFor(flipperActor);

            var expectedPayload = new InstrumentationPayload {
                FeatureName = "Name",
                GateName    = "actor",
                Operation   = "open?",
                Thing       = flipperActor,
                Result      = enabled,
            };

            if (enabled)
            {
                expectedPayload.GateName = feature.ActorGate.Name;
            }
            var expectedEvent = new MockInstrumenter.Event {
                Type    = InstrumentationType.GateOperation,
                Payload = expectedPayload,
            };

            Assert.That(instrumenter.Events, Has.Member(expectedEvent));
        }