lib/gds_api/test_helpers/performance_platform/data_out.rb



module GdsApi
  module TestHelpers
    module PerformancePlatform
      module DataOut
        PP_DATA_OUT_ENDPOINT = "https://www.performance.service.gov.uk".freeze

        def stub_service_feedback(slug, response_body = {})
          stub_http_request(:get, "#{PP_DATA_OUT_ENDPOINT}/data/#{slug}/customer-satisfaction").
            to_return(status: 200, body: response_body.to_json)
        end

        def stub_data_set_not_available(slug)
          stub_http_request(:get, "#{PP_DATA_OUT_ENDPOINT}/data/#{slug}/customer-satisfaction").
            to_return(status: 404)
        end

        def stub_service_not_available
          stub_request(:any, /#{PP_DATA_OUT_ENDPOINT}\/.*/).to_return(status: 503)
        end

        def stub_search_terms(slug, response_body = {})
          options = {
              slug: slug,
              transaction: 'search-terms',
              group_by: 'searchKeyword',
              collect: 'searchUniques:sum'
          }
          stub_statistics(options, false, response_body)
        end

        def stub_searches(slug, is_multipart, response_body = {})
          options = {
              slug: slug,
              transaction: 'search-terms',
              group_by: 'pagePath',
              collect: 'searchUniques:sum'
          }
          stub_statistics(options, is_multipart, response_body)
        end

        def stub_page_views(slug, is_multipart, response_body = {})
          options = {
              slug: slug,
              transaction: 'page-statistics',
              group_by: 'pagePath',
              collect: 'uniquePageviews:sum'
          }
          stub_statistics(options, is_multipart, response_body)
        end

        def stub_problem_reports(slug, is_multipart, response_body = {})
          options = {
              slug: slug,
              transaction: 'page-contacts',
              group_by: 'pagePath',
              collect: 'total:sum'
          }
          stub_statistics(options, is_multipart, response_body)
        end

        def stub_statistics(options, is_multipart, response_body = {})
          params = {
              group_by: options[:group_by],
              collect: options[:collect],
              duration: 42,
              period: "day",
              end_at: Date.today.to_time.getutc.iso8601
          }

          filter_param = is_multipart ? :filter_by_prefix : :filter_by
          params[filter_param] = "pagePath:" + options[:slug]

          stub_http_request(:get, "#{PP_DATA_OUT_ENDPOINT}/data/govuk-info/#{options[:transaction]}")
              .with(query: params)
              .to_return(status: 200, body: response_body.to_json)
        end

        def stub_search_404(slug)
          stub_request(:get, "#{PP_DATA_OUT_ENDPOINT}/data/govuk-info/search-terms").
              with(query: hash_including(filter_by: slug)).
              to_return(status: 404, headers: { content_type: "application/json" })
        end

        def stub_page_views_404(slug)
          stub_request(:get, "#{PP_DATA_OUT_ENDPOINT}/data/govuk-info/page-statistics").
              with(query: hash_including(filter_by: slug)).
              to_return(status: 404, headers: { content_type: "application/json" })
        end

        def stub_problem_reports_404(slug)
          stub_request(:get, "#{PP_DATA_OUT_ENDPOINT}/data/govuk-info/page-contacts").
              with(query: hash_including(filter_by: slug)).
              to_return(status: 404, headers: { content_type: "application/json" })
        end
      end
    end
  end
end