public async void CreatePOST_DbSavedChagnesCalled_ConfirmsSavedChanges()
        {
            EventViewModel viewModel = new EventViewModel
            {
                Name = "New Name",
                Description = "New Description",
                Time = new DateTime(635827525788997554L, DateTimeKind.Local),
                Date = new DateTime(2015, 11, 10),
                Duration = "New Duration"
            };

            Mock<IVeilDataAccess> dbMock = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Event>> eventDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Event>().AsQueryable());
            eventDbSetStub.Setup(edb => edb.Add(viewModel));

            dbMock.Setup(db => db.Events).Returns(eventDbSetStub.Object);
            dbMock.Setup(db => db.SaveChangesAsync()).ReturnsAsync(1).Verifiable();

            EventsController controller = new EventsController(dbMock.Object, idGetter: null);

            await controller.Create(viewModel);

            Assert.That(
                () =>
                    dbMock.Verify(db => db.SaveChangesAsync(),
                    Times.Exactly(1)),
                Throws.Nothing);
        }
        public async void CreatePOST_InvalidModelState_ReturnsToCreateView()
        {
            EventViewModel item = new EventViewModel
            {
                Id = Id
            };

            EventsController controller = new EventsController(veilDataAccess: null, idGetter: null);
            controller.ModelState.AddModelError("Name", "Name is required");

            var result = await controller.Create(item) as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<EventViewModel>());
            Assert.That(result.Model, Is.EqualTo(item));
        }
        public async void CreatePOST_EventCreatedWithCorrectData_ItemFromDbMatchesSubmittedViewModel()
        {
            Event addedEvent = null;

            EventViewModel viewModel = new EventViewModel
            {
                Name = "New Name",
                Description = "New Description",
                Time = new DateTime(635827525788997554L, DateTimeKind.Local),
                Date = new DateTime(2015, 11, 10),
                Duration = "New Duration"
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();

            dbStub.Setup(db => db.Events.Add(It.IsAny<Event>())).Callback<Event>((model) =>
            {
                addedEvent = model;
            });

            EventsController controller = new EventsController(dbStub.Object, idGetter: null);

            await controller.Create(viewModel);

            Assert.That(addedEvent != null);
            Assert.That(addedEvent.Name, Is.EqualTo(viewModel.Name));
            Assert.That(addedEvent.Description, Is.EqualTo(viewModel.Description));
            Assert.That(addedEvent.Date, Is.EqualTo(viewModel.DateTime));
            Assert.That(addedEvent.Duration, Is.EqualTo(viewModel.Duration));
        }
        public void CreateGET()
        {
            EventsController controller = new EventsController(veilDataAccess: null, idGetter: null);

            Assert.That(controller.Create() != null);
        }