When(/^(.*) Orchard\-User\-Id is provided$/) do |userid_type|
  @res = case userid_type
         when "no"
           retrieve_upload_token(nil)
         when "empty"
           retrieve_upload_token("Orchard-User-Id" => "")
         when "valid"
           retrieve_upload_token(ALW_USER_SERVICE_HEADERS)
         end
end

Then(/^an? (.*) response should be obtained from \/upload\-token endpoint$/) do |errortype|
  parsed_response = JSON.parse(@res[:response])

  case errortype
  when "valid"
    assert_equal(200, @res[:code])
    assert_equal("#{ENV['TEST_DOMAIN_URL']}-orcd-raw-assets", parsed_response["bucket"])

    refute_nil(parsed_response["filename"], "[filename] field was empty: #{parsed_response}")
    refute_nil(parsed_response["credentials"]["aws_access_key_id"],
               "[aws_access_key_id] field was empty: #{parsed_response}")
    refute_nil(parsed_response["credentials"]["token"],
               "[token] field was empty: #{parsed_response}")
    refute_nil(parsed_response["credentials"]["expiration"],
               "[expiration] field was empty: #{parsed_response}")
    refute_nil(parsed_response["credentials"]["aws_secret_access_key"],
               "[aws_secret_access_key] field was empty: #{parsed_response}")

  when "userId required"
    assert_equal(400, @res[:code])
    assert_equal("error_header_validation", parsed_response["code"])
    assert_includes(parsed_response["message"], "is not valid under any of the given schemas")
    assert_includes(parsed_response["message"], "Orchard-User-Id")

  when "error header validation"
    assert_equal(400, @res[:code])
    assert_equal("error_header_validation", parsed_response["code"])
  end
end
