Exemple #1
0
        public ReservedBookTests()
        {
            var configuration = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new ReservedBookProfile());
            });

            reservedBookDto = new ReservedBookDto()
            {
                Id = 1,
                AvailableBookId = 1,
                UserId          = "1"
            };

            reservedBookNewDto = new ReservedBookNewDto()
            {
                AvailableBookId = 1,
                UserId          = "1"
            };

            var mockUserStore = new Mock <IUserStore <ApplicationUser> >();

            _mapper                  = new Mapper(configuration);
            _userManager             = new Mock <UserManager <ApplicationUser> >(MockBehavior.Loose, new object[] { mockUserStore.Object, null, null, null, null, null, null, null, null });
            _availableBookRepository = new Mock <GenericRepository <AvailableBook, int> >(MockBehavior.Loose, new object[] { });
            _reservedBookRepository  = new Mock <GenericRepository <ReservedBook, int> >(MockBehavior.Loose, new object[] { });
        }
        public async Task <OperationResult> ReserveBook(ReservedBookNewDto model)
        {
            var result = new OperationResult();

            var user = await _userManager.FindByIdAsync(model.UserId);

            if (user == null)
            {
                result.Message = "User was not found";
                return(result);
            }

            if (user.Status == UserStatus.Blocked)
            {
                result.Message = "User is not allowed to reserve a book";
                return(result);
            }

            var availableBook = await _availableBookRepository.GetAsync(model.AvailableBookId);

            if (availableBook == null)
            {
                result.Message = "Available book was not found";
                return(result);
            }

            var reservedBooks = _reservedBookRepository.Get(x => x.AvailableBookId == model.AvailableBookId, true);

            if (reservedBooks.Count() >= availableBook.Count)
            {
                result.Message = "All books are already reserved";
                return(result);
            }

            var reserveBookResult = await CreateAsync(_mapper.Map <ReservedBookNewDto, ReservedBookDto>(model));

            result.IsSuccessful = reserveBookResult.IsSuccessful;
            result.Message      = reserveBookResult.Message;

            return(result);
        }
        public async Task <IActionResult> ReserveBook([FromBody] ReservedBookNewDto model)
        {
            var result = await _reservedBookService.ReserveBook(model);

            return(new OkObjectResult(result));
        }