pilot/lib/pilot/tester_manager.rb in fastlane-2.28.2 vs pilot/lib/pilot/tester_manager.rb in fastlane-2.28.3

- old
+ new

@@ -5,44 +5,43 @@ module Pilot class TesterManager < Manager def add_tester(options) start(options) - if config[:groups] - UI.important("Currently pilot doesn't support groups yet, we're working on restoring that functionality") - config[:groups] = nil - end - begin - tester = Spaceship::Tunes::Tester::Internal.find(config[:email]) - tester ||= Spaceship::Tunes::Tester::External.find(config[:email]) - + tester = Spaceship::Tunes::Tester::External.find(config[:email]) if tester UI.success("Existing tester #{tester.email}") else + # make sure the user isn't already an internal tester, because we don't support those + internal_tester = Spaceship::Tunes::Tester::Internal.find(config[:email]) + UI.user_error!("#{internal_tester.email} is an internal tester; pilot does not support internal testers") unless internal_tester.nil? + tester = Spaceship::Tunes::Tester::External.create!(email: config[:email], first_name: config[:first_name], last_name: config[:last_name]) - UI.success("Successfully invited tester: #{tester.email}") + UI.success("Successfully added tester: #{tester.email} to your account") end - - app_filter = (config[:apple_id] || config[:app_identifier]) - if app_filter - begin - app = Spaceship::Application.find(app_filter) - UI.user_error!("Couldn't find app with '#{app_filter}'") unless app - app.default_external_group.add_tester!(tester) - UI.success("Successfully added tester to app #{app_filter}") - rescue => ex - UI.error("Could not add #{tester.email} to app: #{ex}") - raise ex - end - end rescue => ex UI.error("Could not create tester #{config[:email]}") raise ex end + + app_filter = (config[:apple_id] || config[:app_identifier]) + if app_filter + begin + app = Spaceship::Application.find(app_filter) + UI.user_error!("Couldn't find app with '#{app_filter}'") unless app + + groups = add_tester_to_groups!(tester: tester, app: app, groups: config[:groups]) + group_names = groups.map(&:name).join(", ") + UI.success("Successfully added tester to app #{app_filter} in group(s) #{group_names}") + rescue => ex + UI.error("Could not add #{tester.email} to app: #{app.name}") + raise ex + end + end end def find_tester(options) start(options) @@ -57,30 +56,33 @@ def remove_tester(options) start(options) tester = Spaceship::Tunes::Tester::External.find(config[:email]) - tester ||= Spaceship::Tunes::Tester::Internal.find(config[:email]) if tester app_filter = (config[:apple_id] || config[:app_identifier]) if app_filter begin app = Spaceship::Application.find(app_filter) UI.user_error!("Couldn't find app with '#{app_filter}'") unless app - app.default_external_group.remove_tester!(tester) - UI.success("Successfully removed tester #{tester.email} from app #{app_filter}") + groups = remove_tester_from_groups!(tester: tester, app: app, groups: config[:groups]) + group_names = groups.map(&:name).join(", ") + UI.success("Successfully removed tester #{tester.email} from app #{app_filter} in group(s) #{group_names}") rescue => ex UI.error("Could not remove #{tester.email} from app: #{ex}") raise ex end else tester.delete! UI.success("Successfully removed tester #{tester.email}") end else - UI.error("Tester not found: #{config[:email]}") + internal_tester = Spaceship::Tunes::Tester::Internal.find(config[:email]) + UI.user_error!("#{internal_tester.email} is an internal tester; pilot does not support internal testers") unless internal_tester.nil? + + UI.user_error!("Tester not found: #{config[:email]}") end end def list_testers(options) start(options) @@ -91,10 +93,36 @@ else list_testers_global end end - # private + private + + def perform_for_groups_in_app(app: nil, groups: nil, &block) + if groups.nil? + default_external_group = app.default_external_group + if default_external_group.nil? + UI.user_error!("The app #{app.name} does not have a default external group. Please make sure to pass group names to the `:groups` option.") + end + test_flight_groups = [default_external_group] + else + test_flight_groups = Spaceship::TestFlight::Group.filter_groups(app_id: app.apple_id) do |group| + groups.include?(group.name) + end + + UI.user_error!("There are no groups available matching the names passed to the `:groups` option.") if test_flight_groups.empty? + end + + test_flight_groups.each(&block) + end + + def add_tester_to_groups!(tester: nil, app: nil, groups: nil) + perform_for_groups_in_app(app: app, groups: groups) { |group| group.add_tester!(tester) } + end + + def remove_tester_from_groups!(tester: nil, app: nil, groups: nil) + perform_for_groups_in_app(app: app, groups: groups) { |group| group.remove_tester!(tester) } + end def list_testers_by_app(app_filter) app = Spaceship::Application.find(app_filter) UI.user_error!("Couldn't find app with '#{app_filter}'") unless app