Skip to content

Commit

Permalink
[spaceship] Initial support for updated review submissions flow (#19751)
Browse files Browse the repository at this point in the history
* feat: add support for review submissions and review submission items

* test: tunes client, review submission and review submission tests

* feat: add new app store version value ready for review

* chore: disable class length warning on app model

* chore: make submission parameters required
  • Loading branch information
valerio-castelli committed Jan 13, 2022
1 parent 576e76b commit 5931981
Show file tree
Hide file tree
Showing 18 changed files with 1,108 additions and 0 deletions.
2 changes: 2 additions & 0 deletions spaceship/lib/spaceship/connect_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@
require 'spaceship/connect_api/models/app_store_version_phased_release'
require 'spaceship/connect_api/models/app_store_version'
require 'spaceship/connect_api/models/idfa_declaration'
require 'spaceship/connect_api/models/review_submission'
require 'spaceship/connect_api/models/review_submission_item'
require 'spaceship/connect_api/models/reset_ratings_request'
require 'spaceship/connect_api/models/sandbox_tester'
require 'spaceship/connect_api/models/territory'
Expand Down
43 changes: 43 additions & 0 deletions spaceship/lib/spaceship/connect_api/models/app.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require_relative '../model'
require_relative './build'

# rubocop:disable Metrics/ClassLength
module Spaceship
class ConnectAPI
class App
Expand Down Expand Up @@ -414,6 +415,47 @@ def enable_educational_discount
})
end

#
# Review Submissions
#

def get_ready_review_submission(client: nil, platform:, includes: nil)
client ||= Spaceship::ConnectAPI
filter = {
state: [
Spaceship::ConnectAPI::ReviewSubmission::ReviewSubmissionState::READY_FOR_REVIEW
].join(","),
platform: platform
}

return get_review_submissions(client: client, filter: filter, includes: includes).first
end

def get_in_progress_review_submission(client: nil, platform:, includes: nil)
client ||= Spaceship::ConnectAPI
filter = {
state: [
Spaceship::ConnectAPI::ReviewSubmission::ReviewSubmissionState::WAITING_FOR_REVIEW
].join(","),
platform: platform
}

return get_review_submissions(client: client, filter: filter, includes: includes).first
end

# appStoreVersionForReview,items
def get_review_submissions(client: nil, filter: {}, includes: nil, limit: nil, sort: nil)
client ||= Spaceship::ConnectAPI
resps = client.get_review_submissions(app_id: id, filter: filter, includes: includes, limit: limit, sort: sort).all_pages
return resps.flat_map(&:to_models)
end

def create_review_submission(client: nil, platform:)
client ||= Spaceship::ConnectAPI
resp = client.post_review_submission(app_id: id, platform: platform)
return resp.to_models.first
end

#
# Users
#
Expand All @@ -434,3 +476,4 @@ def remove_users(client: nil, user_ids: nil)
end
end
end
# rubocop:enable Metrics/ClassLength
1 change: 1 addition & 0 deletions spaceship/lib/spaceship/connect_api/models/app_info.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ module AppStoreState
WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
DEVELOPER_REJECTED = "DEVELOPER_REJECTED"
DEVELOPER_REMOVED_FROM_SALE = "DEVELOPER_REMOVED_FROM_SALE"
READY_FOR_REVIEW = "READY_FOR_REVIEW"
REJECTED = "REJECTED"
PREPARE_FOR_SUBMISSION = "PREPARE_FOR_SUBMISSION"
METADATA_REJECTED = "METADATA_REJECTED"
Expand Down
73 changes: 73 additions & 0 deletions spaceship/lib/spaceship/connect_api/models/review_submission.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
require_relative '../model'
require_relative './review_submission_item'

module Spaceship
class ConnectAPI
class ReviewSubmission
include Spaceship::ConnectAPI::Model

attr_accessor :platform
attr_accessor :state
attr_accessor :submitted_date

attr_accessor :app_store_version_for_review
attr_accessor :items
attr_accessor :last_updated_by_actor
attr_accessor :submitted_by_actor

module ReviewSubmissionState
CANCELING = "CANCELING"
COMPLETE = "COMPLETE"
IN_REVIEW = "IN_REVIEW"
READY_FOR_REVIEW = "READY_FOR_REVIEW"
WAITING_FOR_REVIEW = "WAITING_FOR_REVIEW"
end

