Add tests for pin/unpin endpoints

This commit is contained in:
Karina Kwiatek 2023-02-07 22:52:36 +01:00
parent 664bf5eab2
commit 04303c667e
1 changed files with 61 additions and 1 deletions

View File

@ -2,7 +2,9 @@
require "rails_helper"
describe AnswerController do
describe AnswerController, type: :controller do
include ActiveSupport::Testing::TimeHelpers
let(:user) do
FactoryBot.create :user,
otp_module: :disabled,
@ -39,4 +41,62 @@ describe AnswerController do
end
end
end
describe "#pin" do
subject { post :pin, params: { username: user.screen_name, id: answer.id } }
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).to redirect_to(user_path(user))
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" do
travel_to(Time.at(1603290950).utc) do
expect { subject }.to raise_error(Errors::NotAuthorized)
expect(answer.reload.pinned_at).to eq(nil)
end
end
end
end
describe "#unpin" do
subject { delete :unpin, params: { username: user.screen_name, id: answer.id } }
context "user signed in" do
before(:each) do
sign_in user
answer.update!(pinned_at: Time.at(1603290950).utc)
end
it "pins the answer" do
expect { subject }.to change { answer.reload.pinned_at }.from(Time.at(1603290950).utc).to(nil)
expect(response).to redirect_to(user_path(user))
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 pin the answer do" do
expect { subject }.to raise_error(Errors::NotAuthorized)
expect(answer.reload.pinned_at).to eq(Time.at(1603290950).utc)
end
end
end
end