コード例 #1
0
        /// <summary>
        /// ブログ記事を登録する。
        /// </summary>
        /// <param name="userId">ユーザーID。</param>
        /// <param name="param">ブログ記事情報。</param>
        /// <returns>登録したブログ記事。</returns>
        /// <exception cref="NotFoundException">ブログが存在しない場合。</exception>
        /// <exception cref="ForbiddenException">ユーザーのブログでない場合。</exception>
        public async Task <ArticleDto> CreateArticle(int userId, ArticleNewDto param)
        {
            var blog = await this.blogRepository.FindOrFail(param.BlogId);

            if (blog.UserId != userId)
            {
                throw new ForbiddenException($"BlogId={param.BlogId} does not belong to me");
            }

            var article = await this.articleRepository.Create(this.mapper.Map <Article>(param));

            return(this.mapper.Map <ArticleDto>(article));
        }
コード例 #2
0
        public async void TestPostArticle()
        {
            var now  = DateTimeOffset.UtcNow;
            var body = new ArticleNewDto()
            {
                Subject = "New Article", Body = "New Article Body", BlogId = 1000, Tags = new string[] { "Blog", "新規" }
            };
            var response = await this.authedClient.PostAsJsonAsync("/api/articles", body);

            var responseString = await response.Content.ReadAsStringAsync();

            Assert.True(response.IsSuccessStatusCode, responseString);

            var json = JsonConvert.DeserializeObject <ArticleDto>(responseString);

            Assert.True(json.Id > 0);
            Assert.Equal(body.Subject, json.Subject);
            Assert.Equal(body.Body, json.Body);
            Assert.Equal(body.BlogId, json.BlogId);
            Assert.True(json.CreatedAt > now);
            Assert.True(json.UpdatedAt > now);
            Assert.Contains(body.Tags.First(), json.Tags);
            Assert.Contains(body.Tags.Last(), json.Tags);

            var dbarticle = this.factory.CreateDbContext().Articles.Find(json.Id);

            Assert.NotNull(dbarticle);
            Assert.Equal(body.Subject, dbarticle.Subject);
            Assert.Equal(body.Body, dbarticle.Body);
            Assert.Equal(body.BlogId, dbarticle.BlogId);
            Assert.Equal(json.CreatedAt, dbarticle.CreatedAt);
            Assert.Equal(json.UpdatedAt, dbarticle.UpdatedAt);
            foreach (var t in body.Tags)
            {
                Assert.Contains(t, json.Tags);
            }
        }
コード例 #3
0
        public async Task <ActionResult <ArticleDto> > PostArticle(ArticleNewDto body)
        {
            var article = await this.articleService.CreateArticle(this.UserId, body);

            return(this.CreatedAtAction(nameof(this.GetArticle), new { id = article.Id }, article));
        }