spaceship/lib/spaceship/test_flight/client.rb in fastlane-2.28.5 vs spaceship/lib/spaceship/test_flight/client.rb in fastlane-2.28.6

- old
+ new

@@ -1,22 +1,36 @@ module Spaceship::TestFlight class Client < Spaceship::Client + ## + # Spaceship HTTP client for the testflight API. + # + # This client is solely responsible for the making HTTP requests and + # parsing their responses. Parameters should be either named parameters, or + # for large request data bodies, pass in anything that can resond to + # `to_json`. + # + # Each request method should validate the required parameters. A required parameter is one that would result in 400-range response if it is not supplied. + # Each request method should make only one request. For more high-level logic, put code in the data models. + def self.hostname 'https://itunesconnect.apple.com/testflight/v2/' end + ## + # @!group Build trains API + ## + # Returns an array of all available build trains (not the builds they include) - def get_build_trains(app_id: nil, platform: nil) + def get_build_trains(app_id: nil, platform: "ios") assert_required_params(__method__, binding) - platform ||= "ios" + response = request(:get, "providers/#{team_id}/apps/#{app_id}/platforms/#{platform}/trains") handle_response(response) end - def get_builds_for_train(app_id: nil, platform: nil, train_version: nil) + def get_builds_for_train(app_id: nil, platform: "ios", train_version: nil) assert_required_params(__method__, binding) - platform ||= "ios" response = request(:get, "providers/#{team_id}/apps/#{app_id}/platforms/#{platform}/trains/#{train_version}/builds") handle_response(response) end @@ -32,12 +46,76 @@ url = "providers/#{team_id}/apps/#{app_id}/testers/#{tester_id}" response = request(:delete, url) handle_response(response) end + ## + # @!group Builds API + ## + + def get_build(app_id: nil, build_id: nil) + assert_required_params(__method__, binding) + + response = request(:get, "providers/#{team_id}/apps/#{app_id}/builds/#{build_id}") + handle_response(response) + end + + def put_build(app_id: nil, build_id: nil, build: nil) + assert_required_params(__method__, binding) + + response = request(:put) do |req| + req.url "providers/#{team_id}/apps/#{app_id}/builds/#{build_id}" + req.body = build.to_json + req.headers['Content-Type'] = 'application/json' + end + handle_response(response) + end + + def post_for_testflight_review(app_id: nil, build_id: nil, build: nil) + assert_required_params(__method__, binding) + + response = request(:post) do |req| + req.url "providers/#{team_id}/apps/#{app_id}/builds/#{build_id}/review" + req.body = build.to_json + req.headers['Content-Type'] = 'application/json' + end + handle_response(response) + end + + ## + # @!group Groups API + ## + + def get_groups(app_id: nil) + assert_required_params(__method__, binding) + + response = request(:get, "/testflight/v2/providers/#{team_id}/apps/#{app_id}/groups") + handle_response(response) + end + + def add_group_to_build(app_id: nil, group_id: nil, build_id: nil) + assert_required_params(__method__, binding) + + body = { + 'groupId' => group_id, + 'buildId' => build_id + } + response = request(:put) do |req| + req.url "providers/#{team_id}/apps/#{app_id}/groups/#{group_id}/builds/#{build_id}" + req.body = body.to_json + req.headers['Content-Type'] = 'application/json' + end + handle_response(response) + end + + ## + # @!group Testers API + ## + def post_tester(app_id: nil, tester: nil) assert_required_params(__method__, binding) + url = "providers/#{team_id}/apps/#{app_id}/testers" response = request(:post) do |req| req.url url req.body = { "email" => tester.email, @@ -49,10 +127,11 @@ handle_response(response) end def put_tester_to_group(app_id: nil, tester_id: nil, group_id: nil) assert_required_params(__method__, binding) + # Then we can add the tester to the group that allows the app to test # This is easy enough, we already have all this data. We don't need any response from the previous request url = "providers/#{team_id}/apps/#{app_id}/groups/#{group_id}/testers/#{tester_id}" response = request(:put) do |req| req.url url @@ -65,64 +144,37 @@ handle_response(response) end def delete_tester_from_group(group_id: nil, tester_id: nil, app_id: nil) assert_required_params(__method__, binding) + url = "providers/#{team_id}/apps/#{app_id}/groups/#{group_id}/testers/#{tester_id}" response = request(:delete) do |req| req.url url req.headers['Content-Type'] = 'application/json' end handle_response(response) end - def get_build(app_id: nil, build_id: nil) - assert_required_params(__method__, binding) - response = request(:get, "providers/#{team_id}/apps/#{app_id}/builds/#{build_id}") - handle_response(response) - end + ## + # @!group TestInfo + ## - def put_build(app_id: nil, build_id: nil, build: nil) + def put_testinfo(app_id: nil, testinfo: nil) assert_required_params(__method__, binding) - response = request(:put) do |req| - req.url "providers/#{team_id}/apps/#{app_id}/builds/#{build_id}" - req.body = build.to_json - req.headers['Content-Type'] = 'application/json' - end - handle_response(response) - end - def post_for_testflight_review(app_id: nil, build_id: nil, build: nil) - assert_required_params(__method__, binding) - response = request(:post) do |req| - req.url "providers/#{team_id}/apps/#{app_id}/builds/#{build_id}/review" - req.body = build.to_json - req.headers['Content-Type'] = 'application/json' - end - handle_response(response) - end - - def get_groups(app_id: nil) - assert_required_params(__method__, binding) - response = request(:get, "/testflight/v2/providers/#{team_id}/apps/#{app_id}/groups") - handle_response(response) - end - - def add_group_to_build(app_id: nil, group_id: nil, build_id: nil) - body = { - 'groupId' => group_id, - 'buildId' => build_id - } response = request(:put) do |req| - req.url "providers/#{team_id}/apps/#{app_id}/groups/#{group_id}/builds/#{build_id}" - req.body = body.to_json + req.url "providers/#{team_id}/apps/#{app_id}/testInfo" + req.body = testinfo.to_json req.headers['Content-Type'] = 'application/json' end handle_response(response) end + protected + def handle_response(response) - if (200..300).cover?(response.status) && response.body.empty? + if (200...300).cover?(response.status) && (response.body.nil? || response.body.empty?) return end unless response.body.kind_of?(Hash) raise UnexpectedResponse, response.body