public void Details_IdNotInDb_Throws404Exception()
        {
            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Event>> gameDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Event>().AsQueryable());
            
            dbStub.Setup(db => db.Events).Returns(gameDbSetStub.Object);

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

            Assert.That(async () => await controller.Details(Id), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(e => e.GetHttpCode() == 404));
        }
        public async void Details_IdInDb_ReturnsViewWithModel(bool memberRegistered)
        {
            Event eventItem = new Event
            {
                Id = Id,
                RegisteredMembers = new List<Member>()
            };

            Member member = new Member
            {
                UserId = UserId,
                RegisteredEvents = new List<Event>()
            };

            if (memberRegistered)
            {
                eventItem.RegisteredMembers.Add(member);
                member.RegisteredEvents.Add(eventItem);
            }

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

            Mock<DbSet<Event>> eventDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Event> { eventItem }.AsQueryable());
            eventDbSetStub.Setup(db => db.FindAsync(eventItem.Id)).ReturnsAsync(eventItem);
            dbStub.Setup(db => db.Events).Returns(eventDbSetStub.Object);

            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            memberDbSetStub.Setup(db => db.FindAsync(member.UserId)).ReturnsAsync(member);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(member.UserId);

            EventsController controller = new EventsController(dbStub.Object, idGetterStub.Object)
            {
                ControllerContext = context.Object
            };
            
            var result = await controller.Details(Id) as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model != null);
            Assert.That(result.Model, Is.InstanceOf<EventDetailsViewModel>());

            var model = (EventDetailsViewModel)result.Model;

            Assert.That(model.Event, Is.EqualTo(eventItem));
            Assert.That(model.CurrentMemberIsRegistered == memberRegistered);
        }
        public void Details_NullId_Throws404Exception()
        {
            EventsController controller = new EventsController(veilDataAccess: null,  idGetter: null);

            Assert.That(async () => await controller.Details(null), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(e => e.GetHttpCode() == 404));
        }