ぞえの技術めも

Ruby on Rails勉強中

【140日目】【1日20分のRailsチュートリアル】【第10章】10章のまとめと演習の1.

Ruby on Railsチュートリアル(第3版)

前回からだいぶ間が空いてしまったけど復活。
今日は「10.4 最後に」から。

10.4 最後に

アカウント有効化機能とパスワード再設定機能が追加されたことで、ついにサンプルアプリケーションの登録、ログイン、ログアウト機能がすべて本格的に実装完了しました。

アプリケーションの本機能ではないけど、アカウント管理には必須な機能がこれで実装完了したのか…!

10.4.1 本章のまとめ

そういえばGitへのコミットは…!?って思いかけたけど、前回してました。そうだった。

10.5 演習

演習とチュートリアル本編の食い違いを避ける方法については、3.6のトピックブランチの演習に追加したメモをご覧ください。

演習用にブランチ作成しておきます。

$ git checkout account-activation-password-reset
$ git checkout -b account-activation-password-reset-exercises

1.リスト10.57のテンプレートを埋めて、期限切れのパスワード再設定のブランチ (リスト10.52) の統合テストを作成してください (10.57 のコードにあるresponse.bodyは、そのページのHTML本文をすべて返すメソッドです)。
期限切れのテスト方法はさまざまですが、リスト10.57でおすすめした手法 (大文字小文字は区別されません) を使えば、レスポンスの本文に「expired」という語があるかどうかをチェックできます。

"Password reset has expired."っていうエラーメッセージの全文でなくてもいいのかな。。。まぁ一部でいいか。

リスト10.57をほぼコピペして一部埋めてみた。
assert_match /expired/i, response.bodyIDEのワーニング出てるんだよね…合ってると思うんだけどな。。。

正規表現/iについては下記記事が詳しかった。/iが大文字小文字区別されないための記法か。

www.rubylife.jp

test/integration/password_resets_test.rb

  test "expired token" do
    get new_password_reset_path
    post password_resets_path, password_reset: { email: @user.email }

    @user = assigns(:user)
    @user.update_attribute(:reset_sent_at, 3.hours.ago)
    patch password_reset_path(@user.reset_token),
          email: @user.email,
          user: { password:              "foobar",
                  password_confirmation: "foobar" }
    assert_response :redirect
    follow_redirect!
    assert_match /expired/i, response.body
  end

テストは通ったのでワーニングは無視します。気になるけど…

$ bundle exec rake test
46 tests, 213 assertions, 0 failures, 0 errors, 0 skips

今日の学習時間は【25分】

次は「10.5 演習」の2.から。