* 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>
81 lines
3.1 KiB
Ruby
81 lines
3.1 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "DiscussionLocks" do
|
|
let(:user) { create(:user) }
|
|
let(:cache_buster) { EdgeCache::BustArticle }
|
|
|
|
before { sign_in user }
|
|
|
|
describe "POST /discussion_locks - DiscussionLocks#create" do
|
|
it "creates a DiscussionLock" do
|
|
article = create(:article, user: user)
|
|
reason = "Unproductive comments."
|
|
notes = "Hostile comment from user @user"
|
|
valid_attributes = { article_id: article.id, locking_user_id: user.id, notes: notes, reason: reason }
|
|
expect do
|
|
post discussion_locks_path, params: { discussion_lock: valid_attributes }
|
|
end.to change(DiscussionLock, :count).by(1)
|
|
|
|
expect(request.flash[:success]).to include("Discussion was successfully locked!")
|
|
discussion_lock = DiscussionLock.last
|
|
expect(discussion_lock.article_id).to eq article.id
|
|
expect(discussion_lock.locking_user_id).to eq user.id
|
|
expect(discussion_lock.notes).to eq notes
|
|
expect(discussion_lock.reason).to eq reason
|
|
end
|
|
|
|
it "returns an error for an Article that already has a DiscussionLock" do
|
|
article = create(:article, :with_discussion_lock, user: user)
|
|
invalid_article_attributes = { article_id: article.id, locking_user_id: user.id }
|
|
expect do
|
|
post discussion_locks_path, params: { discussion_lock: invalid_article_attributes }
|
|
end.not_to change(DiscussionLock, :count)
|
|
|
|
expect(request.flash[:error]).to include("Error: Article has already been taken")
|
|
end
|
|
|
|
it "busts the cache for the article" do
|
|
article = create(:article, user: user)
|
|
allow(cache_buster).to receive(:call).with(article)
|
|
valid_attributes = { article_id: article.id, locking_user_id: user.id }
|
|
|
|
post discussion_locks_path, params: { discussion_lock: valid_attributes }
|
|
|
|
expect(cache_buster).to have_received(:call).with(article).once
|
|
end
|
|
|
|
it "does not allow to lock another user's article" do
|
|
article = create(:article, user: user)
|
|
other_user = create(:user)
|
|
sign_out user
|
|
sign_in other_user
|
|
|
|
reason = "Unproductive comments."
|
|
notes = "Hostile comment from user @user"
|
|
valid_attributes = { article_id: article.id, locking_user_id: other_user.id, notes: notes, reason: reason }
|
|
expect do
|
|
post discussion_locks_path, params: { discussion_lock: valid_attributes }
|
|
end.to raise_error(Pundit::NotAuthorizedError)
|
|
end
|
|
end
|
|
|
|
describe "DELETE /discussion_locks/:id - DiscussionLocks#destroy" do
|
|
it "destroys a DiscussionLock" do
|
|
article = create(:article, user: user)
|
|
discussion_lock = create(:discussion_lock, article_id: article.id, locking_user_id: user.id)
|
|
expect do
|
|
delete discussion_lock_path(discussion_lock.id)
|
|
end.to change(DiscussionLock, :count).by(-1)
|
|
end
|
|
|
|
it "busts the cache for the article" do
|
|
article = create(:article, user: user)
|
|
allow(cache_buster).to receive(:call).with(article)
|
|
discussion_lock = create(:discussion_lock, article_id: article.id, locking_user_id: user.id)
|
|
|
|
delete discussion_lock_path(discussion_lock.id)
|
|
|
|
expect(cache_buster).to have_received(:call).with(article).once
|
|
end
|
|
end
|
|
end
|