Open saran12345678 opened 2 weeks ago
Gravatarのロゴが表示される
エラーを検知できていることを確認
before_action :logged_in_user#, only: [:edit, :update]
1) Failure:
UsersControllerTest#test_should_get_new [/workspaces/sample_app/test/controllers/users_controller_test.rb:11]:
Expected response to be a <2XX: success>, but was a <303: See Other> redirect to <http://www.example.com/login>
Response body: <html><body>You are being <a href="http://www.example.com/login">redirected</a>.</body></html>
2) Failure:
UsersSignupTest#test_valid_signup_information [/workspaces/sample_app/test/integration/users_signup_test.rb:21]:
"User.count" didn't change by 1.
Expected: 2
Actual: 1
3) Failure:
UsersSignupTest#test_invalid_signup_information [/workspaces/sample_app/test/integration/users_signup_test.rb:13]:
Expected response to be a <422: unprocessable_entity>, but was a <303: See Other> redirect to <http://www.example.com/login>
Response body: <html><body>You are being <a href="http://www.example.com/login">redirected</a>.</body></html>.
Expected: 422
Actual: 303
38 runs, 80 assertions, 3 failures, 0 errors, 0 skips
editを保護しないと編集画面を他のユーザが閲覧できてしまう。 特にメールアドレスがわかってしまうため問題がある。 updateを保護しないと、他のユーザ情報を変更できてしまう。
edit URLを設定するだけでGetメソッドを送ることができるため
編集画面→ログイン画面→ログイン→編集画面の順に遷移した際に、 forwardingUrlがNullになっていることを確認
assert_nil session[:forwarding_url]
(ruby@puma: cluster worker 3: 34562 [sample_app]#34586) session[:forwarding_url]
"https://curly-fiesta-gvx96rqr57vc99p6-3000.app.github.dev/users/1/edit"
(ruby@puma: cluster worker 3: 34562 [sample_app]#34586) request.get?
true
require "test_helper"
class SiteLayoutTest < ActionDispatch::IntegrationTest
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
assert_select "a[href=?]", signup_path
assert_select "a[href=?]", login_path
end
def setup
@user = users(:michael)
end
test "layout links after logged in" do
log_in_as(@user)
get root_path
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
assert_select "a[href=?]", signup_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=?]", logout_path
end
end
メイン画面に飛ぶことを確認
1ページ目の情報が取得できることを確認
irb(main):004> User.paginate(page: nil)
User Load (0.2ms) SELECT "users".* FROM "users" LIMIT ? OFFSET ? [["LIMIT", 30], ["OFFSET", 0]]
=>
[#<User:0x000077360630b048
id: 1,
name: "Example User",
email: "example@railstutorial.org",
created_at: Tue, 03 Sep 2024 02:39:53.880092000 UTC +00:00,
updated_at: Tue, 03 Sep 2024 02:39:53.880092000 UTC +00:00,
password_digest: "[FILTERED]",
remember_digest: nil>,
#<User:0x000077360630afa8
id: 2,
name: "Dr. Adrianne Willms",
email: "example-1@railstutorial.org",
created_at: Tue, 03 Sep 2024 02:39:55.114312000 UTC +00:00,
updated_at: Tue, 03 Sep 2024 02:39:55.114312000 UTC +00:00,
password_digest: "[FILTERED]",
remember_digest: nil>,
#<User:0x000077360630af08
id: 3,
name: "Mrs. Yasmine Schaefer",
email: "example-2@railstutorial.org",
created_at: Tue, 03 Sep 2024 02:39:55.391942000 UTC +00:00,
updated_at: Tue, 03 Sep 2024 02:39:55.391942000 UTC +00:00,
password_digest: "[FILTERED]",
違う点がない
irb(main):006> page = User.paginate(page: nil)
User Load (0.2ms) SELECT "users".* FROM "users" LIMIT ? OFFSET ? [["LIMIT", 30], ["OFFSET", 0]]
=>
[#<User:0x000077360658c9e8
...
irb(main):007> page.class
=> User::ActiveRecord_Relation
irb(main):008> User.all.class
=> User::ActiveRecord_Relation
テストに失敗することを確認
1) Failure:
UsersIndexTest#test_index_including_pagination [/workspaces/sample_app/test/integration/users_index_test.rb:13]:
Expected at least 1 element matching "div.pagination", found 0..
Expected 0 to be >= 1.
44 runs, 112 assertions, 1 failures, 0 errors, 0 skips
2行のうち、1行だけコメントアウトを解除したところ、 テストに成功してしまうことを確認
44 runs, 142 assertions, 0 failures, 0 errors, 0 skips
countを追加し、テストに成功することを確認
assert_select 'div.pagination', count: 2
テストに失敗することを確認
1) Failure:
UsersIndexTest#test_index_including_pagination [/workspaces/sample_app/test/integration/users_index_test.rb:15]:
Expected at least 1 element matching "a[href="/users/14035331"]", found 0..
Expected 0 to be >= 1.
44 runs, 113 assertions, 1 failures, 0 errors, 0 skips
全ユーザ情報取得のログでターミナルが埋まる
1) Failure:
UsersControllerTest#test_should_redirect_destroy_when_logged_in_as_a_non-admin [/workspaces/sample_app/test/controllers/users_controller_test.rb:68]:
"User.count" didn't change by 0.
Expected: 34
Actual: 33
48 runs, 181 assertions, 1 failures, 0 errors, 0 skips
target="blank"で新しいページを開くと、古いブラウザでセキュリティ上の小さな問題が生じます。それは、リンク先のサイトがHTMLドキュメントのwindowオブジェクトを扱えてしまう、という点です。具体的には、[フィッシング(Phising)](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0(%E8%A9%90%E6%AC%BA))サイトのような、悪意のあるコンテンツを導入されてしまう可能性があります。Gravatarのような著名なサイトではこのような事態はめったに起きないと思いますが、念のため、このセキュリティ上のリスクも排除しておきましょう。対処方法は、リンク用のaタグのrel(relationship)属性に、"noopener"と設定するだけです。リスト 10.2で使ったGravatarの編集ページへのリンクでこの設定を行ってください。
リスト 10.5のパーシャルを使って、new.html.erbビュー(リスト 10.6)とedit.html.erbビュー(リスト 10.7)をリファクタリングし、コードの重複を解消してください。(ヒント: 3.4.3で使ったprovideメソッドを使うと、重複を取り除けます3 。)
記載されているソース通りにリファクタリングを行った。