docbrown/spec/services/users/delete_articles_spec.rb

45 lines
1.5 KiB
Ruby

require "rails_helper"
RSpec.describe Users::DeleteArticles, type: :service do
let(:user) { create(:user) }
let(:user2) { create(:user) }
let!(:article) { create(:article, user: user) }
let!(:article2) { create(:article, user: user) }
let!(:article3) { create(:article, user: user2) }
it "deletes articles" do
described_class.call(user)
expect(Article.find_by(id: article.id)).to be_nil
expect(Article.find_by(id: article2.id)).to be_nil
expect(Article.find(article3.id)).to be_present
end
it "deletes the articles' discussion locks before deleting the article" do
create(:discussion_lock, article: article, locking_user: user)
expect do
described_class.call(user)
end.to change(DiscussionLock, :count).from(1).to(0)
end
context "with comments" do
before do
allow(EdgeCache::BustComment).to receive(:call)
allow(EdgeCache::BustArticle).to receive(:call)
allow(EdgeCache::BustUser).to receive(:call)
create_list(:comment, 2, commentable: article, user: user2)
end
it "deletes articles' comments" do
described_class.call(user)
expect(Comment.where(commentable_id: article.id, commentable_type: "Article").any?).to be false
end
it "busts cache" do
described_class.call(user)
expect(EdgeCache::BustComment).to have_received(:call).with(article).twice
expect(EdgeCache::BustUser).to have_received(:call).with(user2).at_least(:once)
expect(EdgeCache::BustArticle).to have_received(:call).with(article)
end
end
end