module GdsApi::TestHelpers::EmailAlertApi
def assert_email_alert_sent(attributes = nil)
def assert_email_alert_sent(attributes = nil) if attributes matcher = ->(request) do payload = JSON.parse(request.body) payload.select { |k, _| attributes.key?(k) } == attributes end end assert_requested(:post, "#{EMAIL_ALERT_API_ENDPOINT}/notifications", times: 1, &matcher) end
def assert_subscribed(subscribable_id, address, frequency = "immediately")
def assert_subscribed(subscribable_id, address, frequency = "immediately") assert_requested(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscriptions") do |req| JSON.parse(req.body).symbolize_keys == { subscribable_id: subscribable_id, address: address, frequency: frequency } end end
def assert_unsubscribed(uuid)
def assert_unsubscribed(uuid) assert_requested(:post, "#{EMAIL_ALERT_API_ENDPOINT}/unsubscribe/#{uuid}", times: 1) end
def build_subscriber_lists_url(attributes = nil)
def build_subscriber_lists_url(attributes = nil) if attributes tags = attributes["tags"] links = attributes["links"] document_type = attributes["document_type"] email_document_supertype = attributes["email_document_supertype"] government_document_supertype = attributes["government_document_supertype"] gov_delivery_id = attributes["gov_delivery_id"] params = {} params[:tags] = tags if tags params[:links] = links if links params[:document_type] = document_type if document_type params[:email_document_supertype] = email_document_supertype if email_document_supertype params[:government_document_supertype] = government_document_supertype if government_document_supertype params[:gov_delivery_id] = gov_delivery_id if gov_delivery_id query = Rack::Utils.build_nested_query(params) end url = "#{EMAIL_ALERT_API_ENDPOINT}/subscriber-lists" query ? "#{url}?#{query}" : url end
def email_alert_api_accepts_alert
def email_alert_api_accepts_alert stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/notifications") .to_return(status: 202, body: {}.to_json) end
def email_alert_api_accepts_unpublishing_message
def email_alert_api_accepts_unpublishing_message stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/unpublish-messages") .to_return(status: 202, body: {}.to_json) end
def email_alert_api_creates_a_subscription(subscribable_id, address, frequency, returned_subscription_id)
def email_alert_api_creates_a_subscription(subscribable_id, address, frequency, returned_subscription_id) stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscriptions") .with( body: { subscribable_id: subscribable_id, address: address, frequency: frequency }.to_json ).to_return(status: 201, body: { subscription_id: returned_subscription_id }.to_json) end
def email_alert_api_creates_an_auth_token(subscriber_id, address)
def email_alert_api_creates_an_auth_token(subscriber_id, address) stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/auth-token") .to_return( status: 201, body: get_subscriber_response(subscriber_id, address).to_json ) end
def email_alert_api_creates_an_existing_subscription(subscribable_id, address, frequency, returned_subscription_id)
def email_alert_api_creates_an_existing_subscription(subscribable_id, address, frequency, returned_subscription_id) stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscriptions") .with( body: { subscribable_id: subscribable_id, address: address, frequency: frequency }.to_json ).to_return(status: 200, body: { subscription_id: returned_subscription_id }.to_json) end
def email_alert_api_creates_subscriber_list(attributes)
def email_alert_api_creates_subscriber_list(attributes) stub_request(:post, build_subscriber_lists_url) .to_return( status: 201, body: get_subscriber_list_response(attributes).to_json, ) end
def email_alert_api_does_not_have_subscribable(reference:)
def email_alert_api_does_not_have_subscribable(reference:) stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribables/#{reference}") .to_return(status: 404) end
def email_alert_api_does_not_have_subscriber_list(attributes)
def email_alert_api_does_not_have_subscriber_list(attributes) stub_request(:get, build_subscriber_lists_url(attributes)) .to_return(status: 404) end
def email_alert_api_does_not_have_subscriber_subscriptions(id)
def email_alert_api_does_not_have_subscriber_subscriptions(id) stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/#{id}/subscriptions") .to_return(status: 404) end
def email_alert_api_does_not_have_updated_subscriber(id)
def email_alert_api_does_not_have_updated_subscriber(id) stub_request(:patch, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/#{id}") .to_return(status: 404) end
def email_alert_api_does_not_have_updated_subscription(subscription_id)
def email_alert_api_does_not_have_updated_subscription(subscription_id) stub_request(:patch, "#{EMAIL_ALERT_API_ENDPOINT}/subscriptions/#{subscription_id}") .to_return(status: 404) end
def email_alert_api_has_no_subscriber(subscriber_id)
def email_alert_api_has_no_subscriber(subscriber_id) stub_request(:delete, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/#{subscriber_id}") .to_return(status: 404) end
def email_alert_api_has_no_subscription_for_uuid(uuid)
def email_alert_api_has_no_subscription_for_uuid(uuid) stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/unsubscribe/#{uuid}") .with(body: "{}") .to_return(status: 404) end
def email_alert_api_has_notification(notification)
def email_alert_api_has_notification(notification) url = "#{EMAIL_ALERT_API_ENDPOINT}/notifications/#{notification['web_service_bulletin']['to_param']}" stub_request(:get, url).to_return( status: 200, body: notification.to_json ) end
def email_alert_api_has_notifications(notifications, start_at = nil)
def email_alert_api_has_notifications(notifications, start_at = nil) url = "#{EMAIL_ALERT_API_ENDPOINT}/notifications" url += "?start_at=#{start_at}" if start_at url_regexp = Regexp.new("^#{Regexp.escape(url)}$") stub_request(:get, url_regexp) .to_return( status: 200, body: notifications.to_json ) end
def email_alert_api_has_subscribable(reference:, returned_attributes:)
def email_alert_api_has_subscribable(reference:, returned_attributes:) stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribables/#{reference}") .to_return( status: 200, body: { subscribable: returned_attributes }.to_json ) end
def email_alert_api_has_subscriber_list(attributes)
def email_alert_api_has_subscriber_list(attributes) stub_request(:get, build_subscriber_lists_url(attributes)) .to_return( status: 200, body: get_subscriber_list_response(attributes).to_json, ) end
def email_alert_api_has_subscriber_subscriptions(id, address)
def email_alert_api_has_subscriber_subscriptions(id, address) stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/#{id}/subscriptions") .to_return( status: 200, body: get_subscriber_subscriptions_response(id, address).to_json, ) end
def email_alert_api_has_subscription(
def email_alert_api_has_subscription( id, frequency, title: "Some title", subscriber_id: 1, subscriber_list_id: 1000, ended: false ) stub_request(:get, "#{EMAIL_ALERT_API_ENDPOINT}/subscriptions/#{id}") .to_return( status: 200, body: get_subscription_response( id, frequency: frequency, title: title, subscriber_id: subscriber_id, subscriber_list_id: subscriber_list_id, ended: ended, ).to_json, ) end
def email_alert_api_has_updated_subscriber(id, new_address)
def email_alert_api_has_updated_subscriber(id, new_address) stub_request(:patch, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/#{id}") .to_return( status: 200, body: get_subscriber_response(id, new_address).to_json, ) end
def email_alert_api_has_updated_subscription(subscription_id, frequency)
def email_alert_api_has_updated_subscription(subscription_id, frequency) stub_request(:patch, "#{EMAIL_ALERT_API_ENDPOINT}/subscriptions/#{subscription_id}") .to_return( status: 200, body: get_subscription_response(subscription_id, frequency: frequency).to_json, ) end
def email_alert_api_refuses_to_create_subscriber_list
def email_alert_api_refuses_to_create_subscriber_list stub_request(:post, build_subscriber_lists_url) .to_return(status: 422) end
def email_alert_api_refuses_to_create_subscription(subscribable_id, address, frequency)
def email_alert_api_refuses_to_create_subscription(subscribable_id, address, frequency) stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/subscriptions") .with( body: { subscribable_id: subscribable_id, address: address, frequency: frequency }.to_json ).to_return(status: 422) end
def email_alert_api_unsubscribes_a_subscriber(subscriber_id)
def email_alert_api_unsubscribes_a_subscriber(subscriber_id) stub_request(:delete, "#{EMAIL_ALERT_API_ENDPOINT}/subscribers/#{subscriber_id}") .to_return(status: 204) end
def email_alert_api_unsubscribes_a_subscription(uuid)
def email_alert_api_unsubscribes_a_subscription(uuid) stub_request(:post, "#{EMAIL_ALERT_API_ENDPOINT}/unsubscribe/#{uuid}") .with(body: "{}") .to_return(status: 204) end
def get_subscriber_list_response(attributes)
def get_subscriber_list_response(attributes) { "subscriber_list" => { "id" => "447135c3-07d6-4c3a-8a3b-efa49ef70e52", "title" => "Some title", "active_subscriptions_count" => 42, }.merge(attributes) } end
def get_subscriber_response(id, address)
def get_subscriber_response(id, address) { "subscriber" => { "id" => id, "address" => address } } end
def get_subscriber_subscriptions_response(id, address)
def get_subscriber_subscriptions_response(id, address) { "subscriber" => { "id" => id, "address" => address }, "subscriptions" => [ { "subscriber_id" => 1, "subscriber_list_id" => 1000, "frequency" => "daily", "id" => "447135c3-07d6-4c3a-8a3b-efa49ef70e52", "subscriber_list" => { "id" => 1000, "slug" => "some-thing" } } ] } end
def get_subscription_response(
def get_subscription_response( id, frequency: "daily", title: "Some title", subscriber_id: 1, subscriber_list_id: 1000, ended: false ) { "subscription" => { "id" => id, "frequency" => frequency, "source" => "user_signed_up", "ended_at" => ended ? Time.now.rfc3339 : nil, "ended_reason" => ended ? "unsubscribed" : nil, "subscriber" => { "id" => subscriber_id, "address" => "test@example.com", }, "subscriber_list" => { "id" => subscriber_list_id, "slug" => "some-thing", "title" => title, } } } end
def post_alert_response
def post_alert_response {} end
def stub_any_email_alert_api_call
def stub_any_email_alert_api_call stub_request(:any, %r{\A#{EMAIL_ALERT_API_ENDPOINT}}) end