Files
bionickatana 0826d267f2
CI / scan_ruby (push) Failing after 1m5s
CI / scan_js (push) Failing after 6s
CI / lint (push) Failing after 1m29s
Finished phase005
2026-09-16 15:34:50 -06:00

80 lines
2.6 KiB
Ruby

require "rails_helper"
RSpec.describe "Sessions" do
describe "GET /identify" do
it "renders the identification page" do
get identify_path
expect(response).to have_http_status(:ok)
expect(response.body).to include("Identify yourself")
end
end
describe "POST /identify" do
it "identifies a new user with the current access key" do
access_key = AccessKey.current
expect do
post session_path, params: { name: "Driver One", email: "DRIVER@example.com", key: access_key.raw_key }
end.to change(User, :count).by(1).and change(UserSession, :count).by(1)
expect(response).to redirect_to(vehicles_path)
expect(User.last.email).to eq("driver@example.com")
end
it "identifies an existing user when the name matches" do
access_key = AccessKey.current
user = create(:user, name: "Driver One", email: "driver@example.com")
expect do
post session_path, params: { name: "Driver One", email: "driver@example.com", key: access_key.raw_key }
end.to change(UserSession, :count).by(1).and change(User, :count).by(0)
expect(response).to redirect_to(vehicles_path)
expect(UserSession.last.user).to eq(user)
end
it "rejects an existing email when the name does not match" do
access_key = AccessKey.current
create(:user, name: "Driver One", email: "driver@example.com")
expect do
post session_path, params: { name: "Driver Two", email: "driver@example.com", key: access_key.raw_key }
end.not_to change(UserSession, :count)
expect(response).to have_http_status(:unprocessable_content)
expect(response.body).to include("name does not match")
end
it "rejects invalid access keys and logs the attempt" do
AccessKey.current
allow(Rails.logger).to receive(:warn)
expect do
post session_path, params: { name: "Driver One", email: "driver@example.com", key: "wrong-key" }
end.not_to change(UserSession, :count)
expect(response).to have_http_status(:unprocessable_content)
expect(response.body).to include("access key is not valid")
expect(Rails.logger).to have_received(:warn).with(/Invalid access key identification attempt/)
end
end
describe "DELETE /session" do
it "logs the user out" do
identify_user
expect do
delete logout_path
end.to change(UserSession, :count).by(-1)
expect(response).to redirect_to(identify_path)
end
end
def identify_user(user = create(:user))
access_key = AccessKey.current
post session_path, params: { name: user.name, email: user.email, key: access_key.raw_key }
end
end