44 lines
1.5 KiB
Ruby
44 lines
1.5 KiB
Ruby
require "rails_helper"
|
|
|
|
RSpec.describe Articles::Updater, type: :service do
|
|
let(:user) { create(:user) }
|
|
let!(:article) { create(:article, user: user) }
|
|
let(:attributes) { { body_markdown: "sample" } }
|
|
let(:draft) { create(:article, user: user, published: false) }
|
|
|
|
it "updates an article" do
|
|
described_class.call(user, article.id, attributes)
|
|
article.reload
|
|
expect(article.body_markdown).to eq("sample")
|
|
end
|
|
|
|
describe "events dispatcher" do
|
|
let(:event_dispatcher) { double }
|
|
|
|
before do
|
|
allow(event_dispatcher).to receive(:call)
|
|
end
|
|
|
|
it "calls the dispatcher" do
|
|
described_class.call(user, article.id, attributes, event_dispatcher)
|
|
expect(event_dispatcher).to have_received(:call).with("article_updated", article)
|
|
end
|
|
|
|
it "doesn't call the dispatcher when unpublished => unpublished" do
|
|
described_class.call(user, draft.id, attributes, event_dispatcher)
|
|
expect(event_dispatcher).not_to have_received(:call)
|
|
end
|
|
|
|
it "calls the dispatcher when unpublished => published" do
|
|
attributes[:published] = true
|
|
described_class.call(user, draft.id, attributes, event_dispatcher)
|
|
expect(event_dispatcher).to have_received(:call).with("article_updated", draft)
|
|
end
|
|
|
|
it "calls the dispatcher when published => unpublished" do
|
|
attributes[:published] = false
|
|
described_class.call(user, article.id, attributes, event_dispatcher)
|
|
expect(event_dispatcher).to have_received(:call).with("article_updated", article)
|
|
end
|
|
end
|
|
end
|