コード例 #1
0
        public void Create_Post_CreatesNewLunchAndSavesToDb()
        {
            // Arrange
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Create(new LunchCreateEditViewModel
            {
                Host        = "Brent",
                MeetingTime = new DateTime(1999, 12, 31),
                Restaurants = new List <CheckBoxListItem>()
                {
                    new CheckBoxListItem {
                        Display = "some restaurant", IsChecked = true
                    }
                }
            }) as RedirectToRouteResult;

            // Assert
            var sut = _context.Lunches.First();

            sut.ShouldNotBeNull();
            sut.Restaurants.ShouldNotBeEmpty();
            result.RouteValues["action"].ShouldBe("Index");
        }
コード例 #2
0
        public void Edit_Post_EditsRecordAndSavesToDb()
        {
            // Arrange
            _context.Lunches.Add(new Lunch
            {
                Host        = "Brent",
                Restaurants = new List <Restaurant>
                {
                    new Restaurant
                    {
                        Name      = "Lunchbox Labs",
                        Latitude  = 55,
                        Longitude = 99
                    }
                },
                MeetingTime = new DateTime(1999, 12, 31)
            });
            _context.SaveChanges();
            var controller = new LunchesController(_context);

            var editableRecordId    = _context.Restaurants.First().Id;
            var recordEditGetResult = controller.Edit(editableRecordId) as ViewResult;

            var recordToEdit = recordEditGetResult.Model as LunchCreateEditViewModel;

            recordToEdit.Host = "Bob";

            // Act
            var result = controller.Edit(editableRecordId, recordToEdit) as RedirectToRouteResult;

            // Assert
            _context.Lunches.First().Host.ShouldBe("Bob");
            result.RouteValues["action"].ShouldBe("Index");
        }
コード例 #3
0
        public void StuffStartsHere()
        {
            _context = new DevLunchDbContext(Effort.DbConnectionFactory.CreateTransient());

            _controller = new LunchesController(_context);
            _controller.WithAuthenticatedUser("Brent", "ImBrent");

            _lunch = new Lunch()
            {
                Host        = "Brent",
                MeetingTime = new DateTime(1985, 6, 6),
                Restaurants = new List <Restaurant>()
                {
                    new Restaurant {
                        Name = "Linda's", Latitude = 55, Longitude = 60
                    },
                    new Restaurant {
                        Name = "The Pine Box", Latitude = 55, Longitude = 60
                    },
                    new Restaurant {
                        Name = "Sizzler", Latitude = 55, Longitude = 60
                    }
                }
            };

            _context.Lunches.Add(_lunch);
            _context.SaveChanges();

            _lunchId       = _lunch.Id;
            _restaurantId1 = _lunch.Restaurants.First().Id;
            _restaurantId2 = _lunch.Restaurants.FirstOrDefault(r => r.Name == "The Pine Box").Id;
            _restaurantId3 = _lunch.Restaurants.Last().Id;
        }
コード例 #4
0
        public void Delete_Post_RemovesRecordFromDb()
        {
            // Arrange
            _context.Lunches.Add(new Lunch
            {
                Host        = "Brent",
                Restaurants = new List <Restaurant>
                {
                    new Restaurant
                    {
                        Name      = "Lunchbox Labs",
                        Latitude  = 55,
                        Longitude = 99
                    }
                },
                MeetingTime = new DateTime(1999, 12, 31)
            });
            _context.SaveChanges();
            var controller = new LunchesController(_context);

            var recordId = _context.Lunches.First().Id;
            var recordDeleteGetResult = controller.Delete(recordId) as ViewResult;

            var recordToDelete = recordDeleteGetResult.Model as Lunch;

            // Act
            var result = controller.DeleteConfirmed(recordToDelete.Id) as RedirectToRouteResult;

            // Assert
            _context.Lunches.Count().ShouldBe(0);
            result.RouteValues["action"].ShouldBe("Index");
        }
