/// <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)); }
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); } }
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)); }