成果物の作成2作品目⑧ 予定管理サービス コントローラのbeforeアクションの追加、全体のテスト実装
今回は細かいバグを取り除くために、コントローラのbeforeアクションとテストを書いていこうと思います。
minitestを使っています。
beforアクションの追加
今のままだと未ログイン状態でも誰がログインしていようと、お構いなしにいろんなURLにアクセスできてしまうので、
各コントローラに before_action制限をかけます
app/controllers/users_controller.rb
before_action :logged_in_user, only: [:index,:show, :destroy] before_action :correct_user, only: :destroy
/schedule/app/controllers/schedule_controller.rb
before_action :logged_in_user, only: [:show,:new, :destroy,:create] before_action :correct_user, only: :destroy
/schedule/app/controllers/time_schedules_controller.rb
before_action :logged_in_user, only: [:new,:create] before_action :correct_user, only: [:new,:create]
テストの追加
テストを完成させていこうと思います。
Userモデル、DayScheduleモデル、TImeScheduleモデルの種類があるので、それぞれフィクスチャーを作成しました。
モデル
全部載せると長すぎるので、とりあえずUserモデルのみ掲載します。
/schedule/test/models/user_test.rb
require 'test_helper' class UserTest < ActiveSupport::TestCase def setup @user = users(:user) end test "サニティーチェック" do assert @user.valid? end test "user_nameのバリデーションが機能するか" do @user.user_name = " " assert_not @user.valid? end test "uidのバリデーションが機能するか" do @user.uid = "" assert_not @user.valid? end test "providerのバリデーションが機能するか" do @user.provider = "" assert_not @user.valid? end test "Userモデルが削除されると紐付いているDayScheduleモデルも同時に削除されるか" do @user.save @user.day_schedule.create!(day_schedule: "test") assert_difference 'DaySchedule.count', -1 do @user.destroy end end end
コントローラ
require 'test_helper' class UsersControllerTest < ActionDispatch::IntegrationTest def setup @user = users(:user) end test "未ログイン状態でユーザ一覧ページにgetアクセスするとログインページにリダイレクトれるか" do get users_path assert_redirected_to root_url end test "未ログイン状態でユーザーページにgetアクセするときちんとログインページにリダイレクトされるか。" do get user_path(@user) assert_redirected_to root_url end test "未ログイン状態でユーザ情報を削除するときちんと失敗するか" do assert_no_difference 'User.count' do delete user_path(@user) end assert_redirected_to root_url end end
結果はグリーンです!
手動テストでも動作は大丈夫でした。
今回はインテグレーションテストまではできませんでしたが、次回完成まで持っていきたいと思います。