public async Task PutBook_Valid_Returns200OkAsync() { var filters = new Models.BookOptionFilter { BookId = 1, }; var saveBook = new SaveBook() { Name = "x", Description = "x", }; var book = new List <Models.Book> { new Models.Book() { BookId = 1 } }; this.BookRepositoryMock .Setup(x => x.GetAsync(It.IsAny <Models.BookOptionFilter>(), It.IsAny <CancellationToken>())) .ReturnsAsync(book); this.BookRepositoryMock.Setup(x => x.UpdateAsync(book.First(), It.IsAny <CancellationToken>())).ReturnsAsync(book.First()); var response = await this.client.PutAsJsonAsync("book/1", saveBook).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(ContentType.RestfulJson, response.Content.Headers.ContentType?.MediaType); var bookViewModel = await response.Content.ReadAsAsync <Book>(this.formatters).ConfigureAwait(false); Assert.Equal(bookViewModel.BookId, book.First().BookId); }
public async Task PostBook_Valid_Returns201CreatedAsync() { var filters = new Models.BookOptionFilter { BookId = 1, }; var saveBook = new SaveBook() { Name = "x", Description = "x", }; var book = new Models.Book() { BookId = 1 }; this.BookRepositoryMock .Setup(x => x.AddAsync(It.IsAny <Models.Book>(), It.IsAny <CancellationToken>())) .ReturnsAsync(book); var response = await this.client.PostAsJsonAsync("book", saveBook).ConfigureAwait(false); Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal(ContentType.RestfulJson, response.Content.Headers.ContentType?.MediaType); var bookViewModel = await response.Content.ReadAsAsync <Book>(this.formatters).ConfigureAwait(false); var uriString = AddQueryString("/book", filters); Assert.Equal(new Uri($"http://localhost{uriString}"), response.Headers.Location); }
private static string AddQueryString(string uriString, Models.BookOptionFilter filters) { var provider = CultureInfo.InvariantCulture; if (filters.BookId.HasValue) { uriString = QueryHelpers.AddQueryString(uriString, $"BookId", filters.BookId.Value.ToString(provider)); } return(uriString); }
public async Task Delete_BookNotFound_Returns404NotFoundAsync() { var filters = new Models.BookOptionFilter { BookId = 999, }; var book = new List <Models.Book>(); this.BookRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.BookOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(book); var response = await this.client.DeleteAsync(new Uri("/book/999", UriKind.Relative)).ConfigureAwait(false); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); var problemDetails = await response.Content.ReadAsAsync <ProblemDetails>(this.formatters).ConfigureAwait(false); Assert.Equal(StatusCodes.Status404NotFound, problemDetails.Status); }
public async Task Delete_BookFound_Returns204NoBookAsync() { var filters = new Models.BookOptionFilter { BookId = 1, }; var book = new List <Models.Book> { new Models.Book() }; this.BookRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.BookOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(book); this.BookRepositoryMock.Setup(x => x.DeleteAsync(book.First(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); var response = await this.client.DeleteAsync(new Uri("/book/1", UriKind.Relative)).ConfigureAwait(false); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); }
/// <summary> /// Execute async. /// </summary> /// <param name="saveBook">The save book.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>An action result.</returns> public async Task <IActionResult> ExecuteAsync(SaveBook saveBook, CancellationToken cancellationToken) { var book = this.saveBookToBookMapper.Map(saveBook); book = await this.bookRepository.AddAsync(book, cancellationToken).ConfigureAwait(false); var bookViewModel = this.bookToBookMapper.Map(book); var filters = new Models.BookOptionFilter { BookId = bookViewModel.BookId }; return(new CreatedAtRouteResult( BookControllerRoute.GetBook, filters, bookViewModel)); }
public async Task Get_InvalidAcceptHeaderByBook_Returns406NotAcceptableAsync() { var filters = new Models.BookOptionFilter { BookId = 1, }; var book = new List <Models.Book>(); this.BookRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.BookOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(book); var uriString = AddQueryString("/book", filters); using var request = new HttpRequestMessage(HttpMethod.Get, uriString); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentType.Text)); var response = await this.client.SendAsync(request).ConfigureAwait(false); Assert.Equal(HttpStatusCode.NotAcceptable, response.StatusCode); // Note: ASP.NET Core should be automatically returning a ProblemDetails response but is returning an empty // response body instead. See https://github.com/aspnet/AspNetCore/issues/16889 }
/// <summary> /// Execute async. /// </summary> /// <param name="bookId">The book id.</param> /// <param name="saveBook">The save book.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>A action result.</returns> public async Task <IActionResult> ExecuteAsync(long bookId, SaveBook saveBook, CancellationToken cancellationToken) { var filters = new Models.BookOptionFilter { BookId = bookId }; var book = await this.bookRepository.GetAsync(filters, cancellationToken).ConfigureAwait(false); if (book is null || !book.Any()) { return(new NotFoundResult()); } var item = book.First(); this.saveBookToBookMapper.Map(saveBook, item); item = await this.bookRepository.UpdateAsync(item, cancellationToken).ConfigureAwait(false); var bookViewModel = this.bookToBookMapper.Map(item); return(new OkObjectResult(bookViewModel)); }
public async Task Get_BookFound_Returns200OkAsync() { var filters = new Models.BookOptionFilter { BookId = 1, }; var book = new List <Models.Book> { new Models.Book { BookId = 1 } }; this.BookRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.BookOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(book); var uriString = AddQueryString("/book", filters); var response = await this.client.GetAsync(new Uri(uriString, UriKind.Relative)).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(ContentType.RestfulJson, response.Content.Headers.ContentType?.MediaType); var bookViewModel = await response.Content.ReadAsAsync <List <Models.Book> >(this.formatters).ConfigureAwait(false); Assert.Equal(book.First().BookId, bookViewModel.First().BookId); }
public async Task PutBook_BookNotFound_Returns404NotFoundAsync() { var filters = new Models.BookOptionFilter { BookId = 999, }; var saveBook = new SaveBook() { Name = "x", Description = "x", }; var book = new List <Models.Book>(); this.BookRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.BookOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(book); var response = await this.client.PutAsJsonAsync("book/999", saveBook).ConfigureAwait(false); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); var problemDetails = await response.Content.ReadAsAsync <ProblemDetails>(this.formatters).ConfigureAwait(false); Assert.Equal(StatusCodes.Status404NotFound, problemDetails.Status); }
public async Task Get_BookByBookHasBeenModifiedSince_Returns200OKAsync() { var filters = new Models.BookOptionFilter { BookId = 1, }; var book = new List <Models.Book> { new Models.Book() { ModifiedDate = new DateTimeOffset(2000, 1, 1, 0, 0, 1, TimeSpan.Zero) } }; this.BookRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.BookOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(book); var uriString = AddQueryString("/book", filters); using var request = new HttpRequestMessage(HttpMethod.Get, uriString); request.Headers.IfModifiedSince = new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero); var response = await this.client.SendAsync(request).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, response.StatusCode); }