public async Task PutContent_Valid_Returns200OkAsync() { var filters = new Models.ContentOptionFilter { ContentId = 1, }; var saveContent = new SaveContent() { PageId = 1, BookId = 1, Value = "x", }; var content = new List <Models.Content> { new Models.Content() { ContentId = 1 } }; this.ContentRepositoryMock .Setup(x => x.GetAsync(It.IsAny <Models.ContentOptionFilter>(), It.IsAny <CancellationToken>())) .ReturnsAsync(content); this.ContentRepositoryMock.Setup(x => x.UpdateAsync(content.First(), It.IsAny <CancellationToken>())).ReturnsAsync(content.First()); var response = await this.client.PutAsJsonAsync("content/1", saveContent).ConfigureAwait(false); Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal(ContentType.RestfulJson, response.Content.Headers.ContentType?.MediaType); var contentViewModel = await response.Content.ReadAsAsync <Content>(this.formatters).ConfigureAwait(false); Assert.Equal(contentViewModel.ContentId, content.First().ContentId); }
public async Task PostContent_Valid_Returns201CreatedAsync() { var filters = new Models.ContentOptionFilter { ContentId = 1, }; var saveContent = new SaveContent() { PageId = 1, BookId = 1, Value = "x", }; var content = new Models.Content() { ContentId = 1 }; this.ContentRepositoryMock .Setup(x => x.AddAsync(It.IsAny <Models.Content>(), It.IsAny <CancellationToken>())) .ReturnsAsync(content); var response = await this.client.PostAsJsonAsync("content", saveContent).ConfigureAwait(false); Assert.Equal(HttpStatusCode.Created, response.StatusCode); Assert.Equal(ContentType.RestfulJson, response.Content.Headers.ContentType?.MediaType); var contentViewModel = await response.Content.ReadAsAsync <Content>(this.formatters).ConfigureAwait(false); var uriString = AddQueryString("/content", filters); Assert.Equal(new Uri($"http://localhost{uriString}"), response.Headers.Location); }
public async Task Delete_ContentNotFound_Returns404NotFoundAsync() { var filters = new Models.ContentOptionFilter { ContentId = 999, }; var content = new List <Models.Content>(); this.ContentRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.ContentOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(content); var response = await this.client.DeleteAsync(new Uri("/content/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_ContentFound_Returns204NoContentAsync() { var filters = new Models.ContentOptionFilter { ContentId = 1, }; var content = new List <Models.Content> { new Models.Content() }; this.ContentRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.ContentOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(content); this.ContentRepositoryMock.Setup(x => x.DeleteAsync(content.First(), It.IsAny <CancellationToken>())).ReturnsAsync(0); var response = await this.client.DeleteAsync(new Uri("/content/1", UriKind.Relative)).ConfigureAwait(false); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); }
/// <summary> /// Execute async. /// </summary> /// <param name="saveContent">The save content.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>An action result.</returns> public async Task <IActionResult> ExecuteAsync(SaveContent saveContent, CancellationToken cancellationToken) { var content = this.saveContentToContentMapper.Map(saveContent); content = await this.contentRepository.AddAsync(content, cancellationToken).ConfigureAwait(false); var contentViewModel = this.contentToContentMapper.Map(content); var filters = new Models.ContentOptionFilter { ContentId = contentViewModel.ContentId }; return(new CreatedAtRouteResult( ContentControllerRoute.GetContent, filters, contentViewModel)); }
private static string AddQueryString(string uriString, Models.ContentOptionFilter filters) { var provider = CultureInfo.InvariantCulture; if (filters.ContentId.HasValue) { uriString = QueryHelpers.AddQueryString(uriString, $"ContentId", filters.ContentId.Value.ToString(provider)); } if (filters.PageId.HasValue) { uriString = QueryHelpers.AddQueryString(uriString, $"PageId", filters.PageId.Value.ToString(provider)); } if (filters.BookId.HasValue) { uriString = QueryHelpers.AddQueryString(uriString, $"BookId", filters.BookId.Value.ToString(provider)); } return(uriString); }
public async Task Get_InvalidAcceptHeaderByScene_Returns406NotAcceptableAsync() { var filters = new Models.ContentOptionFilter { PageId = 1, BookId = 1, }; var content = new List <Models.Content>(); this.ContentRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.ContentOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(content); var uriString = AddQueryString("/content", 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="contentId">The content id.</param> /// <param name="saveContent">The save content.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>A action result.</returns> public async Task <IActionResult> ExecuteAsync(long contentId, SaveContent saveContent, CancellationToken cancellationToken) { var filters = new Models.ContentOptionFilter { ContentId = contentId }; var content = await this.contentRepository.GetAsync(filters, cancellationToken).ConfigureAwait(false); if (content is null || !content.Any()) { return(new NotFoundResult()); } var item = content.First(); this.saveContentToContentMapper.Map(saveContent, item); item = await this.contentRepository.UpdateAsync(item, cancellationToken).ConfigureAwait(false); var contentViewModel = this.contentToContentMapper.Map(item); return(new OkObjectResult(contentViewModel)); }
public async Task Get_ContentFound_Returns200OkAsync() { var filters = new Models.ContentOptionFilter { ContentId = 1, }; var content = new List <Models.Content> { new Models.Content { ContentId = 1 } }; this.ContentRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.ContentOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(content); var uriString = AddQueryString("/content", 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 contentViewModel = await response.Content.ReadAsAsync <List <Models.Content> >(this.formatters).ConfigureAwait(false); Assert.Equal(content.First().ContentId, contentViewModel.First().ContentId); }
public async Task PutContent_ContentNotFound_Returns404NotFoundAsync() { var filters = new Models.ContentOptionFilter { ContentId = 999, }; var saveContent = new SaveContent() { PageId = 1, BookId = 1, Value = "x", }; var content = new List <Models.Content>(); this.ContentRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.ContentOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(content); var response = await this.client.PutAsJsonAsync("content/999", saveContent).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_ContentBySceneHasBeenModifiedSince_Returns200OKAsync() { var filters = new Models.ContentOptionFilter { PageId = 1, BookId = 1, }; var content = new List <Models.Content> { new Models.Content() { ModifiedDate = new DateTimeOffset(2000, 1, 1, 0, 0, 1, TimeSpan.Zero) } }; this.ContentRepositoryMock.Setup(x => x.GetAsync(It.IsAny <Models.ContentOptionFilter>(), It.IsAny <CancellationToken>())).ReturnsAsync(content); var uriString = AddQueryString("/content", 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); }