public void AdvancedAlarm_Triggered_SoundsAlarm()
        {
            var sut = new AdvancedAlarm(_events, _sound);

            sut.Trigger(new XY());

            Assert.IsTrue(_sound.Played);
        }
        public void AdvancedAlarm_TurnedOff_TurnsOffAlarm()
        {
            var sut = new AdvancedAlarm(_events, _sound);

            sut.Trigger(new XY());

            sut.TurnOff();

            Assert.IsTrue(_sound.Stopped);
        }
        public void AdvancedAlarm_Triggered_AlertsSecurity()
        {
            var sut             = new AdvancedAlarm(_events, _sound);
            var securityAlerted = false;

            _events.Subscribe <PositionedAlertSecurityEvent>(e => securityAlerted = true);

            sut.Trigger(new XY());

            Assert.IsTrue(securityAlerted);
        }
        public void AdvancedAlarm_Triggered_AlertSecurityEventHoldsPassedInTriggerPosition()
        {
            var sut = new AdvancedAlarm(_events, _sound);
            var expectedPosition = new XY(123, 123);
            var actualPosition   = new XY(0, 0);

            _events.Subscribe <PositionedAlertSecurityEvent>(e => actualPosition = e.TriggerLocation);

            sut.Trigger(expectedPosition);

            Assert.AreEqual(expectedPosition, actualPosition);
        }
        public void AdvancedAlarm_Disarmed_TriggerDoesNothing()
        {
            var sut             = new AdvancedAlarm(_events, _sound);
            var securityAlerted = false;

            _events.Subscribe <PositionedAlertSecurityEvent>(e => securityAlerted = true);
            sut.Disarm();

            sut.Trigger(new XY());

            Assert.IsFalse(securityAlerted);
        }
        public void AdvancedAlarm_WhenTurnedOff_CanAlertSecurityAgain()
        {
            var sut = new AdvancedAlarm(_events, _sound);
            var timesSecurityCalled = 0;

            _events.Subscribe <PositionedAlertSecurityEvent>(e => timesSecurityCalled++);
            sut.Trigger(new XY());

            sut.TurnOff();
            sut.Trigger(new XY());

            Assert.AreEqual(2, timesSecurityCalled);
        }
        public void AdvancedAlarm_TriggeredMultipleTimes_OnlyCallsSecurityOnce()
        {
            var sut = new AdvancedAlarm(_events, _sound);
            var timesSecurityCalled = 0;

            _events.Subscribe <PositionedAlertSecurityEvent>(e => timesSecurityCalled++);

            foreach (var _ in Enumerable.Range(0, 5))
            {
                sut.Trigger(new XY());
            }

            Assert.AreEqual(1, timesSecurityCalled);
        }