Skip to content

Commit 495cf4b

Browse files
committed
[Collections] Auth tokens need to be mutable
rdar://77095793
1 parent a5f7859 commit 495cf4b

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

Sources/PackageCollections/PackageCollections.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ public struct PackageCollections: PackageCollectionsProtocol {
2121
static let isSupportedPlatform = false
2222
#endif
2323

24-
private let configuration: Configuration
24+
var configuration: Configuration
2525
private let diagnosticsEngine: DiagnosticsEngine?
2626
private let storageContainer: (storage: Storage, owned: Bool)
2727
private let collectionProviders: [Model.CollectionSourceType: PackageCollectionProvider]
28-
private let metadataProvider: PackageMetadataProvider
28+
var metadataProvider: PackageMetadataProvider
2929

3030
private var storage: Storage {
3131
self.storageContainer.storage
@@ -67,6 +67,14 @@ public struct PackageCollections: PackageCollectionsProtocol {
6767
}
6868
}
6969

70+
public mutating func updateAuthTokens(_ authTokens: [AuthTokenType: String]?) {
71+
self.configuration.authTokens = authTokens
72+
if var metadataProvider = self.metadataProvider as? GitHubPackageMetadataProvider {
73+
metadataProvider.configuration.authTokens = authTokens
74+
self.metadataProvider = metadataProvider
75+
}
76+
}
77+
7078
// MARK: - Collections
7179

7280
public func listCollections(identifiers: Set<PackageCollectionsModel.CollectionIdentifier>? = nil,

Tests/PackageCollectionsTests/PackageCollectionsTests.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,35 @@ import TSCBasic
1818
import TSCUtility
1919

2020
final class PackageCollectionsTests: XCTestCase {
21+
func testUpdateAuthTokens() throws {
22+
let configuration = PackageCollections.Configuration()
23+
let storage = makeMockStorage()
24+
defer { XCTAssertNoThrow(try storage.close()) }
25+
26+
let metadataProviderConfig = GitHubPackageMetadataProvider.Configuration(cacheTTLInSeconds: -1)
27+
let metadataProvider = GitHubPackageMetadataProvider(configuration: metadataProviderConfig)
28+
var packageCollections = PackageCollections(configuration: configuration, storage: storage, collectionProviders: [:], metadataProvider: metadataProvider)
29+
30+
XCTAssertNil(packageCollections.configuration.authTokens)
31+
do {
32+
guard let githubMetadataProvider = packageCollections.metadataProvider as? GitHubPackageMetadataProvider else {
33+
return XCTFail("Expected GitHubPackageMetadataProvider")
34+
}
35+
XCTAssertNil(githubMetadataProvider.configuration.authTokens)
36+
}
37+
38+
let authTokens: [AuthTokenType: String] = [.github("github.test"): "topsekret"]
39+
packageCollections.updateAuthTokens(authTokens)
40+
41+
XCTAssertEqual(authTokens, packageCollections.configuration.authTokens)
42+
do {
43+
guard let githubMetadataProvider = packageCollections.metadataProvider as? GitHubPackageMetadataProvider else {
44+
return XCTFail("Expected GitHubPackageMetadataProvider")
45+
}
46+
XCTAssertEqual(authTokens, githubMetadataProvider.configuration.authTokens)
47+
}
48+
}
49+
2150
func testBasicRegistration() throws {
2251
try skipIfUnsupportedPlatform()
2352

0 commit comments

Comments
 (0)