attr_mapping({
"platform" => "platform",
"state" => "state",
"submittedDate" => "submitted_date",

"appStoreVersionForReview" => "app_store_version_for_review",
"items" => "items",
"lastUpdatedByActor" => "last_updated_by_actor",
"submittedByActor" => "submitted_by_actor",
})

def self.type
return "reviewSubmissions"
end

#
# API
#

# appStoreVersionForReview,items,submittedByActor,lastUpdatedByActor
def self.get(client: nil, review_submission_id:, includes: nil)
client ||= Spaceship::ConnectAPI
resp = client.get_review_submission(review_submission_id: review_submission_id, includes: includes)
return resp.to_models.first
end

def submit_for_review(client: nil)
client ||= Spaceship::ConnectAPI
attributes = { submitted: true }
resp = client.patch_review_submission(review_submission_id: id, attributes: attributes)
return resp.to_models.first
end

def cancel_submission(client: nil)
client ||= Spaceship::ConnectAPI
attributes = { canceled: true }
resp = client.patch_review_submission(review_submission_id: id, attributes: attributes)
return resp.to_models.first
end

def add_app_store_version_to_review_items(client: nil, app_store_version_id:)
client ||= Spaceship::ConnectAPI
resp = client.post_review_submission_item(review_submission_id: id, app_store_version_id: app_store_version_id)
return resp.to_models.first
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
require_relative '../model'

module Spaceship
class ConnectAPI
class ReviewSubmissionItem
include Spaceship::ConnectAPI::Model

attr_accessor :state

attr_accessor :app_store_version_experiment
attr_accessor :app_store_version
attr_accessor :app_store_product_page_version
attr_accessor :app_event

attr_mapping({
"state" => "state",

"appStoreVersionExperiment" => "app_store_version_experiment",
"appStoreVersion" => "app_store_version",
"appCustomProductPageVersion" => "app_store_product_page_version",
"appEvent" => "app_event",
})

def self.type
return "reviewSubmissionItems"
end

#
# API
#

# appCustomProductPageVersion,appEvent,appStoreVersion,appStoreVersionExperiment
def self.all(client: nil, review_submission_id:, includes: nil, limit: nil, sort: nil)
client ||= Spaceship::ConnectAPI
resps = client.get_review_submission_items(review_submission_id: review_submission_id, includes: includes, limit: limit, sort: sort).all_pages
return resps.flat_map(&:to_models)
end
end
end
end
83 changes: 83 additions & 0 deletions spaceship/lib/spaceship/connect_api/tunes/tunes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1126,6 +1126,89 @@ def delete_idfa_declaration(idfa_declaration_id: nil)
tunes_request_client.delete("idfaDeclarations/#{idfa_declaration_id}", params)
end

#
# reviewSubmissions
#

def get_review_submissions(app_id:, filter: {}, includes: nil, limit: nil, sort: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
tunes_request_client.get("apps/#{app_id}/reviewSubmissions", params)
end

def get_review_submission(review_submission_id:, filter: {}, includes: nil, limit: nil, sort: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
tunes_request_client.get("reviewSubmissions/#{review_submission_id}", params)
end

def post_review_submission(app_id:, platform:)
body = {
data: {
type: "reviewSubmissions",
attributes: {
platform: platform
},
relationships: {
app: {
data: {
type: "apps",
id: app_id
}
}
}
}
}

tunes_request_client.post("reviewSubmissions", body)
end

def patch_review_submission(review_submission_id:, attributes: nil)
body = {
data: {
type: "reviewSubmissions",
id: review_submission_id,
attributes: attributes,
}
}

tunes_request_client.patch("reviewSubmissions/#{review_submission_id}", body)
end

#
# reviewSubmissionItems
#

def get_review_submission_items(review_submission_id:, filter: {}, includes: nil, limit: nil, sort: nil)
params = tunes_request_client.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
tunes_request_client.get("reviewSubmissions/#{review_submission_id}/items", params)
end

def post_review_submission_item(review_submission_id:, app_store_version_id: nil)
body = {
data: {
type: "reviewSubmissionItems",
relationships: {
reviewSubmission: {
data: {
type: "reviewSubmissions",
id: review_submission_id
}
}
}
}
}

unless app_store_version_id.nil?
body[:data][:relationships][:appStoreVersion] = {
data: {
type: "appStoreVersions",
id: app_store_version_id
}
}
end

tunes_request_client.post("reviewSubmissionItems", body)
end

#
# sandboxTesters
#
Expand Down
Loading

0 comments on commit 5931981

Please sign in to comment.