public void GarageDoorTest()
        {
            Remotes    remote = new Remotes();
            GarageDoor door   = new GarageDoor();

            Assert.AreEqual(door.LightState, GarageDoor.LightStates.Off);
            Assert.AreEqual(door.DoorState, GarageDoor.DoorStates.Down);
            DoorUpCommand   doorUp   = new DoorUpCommand(door);
            DoorDownCommand doorDown = new DoorDownCommand(door);

            remote.SetCommand(doorUp);
            remote.ButtonWasPressed();

            // Make sure that the door went up and the light turned on
            Assert.AreEqual(door.DoorState, GarageDoor.DoorStates.Up);
            Assert.AreEqual(door.LightState, GarageDoor.LightStates.On);

            remote.ButtonWasPressed();

            // Make sure that the door stayed up and the light stayed on after a second door up command
            Assert.AreEqual(door.DoorState, GarageDoor.DoorStates.Up);
            Assert.AreEqual(door.LightState, GarageDoor.LightStates.On);

            door.AddObstruction();

            remote.SetCommand(doorDown);
            remote.ButtonWasPressed();

            // Make sure the door did not start closing when an obstruction was in the way
            Assert.AreEqual(door.DoorState, GarageDoor.DoorStates.Up);

            door.RemoveObstruction();
            remote.ButtonWasPressed();

            // Make sure that the door started ot go down when the button was pressed
            Assert.AreEqual(door.DoorState, GarageDoor.DoorStates.GoingDown);

            door.AddObstruction();

            remote.ButtonWasPressed();

            // Make sure the door detected that something was in the way when is was coming down and went back up
            Assert.AreEqual(door.DoorState, GarageDoor.DoorStates.Up);

            door.RemoveObstruction();

            remote.ButtonWasPressed();
            remote.ButtonWasPressed();


            // Make sure that when there are no obstructions and the button is pressed twice that the door closes
            // and the light turns off
            Assert.AreEqual(door.DoorState, GarageDoor.DoorStates.Down);
            Assert.AreEqual(door.LightState, GarageDoor.LightStates.Off);
        }