docbrown/spec/models/webhook/event_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

45 lines
1.5 KiB
Ruby

require "rails_helper"
RSpec.describe Webhook::Event, type: :model do
let(:article) { create(:article) }
let!(:payload) { Webhook::PayloadAdapter.new(article).hash }
it "rases an exception" do
expect do
described_class.new(event_type: "cool_event")
end.to raise_error(Webhook::InvalidEvent)
end
describe "#as_json" do
it "provides correct json (sample)" do
event = described_class.new(event_type: "article_created", payload: { title: "Hello, world" })
hash = event.as_json
attributes = hash[:data][:attributes]
expect(attributes[:event_type]).to eq("article_created")
expect(attributes[:timestamp]).to be_truthy
expect(attributes[:payload][:title]).to eq("Hello, world")
end
it "provides correct json including article" do
event = described_class.new(event_type: "article_updated", payload: payload)
hash = event.as_json
attributes = hash[:data][:attributes]
expect(attributes[:event_type]).to eq("article_updated")
expect(attributes[:payload][:data][:attributes][:title]).to eq(article.title)
end
end
describe "#to_json" do
it "provides correct json including article" do
event = described_class.new(event_type: "article_updated", payload: payload)
json = event.to_json
hash = JSON.parse(json)
attributes = hash["data"]["attributes"]
expect(attributes["event_type"]).to eq("article_updated")
expect(attributes["payload"]["data"]["attributes"]["title"]).to eq(article.title)
end
end
end