public void Door_MustSetIsOpenToTrue_WhenIsCloseAndRequestOpening()
        {
            TimeConfiguration timeConfig = new TimeConfigurationNoDelayDummyForTest();
            IDoor             door       = new Door(timeConfig);

            door.RequestOpening();

            Assert.True(door.IsOpen);
        }
        public void Door_MustNotify_WhenStartOpening()
        {
            TimeConfiguration                   timeConfig     = new TimeConfigurationNoDelayDummyForTest();
            IDoor                               door           = new Door(timeConfig);
            IList <DoorMovmentEventArgs>        receivedEvents = new List <DoorMovmentEventArgs>();
            EventHandler <DoorMovmentEventArgs> del            = delegate(object sender, DoorMovmentEventArgs e)
            {
                receivedEvents.Add(e);
            };

            door.SubscribeToDoorMovmentEvents(del);

            door.RequestOpening();

            Assert.False(receivedEvents.First().HasClosed);
            door.UnsubscribeToDoorMovmentEvents(del);
        }
        public async Task Door_MustCloseAutomatically_AfterOpening()
        {
            TimeConfiguration                   timeConfig     = new TimeConfigurationNoDelayDummyForTest();
            IDoor                               door           = new Door(timeConfig);
            IList <DoorMovmentEventArgs>        receivedEvents = new List <DoorMovmentEventArgs>();
            EventHandler <DoorMovmentEventArgs> del            = delegate(object sender, DoorMovmentEventArgs e)
            {
                receivedEvents.Add(e);
            };

            door.SubscribeToDoorMovmentEvents(del);

            await door.RequestOpening();

            Assert.Equal(2, receivedEvents.Count);
            Assert.True(receivedEvents.Last().HasClosed);
            door.UnsubscribeToDoorMovmentEvents(del);
        }