Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

issue#20 存在しないスレッドのとき、404を表示 #21

Merged
merged 3 commits into from May 13, 2019

Conversation

Projects
None yet
2 participants
@Naoya-Kojima
Copy link
Owner

commented May 10, 2019

仕様

ポスト

  • ポストが存在しない時
    • 詳細ページに遷移すると404 Not Foundが表示される
  • ポストが存在する時
    • 詳細ページが表示される

ユーザー

  • ユーザーが存在しない時
    • 詳細ページに遷移すると404 Not Foundが表示される
  • ユーザーが存在する時
    • 詳細ページが表示される

コメント

  • コメントが存在しない時
    • 編集ページに遷移すると404 Not Foundが表示される
  • コメントが存在する時
    • 編集ページが表示される

テストケース

ポスト詳細ページテストケース

/posts/:id

  • ポストが存在しない時、404NotFoundが表示される
    • レスポンスが404を返す
    • 404.htmlが表示される
  • ポストが存在する時、ポストの詳細が表示される
    • ポストのタイトルが表示される
    • ポストの内容が表示される

ユーザー詳細ページテストケース

users/:id

  • ユーザーが存在しない時、404NotFoundが表示される
    • レスポンスが404を返す
    • 404.htmlが表示される
  • ユーザーが存在する時、ユーザーの詳細が表示される
    • ユーザーの名前が表示される
    • ユーザーのメールアドレスが表示される
    • ユーザーの性別が表示される

コメント詳細ページテストケース

posts/:id/comments/:id/edit

  • コメントが存在しない時、404NotFoundが表示される
    • レスポンスが404を返す
    • 404.htmlが表示される
  • コメントが存在する時、コメントの編集ページが表示される
    • コメントの内容が表示される

APIテストケース

api/posts/:id

  • ポストが存在しない時、404NotFoundが表示される
    • レスポンスが404を返す
    • JSONでstatus: 404が返ってくる
    • JSONでcontent: Not Foundが返ってくる
  • ポストが存在する時、ポストの詳細が表示される
    • ポストのタイトルが表示される
    • ポストの内容が表示される
    • コメントの内容とその投稿ユーザー情報が表示される
private

def record_not_found
render file: Rails.root.join('public/404.html'), status: 404, layout: false, content_type: 'text/html'

This comment has been minimized.

Copy link
@Naoya-Kojima

Naoya-Kojima May 10, 2019

Author Owner

Rails.rootを使い、ファイルシステムの絶対パスを短縮表示させるようにしました。
layout: falseで共通化されているheaderが表示されないようにしました。

This comment has been minimized.

Copy link
@thori0908

thori0908 May 10, 2019

APIのコントローラでも ApplicationController を継承しているので、APIがrecordnotfoundの時、jsonではなくhtmlを返してしまう。

This comment has been minimized.

Copy link
@thori0908

thori0908 May 10, 2019

ApplicationControllerは全てのcontrollerで継承されているので、全てのコントローラに影響範囲が及ぶ。
影響範囲が及ぶ箇所をどうやってテストするのか。全てのページを見る必要があるのかなど。

This comment has been minimized.

Copy link
@Naoya-Kojima

Naoya-Kojima May 13, 2019

Author Owner

APIがrecordnotfoundの場合にhtmlを返してしまうので、Api::ApplicationControllerを作成し、controller/application_controllerの影響が及ばないように実装しました。
今回の実装で影響が及ぶのはuser, post, commentの各controllerなので、その3つのcontrollerをテストする必要があると思います。

@@ -1,12 +1,12 @@
Rails.application.routes.draw do
root 'posts#index'
resources :users
resources :user_sessions
resources :user_sessions, only: [:new, :create, :destroy]

This comment has been minimized.

Copy link
@Naoya-Kojima

Naoya-Kojima May 10, 2019

Author Owner

不要なルーティングを除外することで、作成していないアクションを実行しようとして500エラーになることを防ぎました。

@Naoya-Kojima

This comment has been minimized.

Copy link
Owner Author

commented May 13, 2019

修正箇所

  • Api::application_controllerを作成し、controller/application_controllerの影響が及ばないように実装
@@ -0,0 +1,2 @@
class Api::ApplicationController < ActionController::Base

This comment has been minimized.

Copy link
@thori0908

thori0908 May 13, 2019

ややこしいので、ApiControllerというクラス名にするのも良いと思います。

This comment has been minimized.

Copy link
@Naoya-Kojima

Naoya-Kojima May 13, 2019

Author Owner

クラス名をApiControllerに変更しました。

@Naoya-Kojima

This comment has been minimized.

Copy link
Owner Author

commented May 13, 2019

変更点

  • Api::ApplicationControllerをApi::ApiControllerに名称を変更
@thori0908

This comment has been minimized.

Copy link

commented May 13, 2019

LGTM

@Naoya-Kojima Naoya-Kojima merged commit 3be18a0 into master May 13, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.