public async void Details_UserIsMember_IsOwnOrder_ReturnsMatchingModel()
        {
            List<WebOrder> orders = new List<WebOrder>
            {
                new WebOrder
                {
                    Id = 1,
                    MemberId = UserId,
                    OrderStatus = OrderStatus.Processed
                },
                new WebOrder
                {
                    Id = 2,
                    MemberId = Id,
                    OrderStatus = OrderStatus.BeingProcessed
                },
                new WebOrder
                {
                    Id = 3,
                    MemberId = Id,
                    OrderStatus = OrderStatus.PendingProcessing
                },
                new WebOrder
                {
                    Id = 4,
                    MemberId = UserId,
                    OrderStatus = OrderStatus.UserCancelled
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<WebOrder>> webOrdersDbSetStub = TestHelpers.GetFakeAsyncDbSet(orders.AsQueryable());
            webOrdersDbSetStub.SetupForInclude();
            dbStub.Setup(db => db.WebOrders).Returns(webOrdersDbSetStub.Object);

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

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

            WebOrdersController controller = new WebOrdersController(dbStub.Object, idGetterStub.Object, stripeService: null, userManager: null)
            {
                ControllerContext = context.Object
            };

            var result = await controller.Details(1) as ViewResult;

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

            var model = (WebOrder)result.Model;

            Assert.That(model.Id, Is.EqualTo(1));
            Assert.That(model.MemberId, Is.EqualTo(UserId));
            Assert.That(model.OrderStatus, Is.EqualTo(OrderStatus.Processed));
        }
        public void Details_WebOrderNotFound_Throws404Exception()
        {
            List<WebOrder> orders = new List<WebOrder>
            {
                new WebOrder
                {
                    Id = 1,
                    MemberId = UserId,
                    OrderStatus = OrderStatus.Processed
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<WebOrder>> webOrdersDbSetStub = TestHelpers.GetFakeAsyncDbSet(orders.AsQueryable());
            webOrdersDbSetStub.SetupForInclude();
            dbStub.Setup(db => db.WebOrders).Returns(webOrdersDbSetStub.Object);

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

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

            WebOrdersController controller = new WebOrdersController(dbStub.Object, idGetterStub.Object, stripeService: null, userManager: null)
            {
                ControllerContext = context.Object
            };

            Assert.That(async () => await controller.Details(2), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
        public void Details_IdIsNull_Throws404Exception()
        {
            WebOrdersController controller = new WebOrdersController(veilDataAccess: null, idGetter: null, stripeService: null, userManager: null);

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