# 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("") 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