require "test_helper" class SessionsControllerTest < ActionDispatch::IntegrationTest ALLOWED_BROWSER = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15" DISALLOWED_BROWSER = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0" test "new" do get new_session_url assert_response :success end test "new redirects to first run when no users exist" do User.destroy_all get new_session_url assert_redirected_to first_run_url end test "new denied with incompatible browser" do get new_session_url, env: { "HTTP_USER_AGENT" => DISALLOWED_BROWSER } assert_select "h1", /Upgrade to a supported web browser/ end test "new allowed with compatible browser" do get new_session_url, env: { "HTTP_USER_AGENT" => ALLOWED_BROWSER } assert_select "h1", text: /Upgrade to a supported web browser/, count: 0 end test "create with valid credentials" do post session_url, params: { email_address: "david@37signals.com", password: "secret123456" } assert_redirected_to root_url assert parsed_cookies.signed[:session_token] end test "create with invalid credentials" do post session_url, params: { email_address: "david@37signals.com", password: "wrong" } assert_response :unauthorized assert_nil parsed_cookies.signed[:session_token] end test "destroy" do sign_in :david delete session_url assert_redirected_to root_url assert_not cookies[:session_token].present? end test "destroy removes the push subscription for the device" do sign_in :david assert_difference -> { users(:david).push_subscriptions.count }, -1 do delete session_url, params: { push_subscription_endpoint: push_subscriptions(:david_chrome).endpoint } end assert_redirected_to root_url assert_not cookies[:session_token].present? end end