Then(/^the \/POST asset response contains a 404 code and "not found in bucket" message$/) do
  parsed_response = JSON.parse(@res[:response])
  assert_equal(404, @res[:code])
  assert_equal("not_found_error", parsed_response["code"])
  assert_includes(parsed_response["message"], "not found in bucket")
end

When(
  /^the user \/POST (valid|non-existent) (JPG|WAV|TIF|FLAC|M4A) asset$/
) do |swich_case, asset_type|
  token_details = JSON.parse(@token_details[:response])
  case swich_case
  when "valid"
    post_asset_body = create_post_asset_body(token_details, asset_type)
    @res = post_asset(post_asset_body.to_json)
  when "non-existent"
    post_asset_body = create_post_asset_body(token_details)
    post_asset_body[:filename] = "#{SecureRandom.uuid}.jpg"
    @res = post_asset(post_asset_body.to_json)
  end
end

When(
  /^the user \/POST valid (JPG|WAV|TIF|FLAC|M4A) asset to v2 endpoint$/
) do |asset_type|
  token_details = JSON.parse(@token_details[:response])

  post_asset_body = create_post_asset_body_v2(token_details, asset_type)
  @res = post_asset_v2(post_asset_body.to_json)
end

When(
  /^the user \/POST valid (JPG|WAV|TIF|FLAC|M4A) asset to v2 endpoint with token$/
) do |asset_type|
  token_details = JSON.parse(@token_details[:response])

  post_asset_body = create_post_asset_body(token_details, asset_type)
  @res = post_asset_v2(post_asset_body.to_json)
end

When(/^the user \/POST valid WAV asset as an OA user$/) do
  token_details = JSON.parse(@token_details[:response])
  post_asset_body = create_post_asset_body(token_details, "WAV")
  @res = post_asset(post_asset_body.to_json, OA_USER_SERVICE_HEADERS)
end

When(/^the user \/POST asset with wrong (UPC|TUID|filetype)$/) do |swich_case|
  token_details = JSON.parse(@token_details[:response])
  post_asset_body = create_post_asset_body(token_details, "WAV")

  case swich_case
  when "UPC"
    @upctuid = "upc"
    post_asset_body[:upc] = PRODUCT_B_UPC
    @res = post_asset(post_asset_body.to_json)
  when "TUID"
    @upctuid = "tuid"
    post_asset_body[:track_unique_id] = PRODUCT_B_TUID
    post_asset_body[:asset_type] = "WAV"
    @res = post_asset(post_asset_body.to_json)
  when "filetype"
    post_asset_body[:asset_type] = "PDF"
    @res = post_asset(post_asset_body.to_json)
  end
end

When(/^the user \/POST asset with non-existent product_id$/) do
  token_details = JSON.parse(@token_details[:response])
  post_asset_body = create_post_asset_body(token_details)
  post_asset_body[:product_id] = 123_123_123
  @res = post_asset(post_asset_body.to_json)
end

Then(/^the \/POST asset response contains a (200|400|403|404) code$/) do |code|
  parsed_response = JSON.parse(@res[:response])

  case code.to_i
  when 200
    assert_equal(200, @res[:code])
    assert_equal("ok", parsed_response["status"])
  when 404
    assert_equal(404, @res[:code])
    assert_equal("not_found_error", parsed_response["code"])
    assert_equal("Product not found for provided product id.", parsed_response["message"])
  when 400
    assert_equal(400, @res[:code])
    assert_equal("wrong_value", parsed_response["code"])
    assert_equal("Wrong asset type was provided.", parsed_response["message"])
  when 403
    assert_equal(403, @res[:code])
    case @upctuid
    when "upc"
      assert_equal("product_id_upc_mismatch", parsed_response["code"])
      assert_includes(parsed_response["message"], "does not match product_id")
    when "tuid"
      assert_equal("product_does_not_own_track", parsed_response["code"])
      assert_includes(parsed_response["message"], "does not belong to product with id")
    end
  end
end

Then(/^the \/POST asset response contains a \[token was unexpected\] error$/) do
  parsed_response = JSON.parse(@res[:response])
  assert_equal(400, @res[:code])
  assert_equal("error_body_validation", parsed_response["code"])
  assert_includes(parsed_response["message"], "'token' was unexpected")
end
