101 lines
2.8 KiB
Ruby
101 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
|
|
describe AnswerController, type: :controller do
|
|
include ActiveSupport::Testing::TimeHelpers
|
|
|
|
let(:user) do
|
|
FactoryBot.create :user,
|
|
otp_module: :disabled,
|
|
otp_secret_key: "AAAAAAAA"
|
|
end
|
|
let(:answer) { FactoryBot.create :answer, user: }
|
|
|
|
describe "#show" do
|
|
subject { get :show, params: { username: user.screen_name, id: answer.id } }
|
|
|
|
context "user signed in" do
|
|
before(:each) { sign_in user }
|
|
|
|
it "renders the answer/show template" do
|
|
subject
|
|
expect(assigns(:answer)).to eq(answer)
|
|
expect(response).to render_template("answer/show")
|
|
end
|
|
end
|
|
|
|
context "user opts out of search indexing" do
|
|
render_views
|
|
|
|
before(:each) do
|
|
sign_in user
|
|
user.privacy_noindex = true
|
|
user.save
|
|
end
|
|
|
|
it "renders the answer/show template" do
|
|
subject
|
|
expect(assigns(:answer)).to eq(answer)
|
|
expect(response.body).to include("<meta content='noindex' name='robots'>")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#pin" do
|
|
subject { post :pin, params: { username: user.screen_name, id: answer.id }, format: :turbo_stream }
|
|
|
|
context "user signed in" do
|
|
before(:each) { sign_in user }
|
|
|
|
it "pins the answer" do
|
|
travel_to(Time.at(1603290950).utc) do
|
|
expect { subject }.to change { answer.reload.pinned_at }.from(nil).to(Time.at(1603290950).utc)
|
|
expect(response.body).to include("turbo-stream action=\"update\" target=\"ab-pin-#{answer.id}\"")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "other user signed in" do
|
|
let(:other_user) { FactoryBot.create(:user) }
|
|
|
|
before(:each) { sign_in other_user }
|
|
|
|
it "does not pin the answer" do
|
|
travel_to(Time.at(1603290950).utc) do
|
|
expect { subject }.not_to(change { answer.reload.pinned_at })
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#unpin" do
|
|
subject { delete :unpin, params: { username: user.screen_name, id: answer.id }, format: :turbo_stream }
|
|
|
|
context "user signed in" do
|
|
before(:each) do
|
|
sign_in user
|
|
answer.update!(pinned_at: Time.at(1603290950).utc)
|
|
end
|
|
|
|
it "unpins the answer" do
|
|
expect { subject }.to change { answer.reload.pinned_at }.from(Time.at(1603290950).utc).to(nil)
|
|
expect(response.body).to include("turbo-stream action=\"update\" target=\"ab-pin-#{answer.id}\"")
|
|
end
|
|
end
|
|
|
|
context "other user signed in" do
|
|
let(:other_user) { FactoryBot.create(:user) }
|
|
|
|
before(:each) do
|
|
sign_in other_user
|
|
answer.update!(pinned_at: Time.at(1603290950).utc)
|
|
end
|
|
|
|
it "does not unpin the answer" do
|
|
expect { subject }.not_to(change { answer.reload.pinned_at })
|
|
end
|
|
end
|
|
end
|
|
end
|