docbrown/spec/requests/api/v0/users_spec.rb
Anna Buianova 7d053471f8
Rubocop fixes in spec/requests (#18946)
* Rubocop fixes in spec/requests

* Fixed spec/requests/api/v0/articles_spec.rb

Co-authored-by: Ridhwana <Ridhwana.Khan16@gmail.com>

Co-authored-by: Ridhwana <Ridhwana.Khan16@gmail.com>
2023-01-12 19:10:16 +03:00

111 lines
3.9 KiB
Ruby

require "rails_helper"
RSpec.describe "Api::V0::Users" do
describe "GET /api/users/:id" do
let!(:user) do
create(:user,
profile_image: "",
_skip_creating_profile: true,
profile: create(:profile, summary: "Something something"))
end
it "returns 404 if the user id is not found" do
get api_user_path("invalid-id")
expect(response).to have_http_status(:not_found)
end
it "returns 404 if the user username is not found" do
get api_user_path("by_username"), params: { url: "invalid-username" }
expect(response).to have_http_status(:not_found)
end
it "returns 404 if the user is not registered" do
user.update_column(:registered, false)
get api_user_path(user.id)
expect(response).to have_http_status(:not_found)
end
it "returns 200 if the user username is found" do
get api_user_path("by_username"), params: { url: user.username }
expect(response).to have_http_status(:ok)
end
it "returns unauthenticated if no authentication and the Forem instance is set to private" do
allow(Settings::UserExperience).to receive(:public).and_return(false)
get api_user_path("by_username"), params: { url: user.username }
expect(response).to have_http_status(:unauthorized)
end
it "returns the correct json representation of the user", :aggregate_failures do
get api_user_path(user.id)
response_user = response.parsed_body
expect(response_user["type_of"]).to eq("user")
%w[id username name twitter_username github_username].each do |attr|
expect(response_user[attr]).to eq(user.public_send(attr))
end
%w[summary website_url location].each do |attr|
expect(response_user[attr]).to eq(user.profile.public_send(attr))
end
expect(response_user["joined_at"]).to eq(user.created_at.strftime("%b %e, %Y"))
expect(response_user["profile_image"]).to eq(user.profile_image_url_for(length: 320))
end
end
describe "GET /api/users/me" do
it "requires request to be authenticated" do
get me_api_users_path
expect(response).to have_http_status(:unauthorized)
end
context "when request is authenticated" do
let(:user) { create(:user) }
let(:api_secret) { create(:api_secret, user: user) }
let(:headers) { { "api-key" => api_secret.secret } }
it "returns the correct json representation of the user", :aggregate_failures do
get me_api_users_path, headers: headers
response_user = response.parsed_body
expect(response_user["type_of"]).to eq("user")
%w[id username name twitter_username github_username].each do |attr|
expect(response_user[attr]).to eq(user.public_send(attr))
end
%w[summary website_url location].each do |attr|
expect(response_user[attr]).to eq(user.profile.public_send(attr))
end
expect(response_user["joined_at"]).to eq(user.created_at.strftime("%b %e, %Y"))
expect(response_user["profile_image"]).to eq(user.profile_image_url_for(length: 320))
end
it "returns 200 if no authentication and the Forem instance is set to private but user is authenticated" do
allow(Settings::UserExperience).to receive(:public).and_return(false)
get me_api_users_path, headers: headers
response_user = response.parsed_body
expect(response_user["type_of"]).to eq("user")
%w[id username name twitter_username github_username].each do |attr|
expect(response_user[attr]).to eq(user.public_send(attr))
end
%w[summary website_url location].each do |attr|
expect(response_user[attr]).to eq(user.profile.public_send(attr))
end
expect(response_user["joined_at"]).to eq(user.created_at.strftime("%b %e, %Y"))
expect(response_user["profile_image"]).to eq(user.profile_image_url_for(length: 320))
end
end
end
end