@@ -16,6 +16,7 @@ import Testing
1616
1717@testable import App
1818
19+ import AsyncHTTPClient
1920import Dependencies
2021import Fluent
2122import NIOConcurrencyHelpers
@@ -677,6 +678,7 @@ extension AllTests.BuildTriggerTests {
677678 }
678679
679680 @Test func TriggerBuilds_triggerBuilds_trimming( ) async throws {
681+ // Ensure we trim builds as part of triggering
680682 try await withDependencies {
681683 $0. buildSystem. getStatusCount = { @Sendable _ in 100 }
682684 $0. environment. allowBuildTriggers = { true }
@@ -689,7 +691,6 @@ extension AllTests.BuildTriggerTests {
689691 $0. environment. random = { @Sendable _ in 0 }
690692 $0. environment. siteURL = { " http://example.com " }
691693 } operation: {
692- // Ensure we trim builds as part of triggering
693694 try await withSPIApp { app in
694695 // setup
695696 let p = Package ( id: . id0, url: " 2 " )
@@ -714,7 +715,6 @@ extension AllTests.BuildTriggerTests {
714715 }
715716
716717 @Test func TriggerBuilds_triggerBuilds_error( ) async throws {
717- // Ensure we trim builds as part of triggering
718718 let triggerCount = QueueIsolated ( 0 )
719719 try await withDependencies {
720720 $0. buildSystem. getStatusCount = { @Sendable _ in 100 }
@@ -730,13 +730,15 @@ extension AllTests.BuildTriggerTests {
730730 $0. environment. siteURL = { " http://example.com " }
731731 $0. buildSystem. triggerBuild = BuildSystemClient . liveValue. triggerBuild
732732 $0. httpClient. post = { @Sendable _, _, body in
733- defer { triggerCount. increment ( ) }
734- // let the 5th trigger succeed to ensure we don't early out on errors
735- if triggerCount. value == 5 {
736- return . created( webUrl: " http://web_url " )
737- } else {
738- struct Response : Content { var message : String }
739- return try . tooManyRequests( jsonEncode: Response ( message: " Too many pipelines created in the last minute. Try again later. " ) )
733+ return try triggerCount. withValue { triggerCount -> HTTPClient . Response in
734+ defer { triggerCount += 1 }
735+ // Let one trigger not fail
736+ if triggerCount == 5 {
737+ return . created( webUrl: " http://web_url " )
738+ } else {
739+ struct Response : Content { var message : String }
740+ return try . tooManyRequests( jsonEncode: Response ( message: " Too many pipelines created in the last minute. Try again later. " ) )
741+ }
740742 }
741743 }
742744 } operation: {
@@ -750,6 +752,9 @@ extension AllTests.BuildTriggerTests {
750752 // MUT
751753 try await triggerBuilds ( on: app. db, mode: . packageId( . id0, force: false ) )
752754
755+ // Ensure all triggers were attempted
756+ #expect( triggerCount. value == 32 )
757+
753758 // validate that one build record is saved, for the successful trigger
754759 let count = try await Build . query ( on: app. db) . count ( )
755760 #expect( count == 1 )
0 commit comments