* spelling: access Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: additional Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: administrative Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: aggregate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: assigns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: attributes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: autocomplete Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: because Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: between Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: bootstrap Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: calculating Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: captcha Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: character Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: chosen Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: commenter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: competitor Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: componentize Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: contrast Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: corresponding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: description Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: destroyed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: destroys Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: discussion Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: episode Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: escaped Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: evaluates Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: expired Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: explicitly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: facebook Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fragment Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: functionality Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: improper Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: incentive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: interfere Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: latest Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: message Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: minimum Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: moderator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mouseover Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mutual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: nonexistent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: notification Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occasionally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurrence Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurs Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: octokit Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: offset Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: omitted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: opacity Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: organization Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: organizations Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overridden Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: override Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overriding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: prefill Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: previous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: profile Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: recycling Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: registered Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repositories Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rescuing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: response Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: returns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: second Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: separator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: services Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: subscriber Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: subscription Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: success Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successfully Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: suppress Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: test Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: thought Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: uniqueness Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unknown Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unproductive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unreachable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unsuccessful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: utilities Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: utility Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: valid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: voluntarily Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: vomited Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: website Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: withholding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
81 lines
3.2 KiB
Ruby
81 lines
3.2 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "DiscussionLocks", type: :request 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.to change(DiscussionLock, :count).by(0)
|
|
|
|
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
|