Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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));
        }
Пример #6
0
        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);
        }
Пример #7
0
        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
        }
Пример #8
0
        /// <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));
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }