public async Task FriendCanBorrowPublication()
    {
        _client.DefaultRequestHeaders.Add(authenticationName, authenticationValue);

        int userId        = 50;
        int publicationId = 31;

        PublicationToFriendInputModel borrowModel = new PublicationToFriendInputModel();

        borrowModel.BorrowDate = new System.DateTime(2018, 1, 20);
        borrowModel.ReturnDate = new System.DateTime(2018, 3, 20);

        // The endpoint or route of the controller action.
        var addLoan = await _client.PostAsJsonAsync(SpecificUserPublicationPath(userId, publicationId), borrowModel);

        // Must be successful.
        addLoan.EnsureSuccessStatusCode();
        await addLoan.Content.ReadAsStringAsync();

        // Get all borrows, check if new publication is in the list
        var httpResponse = await _client.GetAsync(UserPublicationPath(userId));

        httpResponse.EnsureSuccessStatusCode();

        var stringResponse = await httpResponse.Content.ReadAsStringAsync();

        var pubList = JsonConvert.DeserializeObject <IEnumerable <PublicationDto> >(stringResponse);

        Assert.Contains(new PublicationDto {
            Id = publicationId
        }, pubList, new PubComparer());
    }
    public async Task FriendCannotBorrowTwice()
    {
        _client.DefaultRequestHeaders.Add(authenticationName, authenticationValue);

        int userId        = 5;
        int publicationId = 100;
        PublicationToFriendInputModel p2fInput = new PublicationToFriendInputModel();

        // Borrow a publication
        var httpResponse = await _client.PostAsJsonAsync(SpecificUserPublicationPath(userId, publicationId), p2fInput);

        httpResponse.EnsureSuccessStatusCode();

        var httpResponse2 = await _client.PostAsJsonAsync(SpecificUserPublicationPath(userId, publicationId), p2fInput);

        Assert.Equal(System.Net.HttpStatusCode.PreconditionFailed, httpResponse2.StatusCode);
    }
    public async Task FriendCanUpdatePublication()
    {
        _client.DefaultRequestHeaders.Add(authenticationName, authenticationValue);

        int userId        = 52;
        int publicationId = 366;

        PublicationToFriendInputModel borrowModel = new PublicationToFriendInputModel {
            BorrowDate = new System.DateTime(2018, 1, 20)
        };

        // The endpoint or route of the controller action.
        var putLoan = await _client.PutAsJsonAsync(SpecificUserPublicationPath(userId, publicationId), borrowModel);

        // Must be successful.
        putLoan.EnsureSuccessStatusCode();
    }
        public IActionResult UpdateFriendBorrowsABookConnection(int userId, int publicationId, [FromBody] PublicationToFriendInputModel body)
        {
            var entity = _borrowService.UpdateFriendBorrowsABookConnection(userId, publicationId, body);

            return(Ok(entity));
        }
 public PublicationToFriendDto UpdateFriendBorrowsABookConnection(int userId, int publicationId, PublicationToFriendInputModel body)
 => new PublicationToFriendDto(_borrowRepo.UpdateFriendBorrowsABookConnection(userId, publicationId, body));
        public PublicationToFriendDto UpdateFriendBorrowsABookConnection(int userId, int publicationId, PublicationToFriendInputModel body)
        {
            var connection = _borrows.FirstOrDefault(c => c.FriendId == userId && c.PublicationId == publicationId);

            if (connection == null)
            {
                throw new ResourceNotFoundException($"Friend with id: {userId} has not borrowed book with id: {publicationId}");
            }

            connection.BorrowDate = body.BorrowDate;
            connection.ReturnDate = body.ReturnDate;

            return(new PublicationToFriendDto
            {
                FriendId = connection.FriendId,
                PublicationId = connection.PublicationId,
                BorrowDate = connection.BorrowDate,
                ReturnDate = connection.ReturnDate
            });
        }
        public PublicationToFriendDto CreateFriendBorrowsABookConnection(int userId, int publicationId, PublicationToFriendInputModel body)
        {
            var friend = _friends.FirstOrDefault(f => f.Id == userId);

            var publication = _publications.FirstOrDefault(p => p.Id == publicationId);


            bool alreadyBorrowed = _borrows.Any(p => p.FriendId == friend.Id && p.PublicationId == publication.Id);

            if (alreadyBorrowed)
            {
                throw new ModelFormatException($"Friend: {friend.FirstName} has already borrowed {publication.Title}");
            }

            int nextInt = 0;

            if (_borrows.Count() == 0)
            {
                nextInt = 1;
            }
            else
            {
                nextInt = _borrows.OrderByDescending(a => a.Id).FirstOrDefault().Id + 1;
            }

            var entity = new PublicationToFriend
            {
                Id            = nextInt,
                FriendId      = userId,
                PublicationId = publicationId,
                BorrowDate    = body.BorrowDate.HasValue ? body.BorrowDate : DateTime.Now,
                ReturnDate    = body.ReturnDate
            };

            _borrows.Add(entity);
            return(new PublicationToFriendDto
            {
                FriendId = entity.FriendId,
                PublicationId = entity.PublicationId,
                BorrowDate = entity.BorrowDate,
                ReturnDate = entity.ReturnDate
            });
        }
Esempio n. 8
0
        public PublicationToFriend UpdateFriendBorrowsABookConnection(int userId, int publicationId, PublicationToFriendInputModel body)
        {
            // Check if given user has allready borrowed given publication
            var connection = _armDbContext.PublicationsToFriend.FirstOrDefault(c => c.FriendId == userId && c.PublicationId == publicationId);

            if (connection == null)
            {
                throw new ResourceNotFoundException($"Friend with id: {userId} has not borrowed book with id: {publicationId}");
            }

            connection.BorrowDate = body.BorrowDate;
            connection.ReturnDate = body.ReturnDate;
            _armDbContext.SaveChanges();

            return(connection);
        }
Esempio n. 9
0
        public PublicationToFriend CreateFriendBorrowsABookConnection(int userId, int publicationId, PublicationToFriendInputModel body)
        {
            // Check if given user exists
            var friend = _armDbContext.Friends.FirstOrDefault(f => f.Id == userId);

            if (friend == null)
            {
                throw new ResourceNotFoundException($"User with id: {userId} was not found");
            }
            // Check if given publication exists
            var publication = _armDbContext.Publications.FirstOrDefault(p => p.Id == publicationId);

            if (publication == null)
            {
                throw new ResourceNotFoundException($"Publication with id: {publicationId} was not found");
            }
            // check if given user has allready borrowed given publication
            bool alreadyBorrowed = _armDbContext.PublicationsToFriend.Any(p => p.FriendId == friend.Id && p.PublicationId == publication.Id);

            if (alreadyBorrowed)
            {
                throw new ModelFormatException($"User with id: {userId} has already borrowed publication with id: {publicationId}");
            }

            // check if we have connection in db if not set Id to 1 else find the highest Id and add 1 to it
            int nextInt = 0;

            if (_armDbContext.PublicationsToFriend.Count() == 0)
            {
                nextInt = 1;
            }
            else
            {
                nextInt = _armDbContext.PublicationsToFriend.OrderByDescending(a => a.Id).FirstOrDefault().Id + 1;
            }

            var entity = new PublicationToFriend
            {
                Id            = nextInt,
                FriendId      = userId,
                PublicationId = publicationId,
                BorrowDate    = body.BorrowDate.HasValue ? body.BorrowDate : DateTime.Now,
                ReturnDate    = body.ReturnDate
            };

            _armDbContext.PublicationsToFriend.Add(entity);
            _armDbContext.SaveChanges();
            return(entity);
        }