lib/gds_api/test_helpers/calendars.rb



module GdsApi
  module TestHelpers
    module Calendars
      CALENDARS_ENDPOINT = Plek.current.find('calendars')


      def stub_calendars_endpoint(in_division: nil)
        endpoint = "#{CALENDARS_ENDPOINT}/bank-holidays"
        endpoint += "/#{in_division}" unless in_division.nil?
        endpoint + '.json'
      end

      def stub_calendars_has_no_bank_holidays(in_division: nil)
        calendars_has_bank_holidays_on([], in_division: in_division)
      end

      def stub_calendars_has_bank_holidays_on(dates, in_division: nil)
        events = dates.map.with_index do |date, idx|
          {
            title: "Caturday #{idx}!",
            date: date.to_date.iso8601,
            notes: "Y'know, for cats!",
            bunting: true
          }
        end

        response =
          if in_division.nil?
            {
              'england-and-wales' => {
                division: 'england-and-wales',
                events: events
              },
              'scotland' => {
                division: 'scotland',
                events: events
              },
              'northern-ireland' => {
                division: 'northern-ireland',
                events: events
              }
            }
          else
            {
              division: in_division,
              events: events
            }
          end

        stub_request(:get, calendars_endpoint(in_division: in_division))
          .to_return(body: response.to_json, status: 200)
      end

      def stub_calendars_has_a_bank_holiday_on(date, in_division: nil)
        calendars_has_bank_holidays_on([date], in_division: in_division)
      end

      # Aliases for DEPRECATED methods
      alias_method :calendars_endpoint, :stub_calendars_endpoint
      alias_method :calendars_has_no_bank_holidays, :stub_calendars_has_no_bank_holidays
      alias_method :calendars_has_bank_holidays_on, :stub_calendars_has_bank_holidays_on
      alias_method :calendars_has_a_bank_holiday_on, :stub_calendars_has_a_bank_holiday_on
    end
  end
end