* 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>
87 lines
2.4 KiB
Ruby
87 lines
2.4 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe "ArticlesDestroy" do
|
|
let(:user) { create(:user, :org_admin) }
|
|
let(:article) { create(:article, user_id: user.id) }
|
|
|
|
before do
|
|
sign_in user
|
|
end
|
|
|
|
context "when DELETE /articles/:slug" do
|
|
it "destroyed an article" do
|
|
delete "/articles/#{article.id}"
|
|
destroyed_article = Article.find_by(id: article.id)
|
|
expect(destroyed_article).to be_nil
|
|
end
|
|
|
|
it "schedules a RemoveAllWorker if there are comments" do
|
|
create(:comment, commentable: article, user: user)
|
|
sidekiq_assert_enqueued_with(job: Notifications::RemoveAllWorker) do
|
|
delete "/articles/#{article.id}"
|
|
end
|
|
end
|
|
|
|
it "removes all previous published notifications" do
|
|
create(:notification, notifiable: article, action: "Published", user: user)
|
|
expect do
|
|
delete "/articles/#{article.id}"
|
|
end.to change(Notification, :count).by(-1)
|
|
end
|
|
|
|
it "doesn't destroy another person's article" do
|
|
article2 = create(:article, user_id: create(:user).id)
|
|
expect do
|
|
delete "/articles/#{article2.id}"
|
|
end.to raise_error(Pundit::NotAuthorizedError)
|
|
end
|
|
end
|
|
|
|
describe "when GET /delete_confirm" do
|
|
context "without an article" do
|
|
before { sign_in user }
|
|
|
|
it "renders not_found" do
|
|
article = create(:article, user: user)
|
|
expect do
|
|
get "#{article.path}_1/delete_confirm"
|
|
end.to raise_error(ActiveRecord::RecordNotFound)
|
|
end
|
|
end
|
|
|
|
context "with an article the current user wrote" do
|
|
before { sign_in user }
|
|
|
|
it "renders success" do
|
|
article = create(:article, user: user)
|
|
get "#{article.path}/delete_confirm"
|
|
expect(response).to be_successful
|
|
end
|
|
end
|
|
|
|
context "when an admin attempts to delete an article" do
|
|
let(:admin) { create(:user, :admin) }
|
|
|
|
before { sign_in admin }
|
|
|
|
it "renders success" do
|
|
article = create(:article, user: user)
|
|
get "#{article.path}/delete_confirm"
|
|
expect(response).to be_successful
|
|
end
|
|
end
|
|
|
|
context "when another user attempts to delete someone's article" do
|
|
let(:other_user) { create(:user) }
|
|
|
|
before { sign_in other_user }
|
|
|
|
it "raises a policy error" do
|
|
article = create(:article, user: user)
|
|
expect do
|
|
get "#{article.path}/delete_confirm"
|
|
end.to raise_error(Pundit::NotAuthorizedError)
|
|
end
|
|
end
|
|
end
|
|
end
|