Skip to content

Commit 532459e

Browse files
committed
Add sync beta testers function to PushBetaGroupsCommand
1 parent b394db2 commit 532459e

1 file changed

Lines changed: 56 additions & 2 deletions

File tree

Sources/AppStoreConnectCLI/Commands/TestFlight/BetaGroups/Sync/PushBetaGroupsCommand.swift

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import ArgumentParser
44
import FileSystem
55
import Foundation
66
import struct Model.BetaGroup
7+
import struct Model.BetaTester
78

89
struct PushBetaGroupsCommand: CommonParsableCommand {
910

@@ -28,12 +29,45 @@ struct PushBetaGroupsCommand: CommonParsableCommand {
2829

2930
let resourceProcessor = BetaGroupProcessor(path: .folder(path: inputPath))
3031

31-
let serverGroups = try service.pullBetaGroups().map { $0.betaGroup }
32+
let serverGroupsWithTesters = try service.pullBetaGroups()
3233
let localGroups = try resourceProcessor.read()
3334

35+
// Sync Beta Testers
36+
let localGroupWithTesters = try resourceProcessor.readGroupAndTesters()
37+
38+
try localGroupWithTesters.forEach {
39+
let localGroupId = $0.betaGroup.id
40+
let localTesters = $0.testers
41+
42+
let serverTesters = serverGroupsWithTesters.first {
43+
$0.betaGroup.id == localGroupId
44+
}?.testers ?? []
45+
46+
let testerStrategies = SyncResourceComparator(
47+
localResources: localTesters,
48+
serverResources: serverTesters
49+
)
50+
.compare()
51+
52+
let renderer = Renderers.SyncResultRenderer<BetaTester>()
53+
54+
if dryRun {
55+
renderer.render(testerStrategies, isDryRun: true)
56+
} else {
57+
let renderer = Renderers.SyncResultRenderer<BetaTester>()
58+
59+
try testerStrategies.forEach {
60+
try syncTester(with: service, groupId: localGroupId!, strategies: $0)
61+
62+
renderer.render($0, isDryRun: false)
63+
}
64+
}
65+
}
66+
67+
// Sync Beta Groups
3468
let strategies = SyncResourceComparator(
3569
localResources: localGroups,
36-
serverResources: serverGroups
70+
serverResources: serverGroupsWithTesters.map { $0.betaGroup }
3771
)
3872
.compare()
3973

@@ -72,4 +106,24 @@ struct PushBetaGroupsCommand: CommonParsableCommand {
72106
}
73107
}
74108

109+
func syncTester(
110+
with service: AppStoreConnectService,
111+
groupId: String,
112+
strategies: SyncStrategy<BetaTester>
113+
) throws {
114+
switch strategies {
115+
case .create(let tester):
116+
try service.inviteBetaTesterToGroups(
117+
firstName: tester.firstName,
118+
lastName: tester.lastName,
119+
email: tester.email!,
120+
groupIds: [groupId]
121+
)
122+
case .update:
123+
print("Update single beta tester is not supported.")
124+
case .delete(let tester):
125+
try service.removeTesterFromGroups(email: tester.email!, groupIds: [groupId])
126+
}
127+
}
128+
75129
}

0 commit comments

Comments
 (0)