docbrown/spec/services/articles/destroyer_spec.rb
Anna Buianova 4c9a40be41 Dispatch events to the webhook endpoints #3715 (#3872)
* Start with webhooks: table and model

* Start with webhooks api

* Start with webhooks api

* Webhook::Event class and events list

* Remove commented callbacks

* Start with sending events to webhook endpoints

* A couple of tests for Articles::Creator

* Send event to webhook endpoint on article destroy

* Dispatch event on article update

* Dispatch event when an article updated from admin

* Spec for the webhook job

* One more test for the dispatch event job

* Integration-like spec for event dispatching to webhook endpoints when creating an article

* Use Addressable::URI to parse endpoint url

* Add oj as a faster fast_jsonapi backend

* Renamed serializers

* Move article serialization out of a model

* Don't allow to create a webhook event with invalid type

* Add fields for ArticleSerializer

* Fix webhook event job specs

* Specify timeout when dispatching events

* Fix webhook job spec

* Change webhook events queue name

* Change serialized article fields for the dispatchable events

* Include user data when serializing an article for webhook event

* Moved decorating out of Webhook::DispatchEvent, fixed most specs

* Fix route in ArticleSerializer

* Move Article decoration to Webhook::PayloadAdapter

* Refactor image url helpers to avoid including helpers into serializer

* Fix specs

* Default url options for production
2019-09-07 13:17:45 -04:00

23 lines
648 B
Ruby

require "rails_helper"
RSpec.describe Articles::Destroyer do
let(:article) { create(:article) }
it "destroys an article" do
described_class.call(article)
expect(Article.find_by(id: article.id)).to be_nil
end
it "schedules removing notifications" do
expect do
described_class.call(article)
end.to have_enqueued_job(Notifications::RemoveAllJob).once
end
it "calls events dispatcher" do
event_dispatcher = double
allow(event_dispatcher).to receive(:call)
described_class.call(article, event_dispatcher)
expect(event_dispatcher).to have_received(:call).with("article_destroyed", article)
end
end