# frozen_string_literal: true module Webhookr module ServiceUnderTest class Adapter SERVICE_NAME = 'service_under_test' include Webhookr::Services::Adapter::Base class << self def process(payload) [ *payload ].collect do |p| p = Rack::Utils.parse_nested_query(p) validate(payload) OpenStruct.new( event_type: p['event'], data: OpenStruct.new(p['data']) ) end end def validate(payload) raise Webhookr::InvalidPayloadError, payload if payload.nil? || payload == 'blort' end end end end end module Webhookr module ServiceUnderTest def stub(options = {}) ops = { service_name: 'service_under_test', event_type: 'test_event', email: 'foo@example.com' }.merge(options) OpenStruct.new( payload: "event=#{ops[:event_type]}&data[email]=#{ops[:email]}", service_name: ops[:service_name], event_type: ops[:event_type], email: ops[:email] ) end end end class PlainOldCallBackClass @call_count = 0 @email = nil def self.reset! @call_count = 0 @email = nil end class << self attr_accessor :call_count, :email end def on_test_event(payload) self.class.call_count += 1 self.class.email = payload.data.email end end