コード例 #5
0
        public void Edit_Get_ShowsRestaurantInTheView()
        {
            // Arrange
            _context.Lunches.Add(new Lunch
            {
                Host        = "Brent",
                Restaurants = new List <Restaurant>
                {
                    new Restaurant
                    {
                        Name      = "Lunchbox Labs",
                        Latitude  = 55,
                        Longitude = 99
                    }
                },
                MeetingTime = new DateTime(1999, 12, 31)
            });
            _context.SaveChanges();
            var controller = new LunchesController(_context);

            // Act
            var Id     = _context.Lunches.First().Id;
            var result = controller.Edit(Id) as ViewResult;

            // Assert
            result.ShouldNotBeNull();
            result.Model.ShouldBeOfType <LunchCreateEditViewModel>();
        }
コード例 #6
0
        public void Delete_Get_ReturnsViewWithRecord()
        {
            // Arrange
            _context.Lunches.Add(new Lunch
            {
                Host        = "Brent",
                Restaurants = new List <Restaurant>
                {
                    new Restaurant
                    {
                        Name      = "Lunchbox Labs",
                        Latitude  = 55,
                        Longitude = 99
                    }
                },
                MeetingTime = new DateTime(1999, 12, 31)
            });
            _context.SaveChanges();
            var controller = new LunchesController(_context);

            // Act
            var Id     = _context.Lunches.First().Id;
            var result = controller.Delete(Id) as ViewResult;

            // Assert
            result.Model.ShouldNotBeNull();
            result.Model.ShouldBeOfType <Lunch>();
        }
コード例 #7
0
        public void Details_ReturnsHttpNotFound_WhenRecordDoesNotExist()
        {
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Details(999) as HttpStatusCodeResult;

            // Assert
            result.ShouldBeOfType <HttpNotFoundResult>();
            result.StatusCode.ShouldBe(404);
        }
コード例 #8
0
        public void Edit_Get_ThrowsIfRecordIdIsNull()
        {
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Edit(null) as HttpStatusCodeResult;

            // Assert
            result.ShouldBeOfType <HttpStatusCodeResult>();
            result.StatusCode.ShouldBe(400);
        }
コード例 #9
0
        public void Index_ReturnsAllLunchesInDescendingOrder()
        {
            // Arrange
            var Lunches = new List <Lunch>
            {
                new Lunch
                {
                    Host        = "Brent",
                    Restaurants = new List <Restaurant>
                    {
                        new Restaurant
                        {
                            Name      = "Lunchbox Labs",
                            Latitude  = 55,
                            Longitude = 99
                        }
                    },
                    MeetingTime = new DateTime(1999, 12, 31)
                },
                new Lunch
                {
                    Host        = "Drew",
                    Restaurants = new List <Restaurant>
                    {
                        new Restaurant
                        {
                            Name      = "The Pine Box",
                            Latitude  = 55,
                            Longitude = 99
                        }
                    },
                    MeetingTime = new DateTime(2005, 12, 31)
                },
            };

            _context.Lunches.AddRange(Lunches);
            _context.SaveChanges();

            var controller = new LunchesController(_context);

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

            // Assert
            var data = result.Model as IEnumerable <LunchDetailsViewModel>;

            data.ShouldNotBeNull();
            data.Count().ShouldBe(2);
            data.First().Host.ShouldBe("Drew");
            data.Last().Host.ShouldBe("Brent");
            data.First().MeetingTimeDisplay.ShouldBe("12:00 AM Saturday, December 31, 2005");
            data.Last().MeetingTimeDisplay.ShouldBe("12:00 AM Friday, December 31, 1999");
        }
コード例 #10
0
        public void Details_WithoutIdThrows()
        {
            // Arrange
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Details(null) as HttpStatusCodeResult;

            // Assert
            result.ShouldBeOfType <HttpStatusCodeResult>();
            result.StatusCode.ShouldBe(400);
        }
コード例 #11
0
        public void Delete_ThrowsWhenRecordCannotBeFound()
        {
            // Arrange
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Delete(999) as HttpStatusCodeResult;

            // Assert
            result.ShouldBeOfType <HttpNotFoundResult>();
            result.StatusCode.ShouldBe(404);
        }
