59 lines
1.9 KiB
Ruby
59 lines
1.9 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe ApplicationController, type: :controller do
|
|
controller do
|
|
def index
|
|
render json: { user_id: current_user.id }
|
|
end
|
|
end
|
|
|
|
let(:user) { User.create!(nickname: "alice", password: "password123") }
|
|
let(:token) { JwtService.encode(user_id: user.id) }
|
|
|
|
describe "#authenticate_request!" do
|
|
context "with valid Bearer token in Authorization header" do
|
|
it "sets current_user and succeeds" do
|
|
request.headers["Authorization"] = "Bearer #{token}"
|
|
get :index
|
|
expect(response).to have_http_status(:ok)
|
|
expect(JSON.parse(response.body)).to eq({ "user_id" => user.id })
|
|
end
|
|
end
|
|
|
|
context "with valid token in params" do
|
|
it "sets current_user and succeeds" do
|
|
get :index, params: { token: token }
|
|
expect(response).to have_http_status(:ok)
|
|
expect(JSON.parse(response.body)).to eq({ "user_id" => user.id })
|
|
end
|
|
end
|
|
|
|
context "without token" do
|
|
it "returns 401 unauthorized" do
|
|
get :index
|
|
expect(response).to have_http_status(:unauthorized)
|
|
expect(JSON.parse(response.body)).to eq({ "error" => "Unauthorized" })
|
|
end
|
|
end
|
|
|
|
context "with invalid token" do
|
|
it "returns 401 unauthorized" do
|
|
request.headers["Authorization"] = "Bearer invalid_token"
|
|
get :index
|
|
expect(response).to have_http_status(:unauthorized)
|
|
expect(JSON.parse(response.body)).to eq({ "error" => "Unauthorized" })
|
|
end
|
|
end
|
|
|
|
context "with token for nonexistent user" do
|
|
it "returns 401 unauthorized" do
|
|
orphan_token = JwtService.encode(user_id: 999_999)
|
|
request.headers["Authorization"] = "Bearer #{orphan_token}"
|
|
get :index
|
|
expect(response).to have_http_status(:unauthorized)
|
|
expect(JSON.parse(response.body)).to eq({ "error" => "Unauthorized" })
|
|
end
|
|
end
|
|
end
|
|
end
|