Skip to content

Commit 5abd415

Browse files
committed
Fix tests
1 parent a8c52af commit 5abd415

File tree

1 file changed

+114
-84
lines changed

1 file changed

+114
-84
lines changed

Tests/AppTests/BuildTriggerTests.swift

Lines changed: 114 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -32,40 +32,21 @@ class BuildTriggerTests: AppTestCase {
3232
}
3333

3434
func test_fetchBuildCandidates_missingBuilds() async throws {
35-
// setup
36-
let pkgIdComplete = UUID()
37-
let pkgIdIncomplete1 = UUID()
38-
let pkgIdIncomplete2 = UUID()
39-
do { // save package with all builds
40-
let p = Package(id: pkgIdComplete, url: pkgIdComplete.uuidString.url)
41-
try await p.save(on: app.db)
42-
let v = try Version(package: p,
43-
latest: .defaultBranch,
44-
reference: .branch("main"))
45-
try await v.save(on: app.db)
46-
for pair in BuildPair.all {
47-
try await Build(id: UUID(),
48-
version: v,
49-
platform: pair.platform,
50-
status: .ok,
51-
swiftVersion: pair.swiftVersion)
52-
.save(on: app.db)
53-
}
54-
}
55-
// save two packages with partially completed builds
56-
for id in [pkgIdIncomplete1, pkgIdIncomplete2] {
57-
let p = Package(id: id, url: id.uuidString.url)
58-
try await p.save(on: app.db)
59-
for kind in [Version.Kind.defaultBranch, .release] {
35+
try await withDependencies {
36+
$0.environment.buildTriggerAllowList = { [] }
37+
} operation: {
38+
// setup
39+
let pkgIdComplete = UUID()
40+
let pkgIdIncomplete1 = UUID()
41+
let pkgIdIncomplete2 = UUID()
42+
do { // save package with all builds
43+
let p = Package(id: pkgIdComplete, url: pkgIdComplete.uuidString.url)
44+
try await p.save(on: app.db)
6045
let v = try Version(package: p,
61-
latest: kind,
62-
reference: kind == .release
63-
? .tag(1, 2, 3)
64-
: .branch("main"))
46+
latest: .defaultBranch,
47+
reference: .branch("main"))
6548
try await v.save(on: app.db)
66-
for pair in BuildPair.all
67-
.dropFirst() // skip one platform to create a build gap
68-
{
49+
for pair in BuildPair.all {
6950
try await Build(id: UUID(),
7051
version: v,
7152
platform: pair.platform,
@@ -74,79 +55,110 @@ class BuildTriggerTests: AppTestCase {
7455
.save(on: app.db)
7556
}
7657
}
77-
}
58+
// save two packages with partially completed builds
59+
for id in [pkgIdIncomplete1, pkgIdIncomplete2] {
60+
let p = Package(id: id, url: id.uuidString.url)
61+
try await p.save(on: app.db)
62+
for kind in [Version.Kind.defaultBranch, .release] {
63+
let v = try Version(package: p,
64+
latest: kind,
65+
reference: kind == .release
66+
? .tag(1, 2, 3)
67+
: .branch("main"))
68+
try await v.save(on: app.db)
69+
for pair in BuildPair.all
70+
.dropFirst() // skip one platform to create a build gap
71+
{
72+
try await Build(id: UUID(),
73+
version: v,
74+
platform: pair.platform,
75+
status: .ok,
76+
swiftVersion: pair.swiftVersion)
77+
.save(on: app.db)
78+
}
79+
}
80+
}
7881

79-
// MUT
80-
let ids = try await fetchBuildCandidates(app.db)
82+
// MUT
83+
let ids = try await fetchBuildCandidates(app.db)
8184

82-
// validate
83-
XCTAssertEqual(ids, [pkgIdIncomplete1, pkgIdIncomplete2])
85+
// validate
86+
XCTAssertEqual(ids, [pkgIdIncomplete1, pkgIdIncomplete2])
87+
}
8488
}
8589

8690
func test_fetchBuildCandidates_noBuilds() async throws {
8791
// Test finding build candidate without any builds (essentially
8892
// testing the `LEFT` in `LEFT JOIN builds`)
89-
// setup
90-
// save package without any builds
91-
let pkgId = UUID()
92-
let p = Package(id: pkgId, url: pkgId.uuidString.url)
93-
try await p.save(on: app.db)
94-
for kind in [Version.Kind.defaultBranch, .release] {
95-
let v = try Version(package: p,
96-
latest: kind,
97-
reference: kind == .release
98-
? .tag(1, 2, 3)
99-
: .branch("main"))
100-
try await v.save(on: app.db)
101-
}
93+
try await withDependencies {
94+
$0.environment.buildTriggerAllowList = { [] }
95+
} operation: {
96+
// setup
97+
// save package without any builds
98+
let pkgId = UUID()
99+
let p = Package(id: pkgId, url: pkgId.uuidString.url)
100+
try await p.save(on: app.db)
101+
for kind in [Version.Kind.defaultBranch, .release] {
102+
let v = try Version(package: p,
103+
latest: kind,
104+
reference: kind == .release
105+
? .tag(1, 2, 3)
106+
: .branch("main"))
107+
try await v.save(on: app.db)
108+
}
102109

103-
// MUT
104-
let ids = try await fetchBuildCandidates(app.db)
110+
// MUT
111+
let ids = try await fetchBuildCandidates(app.db)
105112

106-
// validate
107-
XCTAssertEqual(ids, [pkgId])
113+
// validate
114+
XCTAssertEqual(ids, [pkgId])
115+
}
108116
}
109117

110118
func test_fetchBuildCandidates_exceptLatestSwiftVersion() async throws {
111-
// setup
112-
do { // save package with just latest Swift version builds missing
113-
let p = Package(id: .id1, url: "1")
114-
try await p.save(on: app.db)
115-
let v = try Version(id: .init(),
116-
package: p,
117-
latest: .release,
118-
reference: .tag(1, 2, 3))
119-
try await v.save(on: app.db)
120-
for platform in Build.Platform.allActive {
121-
for swiftVersion in SwiftVersion
122-
.allActive
123-
// skip latest Swift version build
124-
.filter({ $0 != .latest }) {
125-
try await Build(id: .init(),
119+
try await withDependencies {
120+
$0.environment.buildTriggerAllowList = { [] }
121+
} operation: {
122+
// setup
123+
do { // save package with just latest Swift version builds missing
124+
let p = Package(id: .id1, url: "1")
125+
try await p.save(on: app.db)
126+
let v = try Version(id: .init(),
127+
package: p,
128+
latest: .release,
129+
reference: .tag(1, 2, 3))
130+
try await v.save(on: app.db)
131+
for platform in Build.Platform.allActive {
132+
for swiftVersion in SwiftVersion
133+
.allActive
134+
// skip latest Swift version build
135+
.filter({ $0 != .latest }) {
136+
try await Build(id: .init(),
126137
version: v,
127138
platform: platform,
128139
status: .ok,
129140
swiftVersion: swiftVersion)
130141
.save(on: app.db)
142+
}
131143
}
132144
}
133-
}
134-
do { // save package without any builds
135-
let p = Package(id: .id2, url: "2")
136-
try await p.save(on: app.db)
137-
let v = try Version(id: .id3,
138-
package: p,
139-
latest: .release,
140-
reference: .tag(1, 2, 3))
141-
try await v.save(on: app.db)
142-
}
145+
do { // save package without any builds
146+
let p = Package(id: .id2, url: "2")
147+
try await p.save(on: app.db)
148+
let v = try Version(id: .id3,
149+
package: p,
150+
latest: .release,
151+
reference: .tag(1, 2, 3))
152+
try await v.save(on: app.db)
153+
}
143154

144-
// MUT
145-
let ids = try await fetchBuildCandidates(app.db, withLatestSwiftVersion: false)
155+
// MUT
156+
let ids = try await fetchBuildCandidates(app.db, withLatestSwiftVersion: false)
146157

147-
// validate
148-
// Only package with missing non-latest Swift version builds (.id2) must be selected
149-
XCTAssertEqual(ids, [.id2])
158+
// validate
159+
// Only package with missing non-latest Swift version builds (.id2) must be selected
160+
XCTAssertEqual(ids, [.id2])
161+
}
150162
}
151163

152164
func test_fetchBuildCandidates_priorityIDs() async throws {
@@ -395,6 +407,7 @@ class BuildTriggerTests: AppTestCase {
395407
$0.environment.awsDocsBucket = { "awsDocsBucket" }
396408
$0.environment.builderToken = { "builder token" }
397409
$0.environment.buildTimeout = { 10 }
410+
$0.environment.buildTriggerAllowList = { [] }
398411
} operation: {
399412
// Explicitly test the full range of all currently triggered platforms and swift versions
400413
// setup
@@ -557,6 +570,9 @@ class BuildTriggerTests: AppTestCase {
557570
$0.environment.awsDocsBucket = { "awsDocsBucket" }
558571
$0.environment.builderToken = { "builder token" }
559572
$0.environment.buildTimeout = { 10 }
573+
$0.environment.buildTriggerAllowList = { [] }
574+
$0.environment.buildTriggerDownscaling = { 1 }
575+
$0.environment.random = { @Sendable _ in 0 }
560576
} operation: {
561577
// Ensure we respect the pipeline limit when triggering builds
562578
// setup
@@ -670,6 +686,10 @@ class BuildTriggerTests: AppTestCase {
670686
$0.environment.awsDocsBucket = { "awsDocsBucket" }
671687
$0.environment.builderToken = { "builder token" }
672688
$0.environment.buildTimeout = { 10 }
689+
$0.environment.buildTriggerAllowList = { [] }
690+
$0.environment.buildTriggerDownscaling = { 1 }
691+
$0.environment.buildTriggerLatestSwiftVersionDownscaling = { 1 }
692+
$0.environment.random = { @Sendable _ in 0 }
673693
} operation: {
674694
// Ensure we respect the pipeline limit when triggering builds for multiple package ids
675695
// setup
@@ -720,6 +740,9 @@ class BuildTriggerTests: AppTestCase {
720740
$0.environment.allowBuildTriggers = { true }
721741
$0.environment.awsDocsBucket = { "awsDocsBucket" }
722742
$0.environment.builderToken = { "builder token" }
743+
$0.environment.buildTriggerAllowList = { [] }
744+
$0.environment.buildTriggerDownscaling = { 1 }
745+
$0.environment.random = { @Sendable _ in 0 }
723746
} operation: {
724747
// Ensure we trim builds as part of triggering
725748
// setup
@@ -757,6 +780,9 @@ class BuildTriggerTests: AppTestCase {
757780
$0.environment.awsDocsBucket = { "awsDocsBucket" }
758781
$0.environment.builderToken = { "builder token" }
759782
$0.environment.buildTimeout = { 10 }
783+
$0.environment.buildTriggerAllowList = { [] }
784+
$0.environment.buildTriggerDownscaling = { 1 }
785+
$0.environment.random = { @Sendable _ in 0 }
760786
} operation: {
761787
// Ensure we trim builds as part of triggering
762788
// setup
@@ -882,6 +908,9 @@ class BuildTriggerTests: AppTestCase {
882908
$0.environment.awsDocsBucket = { "awsDocsBucket" }
883909
$0.environment.builderToken = { "builder token" }
884910
$0.environment.buildTimeout = { 10 }
911+
$0.environment.buildTriggerAllowList = { [] }
912+
$0.environment.buildTriggerDownscaling = { 1 }
913+
$0.environment.random = { @Sendable _ in 0 }
885914
} operation: {
886915
// Ensure don't trigger if the override is off
887916
// setup
@@ -957,6 +986,7 @@ class BuildTriggerTests: AppTestCase {
957986
$0.environment.awsDocsBucket = { "awsDocsBucket" }
958987
$0.environment.builderToken = { "builder token" }
959988
$0.environment.buildTimeout = { 10 }
989+
$0.environment.buildTriggerAllowList = { [] }
960990
$0.environment.buildTriggerDownscaling = { 0.05 } // 5% downscaling rate
961991
} operation: {
962992
// Test build trigger downscaling behaviour

0 commit comments

Comments
 (0)