Rails Tutorial　第10章完了

##2020/7/29 0.5時間

リンクを作る前まで進めました。

##2020/7/30 0.5時間

演習10.1.1でエラーになり、朝やっているのですが時間切れになりました。

フィッシング対策で"noopener"を設定するのは知りませんでした。

##2020/7/31 0.5時間

演習10.1.1のprovideが理解できず時間がかかりました。
 
##2020/8/1 1.5時間
休みなので時間がとれました。
10.1まで完了しました。

##2020/8/2 2時間
途中難しくて寝てしまいますが、朝なので続けられました。夜だと続けれれなかったと思います。
testがエラーで、入力間違いが見つけられません。

##2020/8/3 1時間
この日は出社日で、朝は時間がとれなかったので、夜にやりました。前日の入力間違いを見つけられました。

##2020/8/4 0.5時間
10.2.3まで進めました。

##2020/8/5 2.0時間
夏休み1週間が始まりました。
10.3.1の途中まで進めました。

##2020/8/6 2.0時間
10.3.1完了しました。
途中寝てしまいますが、続けられました。

##2020/8/7 2.5時間
これで10章が終わりました。
8/5から夏休みに入り、はかどりました。
所要時間は13.0時間です。

##演習10.2.3.1　testを一連の流れでテストしてみました

>次回以降のログインのときには、転送先のURLはデフォルト (プロフィール画面) に戻っている必要があります。

の一連を
EDIT画面,ログイン、EDIT画面、ログアウト、ログイン、SHOW画面
の流れでテストしてみました。

```ruby:users_edit_test.rb
test "friendly forwarding only once" do
    get edit_user_path(@user)
    assert_equal session[:forwarding_url], edit_user_url(@user)
    log_in_as(@user)
    assert_redirected_to edit_user_url(@user)
    delete logout_path
    assert_nil session[:forwarding_url]
    log_in_as(@user)
    assert_redirected_to @user
    follow_redirect!
    assert_template 'users/show'
   end
```

##演習10.3.1.1　ログアウト後にメニューが減る項目も入れました
冗長な気もしますが、ログアウト後にメニューが減ることも確認するテスト項目も入れました。

ネットの他の方の解答と比べると、少し項目が多いです。
デフォルトの画面->ログイン後の画面->ログアウト後の画面
でメニューの項目が増減するのをテストしたいと考えました。

```ruby:site_layout_test.rb
  test "layout links" do
    get root_path
    assert_template 'static_pages/home'
    assert_select "a[href=?]", root_path, count: 2
    assert_select "a[href=?]", help_path
    assert_select "a[href=?]", about_path
    assert_select "a[href=?]", contact_path
    get contact_path
    assert_select "title", full_title("Contact")
    get signup_path
    assert_select "title", full_title("Sign up")
  end

  test "login logout links" do
    log_in_as(@user)
    follow_redirect!
    assert_template 'users/show'
    assert_select "a[href=?]", root_path, count: 2
    assert_select "a[href=?]", help_path
    assert_select "a[href=?]", users_path
    assert_select "a[href=?]", user_path(@user)
    assert_select "a[href=?]", edit_user_path(@user)
    assert_select "a[href=?]", login_path, count: 0
    assert_select "a[href=?]", logout_path
    # after logout
    delete logout_path
    follow_redirect!
    assert_template 'static_pages/home'
    assert_select "a[href=?]", root_path, count: 2
    assert_select "a[href=?]", help_path
    assert_select "a[href=?]", users_path, count:0
    assert_select "a[href=?]", user_path(@user), count:0
    assert_select "a[href=?]", edit_user_path(@user), count:0
    assert_select "a[href=?]", login_path
    assert_select "a[href=?]", logout_path, count: 0
    end
```

##演習10.4.1.1 testでpasswordは入れる必要がないのでは

testでpasswordは入れる必要がないように思いました。

ネットの他の方の解答では、パスワードを入力していました。

```ruby:users_controller_test.rb
    patch user_path(@other_user), params: { user: { password: @other_user.password,
                                                    password_confirmation: @other_user.password_confirmation,
                                                    admin: true } }
```


私の答えは、前の演習にならってパスワードは""としました。

```ruby:users_controller_test.rb
    patch user_path(@other_user), params: {
                                     user: { password:              "",
                                             password_confirmation: "",
                                             admin: true } }
```