public void Queue_stays_in_order_after_dequeue_in_middle()
        {
            // Arrange
            AnimalShelter <Animal> testQueue = new AnimalShelter <Animal>();
            Dog newDog = new Dog();
            Cat newCat = new Cat();

            testQueue.ArriveAtShelter(newDog);
            testQueue.ArriveAtShelter(newCat);
            testQueue.ArriveAtShelter(newDog);
            testQueue.ArriveAtShelter(newCat);

            // Removing from center to prove the order stays the same
            testQueue.TakeHome <Cat>();

            // Act
            Dog firstDog  = testQueue.TakeHome <Dog>();
            Dog secondDog = testQueue.TakeHome <Dog>();
            Cat secondCat = testQueue.TakeHome <Cat>();

            //Assert
            Assert.Equal("dog", firstDog.Type);
            Assert.Equal("dog", secondDog.Type);
            Assert.Equal("cat", secondCat.Type);
        }
        public void Can_dequeue_selected_animal_is_at_front_node()
        {
            // Arrange
            AnimalShelter <Animal> testQueue = new AnimalShelter <Animal>();
            Dog newDog = new Dog();

            testQueue.ArriveAtShelter(newDog);
            testQueue.ArriveAtShelter(newDog);

            // Act
            Dog result = testQueue.TakeHome <Dog>();

            //Assert
            Assert.Equal("dog", result.Type);
        }
        public void Cannnot_take_home_other_than_cat_or_dog()
        {
            // Arrange
            AnimalShelter <Animal> testQueue = new AnimalShelter <Animal>();
            Dog newDog = new Dog();
            Cat newCat = new Cat();

            testQueue.ArriveAtShelter(newDog);
            testQueue.ArriveAtShelter(newDog);
            testQueue.ArriveAtShelter(newDog);

            // Act
            Cat result = testQueue.TakeHome <Cat>();

            //Assert
            Assert.Null(result);
        }
        public void Can_dequeue_selected_animal_is_not_at_front()
        {
            // Arrange
            AnimalShelter <Animal> testQueue = new AnimalShelter <Animal>();
            Dog newDog = new Dog();
            Cat newCat = new Cat();

            testQueue.ArriveAtShelter(newDog);
            testQueue.ArriveAtShelter(newDog);
            testQueue.ArriveAtShelter(newCat);

            // Act
            Cat result = testQueue.TakeHome <Cat>();

            //Assert
            Assert.NotNull(result);
            Assert.Equal("cat", result.Type);
        }
        public void Can_put_animals_into_shelter()
        {
            // Arrange
            AnimalShelter <Animal> testQueue = new AnimalShelter <Animal>();
            Dog newDog = new Dog();

            // Act
            testQueue.ArriveAtShelter(newDog);

            Animal result = testQueue.Peek();

            //Assert
            Assert.Equal("dog", result.Type);
        }