コード例 #12
0
        public void Delete_ThrowsWhenIdIsNull()
        {
            // Arrange
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Delete(null) as HttpStatusCodeResult;

            // Assert
            result.ShouldBeOfType <HttpStatusCodeResult>();
            result.StatusCode.ShouldBe(400);
        }
コード例 #13
0
        public void Create_Get_CreatesDefaultAndShowsItInTheView()
        {
            // Arrange
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Create() as ViewResult;

            // Assert
            result.ShouldNotBeNull();
            result.Model.ShouldBeOfType <LunchCreateEditViewModel>();
        }
コード例 #14
0
        public void Edit_Get_ThrowsNotFoundIfRecordNotInDb()
        {
            var _context   = new DevLunchDbContext(Effort.DbConnectionFactory.CreateTransient());
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Details(999) as HttpStatusCodeResult;

            // Assert
            result.ShouldBeOfType <HttpNotFoundResult>();
            result.StatusCode.ShouldBe(404);
        }
コード例 #15
0
        public void Details_ReturnsOneLunchWithRestaurantsWithVotes()
        {
            // Arrange
            _context.Lunches.Add(new Lunch
            {
                Host        = "Brent",
                Restaurants = new List <Restaurant>
                {
                    new Restaurant
                    {
                        Name      = "Lunchbox Labs",
                        Longitude = 55,
                        Latitude  = 42
                    }
                },
                MeetingTime = new DateTime(1999, 12, 31)
            });

            _context.SaveChanges();

            _context.Votes.AddRange(
                new List <Vote>
            {
                new Vote {
                    Lunch = _context.Lunches.First(), Restaurant = _context.Restaurants.First(), Value = 2
                },
                new Vote {
                    Lunch = _context.Lunches.First(), Restaurant = _context.Restaurants.First(), Value = 3
                },
                new Vote {
                    Lunch = _context.Lunches.First(), Restaurant = _context.Restaurants.First(), Value = -8
                }
            }
                );

            _context.SaveChanges();

            var controller = new LunchesController(_context);

            // Act
            var id     = _context.Lunches.First().Id;
            var result = controller.Details(id) as ViewResult;

            // Assert
            var data = result.Model as LunchDetailsViewModel;

            data.ShouldNotBeNull();
            data.Id.ShouldBe(1);
            data.Restaurants.Count.ShouldBe(1);
            data.Votes.Count.ShouldBe(3);
            data.Votes.Sum(v => v.Value).ShouldBe(-3);
            data.Host.ShouldBe("Brent");
        }
コード例 #16
0
        public void Create_Post_ModelStateIsInvalidIfNoRestaurantSelected()
        {
            // Arrange
            var controller = new LunchesController(_context);

            // Act
            var result = controller.Create(new LunchCreateEditViewModel
            {
                Host        = "Brent",
                MeetingTime = new DateTime(1999, 12, 31),
                Restaurants = new List <CheckBoxListItem>()
                {
                    new CheckBoxListItem {
                        Display = "some restaurant", IsChecked = false
                    }
                }
            }) as RedirectToRouteResult;

            // Assert
            var sut = _context.Lunches.First();

            sut.ShouldNotBeNull();
        }
コード例 #17
0
        public void Delete_Post_LunchWithVotes_RemovesRecordFromDb()
        {
            // Arrange
            var restaurant = new Restaurant
            {
                Name      = "Lunchbox Labs",
                Latitude  = 55,
                Longitude = 99
            };
            var lunch = new Lunch
            {
                Host        = "Brent",
                Restaurants = new List <Restaurant>
                {
                    restaurant
                },
                MeetingTime = new DateTime(1999, 12, 31),
            };

            _context.Lunches.Add(lunch);
            _context.Votes.Add(new Vote {
                Lunch = lunch, Restaurant = restaurant, VoteType = VoteType.Upvote, Value = 1
            });
            _context.SaveChanges();

            var controller = new LunchesController(_context);

            var recordId = lunch.Id;

            // Act
            var result = controller.DeleteConfirmed(recordId) as RedirectToRouteResult;

            // Assert
            _context.Lunches.Count().ShouldBe(0);
            result.RouteValues["action"].ShouldBe("Index");
        }