public void UserHasPermissions_UserIsOwner_UserHasPermissions()
        {
            // Arrange
            var unitOfWork = new UnitOfWorkMock();
            var user = new User();
            var package = new ContentPackage {Owner = user};

            // Act
            var financeService = new FinanceService(unitOfWork);
            var userHasPermissions = financeService.UserHasPermissions(user, package);

            // Assert
            userHasPermissions.Should().BeTrue();
        }
        public void UserHasPermissions_UserNotOrderedPackage_UserHasNoPermissions()
        {
            // Arrange
            var unitOfWork = new UnitOfWorkMock();
            var user = new User();
            var userProfile = new UserProfile {User = user};
            var package = new ContentPackage {Owner = new User()};
            unitOfWork.GetRepository<User>().Insert(user);
            unitOfWork.GetRepository<UserProfile>().Insert(userProfile);
            unitOfWork.GetRepository<ContentPackage>().Insert(package);
            unitOfWork.Save();

            // Act
            var financeService = new FinanceService(unitOfWork);
            var userHasPermissions = financeService.UserHasPermissions(user, package);

            // Assert
            userHasPermissions.Should().BeFalse();
        }
        public ViewResult MakeOrder(OrderViewModel viewModel)
        {
            var packageId = viewModel.ContentPackageId;
            var package = UnitOfWork.GetRepository<ContentPackage>().GetByID(packageId);

            var order = new Order
                        {
                            ContentPackage = package,
                            UserProfile = CurrentUserProfile
                        };

            var financeService = new FinanceService(UnitOfWork);
            financeService.MakeOrder(order);

            return InformationView("Покупка успешно произведена.",
                                   "",
                                   new ActionLinkInfo("Content",
                                                      "Details",
                                                      "Вернуться к просмотру",
                                                      new {id = package.ID}));
        }
        public ViewResult Order(int id)
        {
            var package = UnitOfWork.GetRepository<ContentPackage>().GetByID(id);
            if (package == null)
                return ErrorView("Материал не найден", "Указанный материал отсутствует в базе данных.");

            var viewModel = new OrderViewModel
                            {
                                OrderPrice = package.Price,
                                UserBalance = CurrentUserProfile.Balance,
                                ContentPackageId = package.ID
                            };

            var financeService = new FinanceService(UnitOfWork);
            var order = new Order
                        {
                            ContentPackage = package,
                            UserProfile = CurrentUserProfile,
                        };
            if (!financeService.IsOrderAvailable(order))
                ModelState.AddModelError("balance", "Недостаточно средств для покупки текущего материала.");

            return View(viewModel);
        }