public void should_Return_A_List_Of_Not_Done_Features()
        {
            // Arrange
            var expectedItems = new List<Feature>
                {
                    new Feature {Name = "Login page", Status = FeatureStatus.NotStarted},
                    new Feature {Name = "Register", Status = FeatureStatus.InProgress},
                    new Feature {Name = "Search page", Status = FeatureStatus.NotStarted},
                    new Feature {Name = "Logout page", Status = FeatureStatus.InProgress}
                };

            var serviceSubsitute = Substitute.For<IFeatureDBWrapper>();
            serviceSubsitute.AllNotDone().Returns(expectedItems);

            var controller = new HomeController(serviceSubsitute);

            // Act
            var view = controller.Index() as ViewResult;

            // Assert
            serviceSubsitute.Received().AllNotDone();
            serviceSubsitute.DidNotReceive().AllDone();
            serviceSubsitute.DidNotReceiveWithAnyArgs().ByStatus(FeatureStatus.NotStarted);

            view.Should().Not.Be.Null();
            var model = view.ViewData.Model;
            model.Should().Not.Be.Null();
        }
        public void should_return_a_view_with_done_items_when_the_paremeter_is_set()
        {
            // Arrange
            var expectedItems = new List<Feature>
                {
                    new Feature {Name = "Login page", Status = FeatureStatus.Done},
                    new Feature {Name = "Register", Status = FeatureStatus.Done}
                };

            var serviceSubsitute = Substitute.For<IFeatureDBWrapper>();
            serviceSubsitute.AllNotDone().Returns(expectedItems);
            var controller = new HomeController(serviceSubsitute);

            // Act
            var view = controller.Index(true) as ViewResult;

            // Assert
            serviceSubsitute.Received().AllDone();
            serviceSubsitute.DidNotReceive().AllNotDone();
            serviceSubsitute.DidNotReceiveWithAnyArgs().ByStatus(FeatureStatus.NotStarted);

            view.Should().Not.Be.Null();
            var model = view.ViewData.Model;
            model.Should().Not.Be.Null();
        }
        public void WhenINavigateToTheHomepage()
        {
            // 4. Create the controller with the subsitute
            // which drives forward the need for a depenendcy to the constructor
            var featureDBWrapper = ScenarioContext.Current.Get<IFeatureDBWrapper>(DBWRAPPER_KEY);
            var controller = new HomeController(featureDBWrapper);

            // 5. Call the controller and return the view for the index action
            var indexView = controller.Index() as ViewResult;

            // 6. Do some basic assertions
            indexView.Should().Not.Be.Null();
            indexView.ViewData.Model.Should().Not.Be.Null();
            var features = (IList<Feature>)indexView.ViewData.Model;
            features.Should().Not.Be.Null();

            featureDBWrapper.Received().AllNotDone();


            // 6. Save the view in the ScenarioContext
            ScenarioContext.Current.Set(features, FEATURES_IN_VIEW_KEY);
        }
        public void should_return_a_filtred_list_for_filter_string()
        {
            // Arrange
            var expectedItems = new List<Feature>
                {
                    new Feature {Name = "Login page", Status = FeatureStatus.NotStarted}
                };


            var serviceSubsitute = Substitute.For<IFeatureDBWrapper>();
            serviceSubsitute.AllNotDone().Returns(expectedItems);
            var controller = new HomeController(serviceSubsitute);

            // Act
            var view = controller.Index(false, "Login") as ViewResult;
            
            // Assert
            serviceSubsitute.Received().All();

            view.Should().Not.Be.Null();
            var model = view.ViewData.Model;
            model.Should().Not.Be.Null();
        }