module GdsApi::TestHelpers::NeedApi

def need_api_has_need(need)

def need_api_has_need(need)
  need_id = need["id"] || need[:id]
  raise ArgumentError, "Test need is missing an ID" unless need_id
  url = NEED_API_ENDPOINT + "/needs/#{need_id}"
  stub_request(:get, url).to_return(status: 200, body: need.to_json, headers: {})
end

def need_api_has_needs(needs)

def need_api_has_needs(needs)
  url = NEED_API_ENDPOINT + "/needs"
  body = response_base.merge(
    "results" => needs
  )
  stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
end

def need_api_has_needs_for_organisation(organisation, needs)

def need_api_has_needs_for_organisation(organisation, needs)
  url = NEED_API_ENDPOINT + "/needs?organisation_id=#{organisation}"
  body = response_base.merge(
    "results" => needs
  )
  stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
end

def need_api_has_needs_for_search(search_term, needs)

def need_api_has_needs_for_search(search_term, needs)
  url = NEED_API_ENDPOINT + "/needs?q=#{search_term}"
  body = response_base.merge(
    "results" => needs
  )
  stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
end

def need_api_has_no_need(need_id)

def need_api_has_no_need(need_id)
  url = NEED_API_ENDPOINT + "/needs/#{need_id}"
  not_found_body = {
    "_response_info" => {"status" => "not_found"},
    "error" => "No need exists with this ID"
  }
  stub_request(:get, url).to_return(
    status: 404,
    body: not_found_body.to_json,
    headers: {}
  )
end

def need_api_has_organisations(organisations)

def need_api_has_organisations(organisations)
  url = NEED_API_ENDPOINT + "/organisations"
  body = response_base.merge(
    "organisations" => organisations.map {|id, attrs|
      if attrs.is_a? String
        { "id" => id }.merge("name" => attrs)
      else
        { "id" => id }.merge(attrs)
      end
    }
  )
  stub_request(:get, url).to_return(status: 200, body: body.to_json, headers: {})
end

def need_api_has_raw_response_for_page(response, page = nil)

def need_api_has_raw_response_for_page(response, page = nil)
  url = NEED_API_ENDPOINT + "/needs"
  url << "?page=#{page}" unless page.nil?
  stub_request(:get, url).to_return(status: 200, body: response, headers: {})
end