public Specification when_updating_status_with_invalid_model()
        {
            string statusText = new string('*', 141);
            var statusViewModel = new StatusViewModel
            {
                Status = statusText
            };
            ISessionAdapter session = sessionFactory();
            var testDbContext = new TestDbContext();
            Container container = containerFactory(testDbContext);

            int maxId = testDbContext.Statuses.Max(_ => _.Key);

            return new QuerySpecification<TwitterController, ViewResult>
            {
                On = () =>
                         {
                             session.SetTwitterAccessToken(new OAuthToken("", ""));
                             return GetTwitterController(container, session);
                         },
                When = ctrl => ctrl.UpdateStatus(statusViewModel) as ViewResult,
                Expect =
                               {
                                   routeResult =>routeResult.ViewName == "Send",
                               },
            };
        }
        public Specification when_updating_status_with_access_token()
        {
            const string statusText = "some test status";
            var statusViewModel = new StatusViewModel
                                      {
                                          Status = statusText
                                      };
            ISessionAdapter session = sessionFactory();
            var testDbContext = new TestDbContext();
            Container container = containerFactory(testDbContext);

            var mockTwitterProvider = MockTwitterProvider(statusText);

            container.TwitterServiceFactory = () => mockTwitterProvider.Object;

            int statusCount = testDbContext.Statuses.Count;

            return new ActionSpecification<TwitterController>
                       {
                           On = () =>
                                    {
                                        session.SetTwitterAccessToken(new OAuthToken("", ""));
                                        return GetTwitterController(container, session);
                                    },
                           When = ctrl => ctrl.UpdateStatus(statusViewModel),
                           Expect =
                               {
                                   ctrl => testDbContext.Statuses.Count == statusCount + 1,
                                   ctrl => testDbContext.Statuses.Last().Value.Text == statusText,
                               },
                       };
        }
        public Specification when_viewing_status_with_incorrect_id()
        {
            var testDbContext = new TestDbContext();
            Container container = containerFactory(testDbContext);

            return new FailingSpecification<TwitterController, KeyNotFoundException>
                       {
                           On = () => GetTwitterController(container),
                           When = ctrl => ctrl.View(100),
                           Expect =
                               {
                                   ex => ex != null,
                               },
                       };
        }
        public Specification when_viewing_status_with_correct_id()
        {
            var testDbContext = new TestDbContext();
            Container container = containerFactory(testDbContext);
            KeyValuePair<int, TwitterStatus> testStatus = testDbContext.Statuses.First(_ => _.Key == 1);

            return new QuerySpecification<TwitterController, ViewResult>
                       {
                           On = () => GetTwitterController(container),
                           When = ctrl => ctrl.View(1) as ViewResult,
                           Expect =
                               {
                                   viewResult => viewResult.Model is TwitterStatus,
                                   viewResult => ((TwitterStatus) viewResult.Model).Text == testStatus.Value.Text,
                               },
                       };
        }