* Reduce arguments method buff! at model buffer_update * Rename args and remove brackets as suggested * Remove unnecessary args and improve buffer class * Change constant name at buffer update and how call them
69 lines
2.2 KiB
Ruby
69 lines
2.2 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 "removes article from Elasticsearch" do
|
|
sidekiq_perform_enqueued_jobs
|
|
expect(article.elasticsearch_doc).not_to be_nil
|
|
|
|
sidekiq_perform_enqueued_jobs { described_class.call(user) }
|
|
expect { article.elasticsearch_doc }.to raise_error(Search::Errors::Transport::NotFound)
|
|
end
|
|
|
|
context "with comments" do
|
|
let(:buster) { double }
|
|
|
|
before do
|
|
allow(buster).to receive(:bust_comment)
|
|
allow(buster).to receive(:bust_article)
|
|
allow(buster).to receive(:bust_user)
|
|
|
|
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 "deletes articles' buffer updates" do
|
|
BufferUpdate.buff!(article.id, "twitter_buffer_text")
|
|
|
|
described_class.call(user)
|
|
|
|
expect(BufferUpdate.where(article_id: article.id).any?).to be false
|
|
end
|
|
|
|
it "busts cache" do
|
|
described_class.call(user, buster)
|
|
expect(buster).to have_received(:bust_comment).with(article).twice
|
|
expect(buster).to have_received(:bust_user).with(user2).at_least(:once)
|
|
expect(buster).to have_received(:bust_article).with(article)
|
|
end
|
|
|
|
it "removes comments from Elasticsearch", :aggregate_failures do
|
|
sidekiq_perform_enqueued_jobs
|
|
comments = article.comments
|
|
comments.each { |comment| expect(comment.elasticsearch_doc).not_to be_nil }
|
|
sidekiq_perform_enqueued_jobs(only: Search::RemoveFromIndexWorker) do
|
|
described_class.call(user)
|
|
end
|
|
|
|
comments.each do |comment|
|
|
expect { comment.elasticsearch_doc }.to raise_error(Search::Errors::Transport::NotFound)
|
|
end
|
|
end
|
|
end
|
|
end
|