* 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
45 lines
1.5 KiB
Ruby
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
|