diff --git a/Package.swift b/Package.swift index d80bb07..cbcc498 100644 --- a/Package.swift +++ b/Package.swift @@ -15,7 +15,31 @@ let package = Package( .library( name: "GitHub", targets: ["GitHub"] - ) + ), + .library( + name: "GitHub OAuth", + targets: ["GitHub OAuth"] + ), + .library( + name: "GitHub Organizations", + targets: ["GitHub Organizations"] + ), + .library( + name: "GitHub Repositories", + targets: ["GitHub Repositories"] + ), + .library( + name: "GitHub Stargazers", + targets: ["GitHub Stargazers"] + ), + .library( + name: "GitHub Traffic", + targets: ["GitHub Traffic"] + ), + .library( + name: "GitHub Users", + targets: ["GitHub Users"] + ), ], dependencies: [ .package( @@ -26,14 +50,45 @@ let package = Package( url: "https://github.com/swift-primitives/swift-either-primitives.git", branch: "main" ), + .package( + url: "https://github.com/swift-ietf/swift-rfc-3986.git", + branch: "main" + ), .package( url: "https://github.com/swift-standards/swift-github-standard.git", branch: "main" - ) + ), ], targets: [ .target( name: "GitHub", + dependencies: [ + .target(name: "GitHub OAuth"), + .target(name: "GitHub Organizations"), + .target(name: "GitHub Repositories"), + .target(name: "GitHub Stargazers"), + .target(name: "GitHub Traffic"), + .target(name: "GitHub Users"), + ] + ), + .target( + name: "GitHub OAuth", + dependencies: [ + .product( + name: "GitHub Standard", + package: "swift-github-standard" + ) + ] + ), + .testTarget( + name: "GitHub OAuth Core Tests", + dependencies: [ + .target(name: "GitHub OAuth"), + .product(name: "RFC 3986", package: "swift-rfc-3986"), + ] + ), + .target( + name: "GitHub Organizations", dependencies: [ .product( name: "Async Lifecycle Primitives", @@ -43,6 +98,19 @@ let package = Package( name: "Either Primitives", package: "swift-either-primitives" ), + .product( + name: "GitHub Standard", + package: "swift-github-standard" + ), + ] + ), + .testTarget( + name: "GitHub Organizations Core Tests", + dependencies: [.target(name: "GitHub Organizations")] + ), + .target( + name: "GitHub Repositories", + dependencies: [ .product( name: "GitHub Standard", package: "swift-github-standard" @@ -50,8 +118,63 @@ let package = Package( ] ), .testTarget( - name: "GitHub Core Tests", - dependencies: ["GitHub"] + name: "GitHub Repositories Core Tests", + dependencies: [.target(name: "GitHub Repositories")] + ), + .target( + name: "GitHub Stargazers", + dependencies: [ + .product( + name: "Async Lifecycle Primitives", + package: "swift-async-primitives" + ), + .product( + name: "Either Primitives", + package: "swift-either-primitives" + ), + .product( + name: "GitHub Standard", + package: "swift-github-standard" + ), + ] + ), + .testTarget( + name: "GitHub Stargazers Core Tests", + dependencies: [.target(name: "GitHub Stargazers")] + ), + .target( + name: "GitHub Traffic", + dependencies: [ + .product( + name: "GitHub Standard", + package: "swift-github-standard" + ) + ] + ), + .testTarget( + name: "GitHub Traffic Core Tests", + dependencies: [.target(name: "GitHub Traffic")] + ), + .target( + name: "GitHub Users", + dependencies: [ + .product( + name: "Async Lifecycle Primitives", + package: "swift-async-primitives" + ), + .product( + name: "Either Primitives", + package: "swift-either-primitives" + ), + .product( + name: "GitHub Standard", + package: "swift-github-standard" + ), + ] + ), + .testTarget( + name: "GitHub Users Core Tests", + dependencies: [.target(name: "GitHub Users")] ), ], swiftLanguageModes: [.v6] diff --git a/README.md b/README.md index ac4ef49..24c1037 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,12 @@ persistence, or application policy. | Product | Module | Purpose | | --- | --- | --- | | GitHub | `GitHub` | Typed one-call clients and bounded paginated traversals | +| GitHub OAuth | `GitHub_OAuth` | Authorization and token exchange | +| GitHub Organizations | `GitHub_Organizations` | Organization repository listing and bounded traversal | +| GitHub Repositories | `GitHub_Repositories` | Repository lookup and content retrieval | +| GitHub Stargazers | `GitHub_Stargazers` | Timestamped stargazer listing and bounded traversal | +| GitHub Traffic | `GitHub_Traffic` | Repository views, clones, paths, and referrers | +| GitHub Users | `GitHub_Users` | Authenticated-user profile, emails, and repository listing | ## Installation @@ -38,6 +44,22 @@ dependencies: [ ) ``` +Each resource is also its own product, so a consumer that only needs one +resource can depend on it directly instead of the `GitHub` umbrella: + +```swift +.target( + name: "YourTarget", + dependencies: [ + .product(name: "GitHub Traffic", package: "swift-github") + ] +) +``` + +The six per-resource products are `GitHub OAuth`, `GitHub Organizations`, +`GitHub Repositories`, `GitHub Stargazers`, `GitHub Traffic`, and +`GitHub Users` — see Products above. + ## Usage Clients are generic over their typed failure: @@ -83,8 +105,10 @@ in Aggregating views, clones, paths, and referrers into an application snapshot is application policy and is intentionally outside this package. -No deprecated `GitHub Traffic`, `GitHub Stargazers`, or -`GitHub Repositories` compatibility products are provided. +`GitHub Traffic`, `GitHub Stargazers`, and `GitHub Repositories` are +first-class per-resource products (see Products above) that a consumer can +depend on directly. They are not deprecated compatibility shims for the +`GitHub` umbrella. ## Error Handling diff --git a/Sources/GitHub/GitHub.OAuth.Authorization.Client.swift b/Sources/GitHub OAuth/GitHub.OAuth.Authorization.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.OAuth.Authorization.Client.swift rename to Sources/GitHub OAuth/GitHub.OAuth.Authorization.Client.swift diff --git a/Sources/GitHub/GitHub.OAuth.Token.Exchange.Client.swift b/Sources/GitHub OAuth/GitHub.OAuth.Token.Exchange.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.OAuth.Token.Exchange.Client.swift rename to Sources/GitHub OAuth/GitHub.OAuth.Token.Exchange.Client.swift diff --git a/Sources/GitHub OAuth/exports.swift b/Sources/GitHub OAuth/exports.swift new file mode 100644 index 0000000..a24ac5e --- /dev/null +++ b/Sources/GitHub OAuth/exports.swift @@ -0,0 +1 @@ +@_exported public import GitHub_Standard diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Client+all.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Client+all.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Client+all.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Client+all.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Client.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Client.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Client.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Page.Error.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Page.Error.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Page.Error.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Page.Error.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Page.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Page.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Page.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Page.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Traversal.Duplicate.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Duplicate.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Traversal.Duplicate.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Duplicate.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Traversal.Error.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Error.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Traversal.Error.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Error.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Traversal.Limit.Items.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Limit.Items.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Traversal.Limit.Items.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Limit.Items.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Traversal.Limit.Pages.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Limit.Pages.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Traversal.Limit.Pages.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Limit.Pages.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Traversal.Limit.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Limit.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Traversal.Limit.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Limit.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Traversal.Order.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Order.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Traversal.Order.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.Order.swift diff --git a/Sources/GitHub/GitHub.Organization.Repositories.Traversal.swift b/Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.swift similarity index 100% rename from Sources/GitHub/GitHub.Organization.Repositories.Traversal.swift rename to Sources/GitHub Organizations/GitHub.Organization.Repositories.Traversal.swift diff --git a/Sources/GitHub Organizations/exports.swift b/Sources/GitHub Organizations/exports.swift new file mode 100644 index 0000000..0a13c58 --- /dev/null +++ b/Sources/GitHub Organizations/exports.swift @@ -0,0 +1,3 @@ +@_exported public import Async_Lifecycle_Primitives +@_exported public import Either_Primitives +@_exported public import GitHub_Standard diff --git a/Sources/GitHub/GitHub.Repository.Content.Client.swift b/Sources/GitHub Repositories/GitHub.Repository.Content.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Content.Client.swift rename to Sources/GitHub Repositories/GitHub.Repository.Content.Client.swift diff --git a/Sources/GitHub/GitHub.Repository.Get.Client.swift b/Sources/GitHub Repositories/GitHub.Repository.Get.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Get.Client.swift rename to Sources/GitHub Repositories/GitHub.Repository.Get.Client.swift diff --git a/Sources/GitHub Repositories/exports.swift b/Sources/GitHub Repositories/exports.swift index c1538fc..a24ac5e 100644 --- a/Sources/GitHub Repositories/exports.swift +++ b/Sources/GitHub Repositories/exports.swift @@ -1,2 +1 @@ -@_exported import GitHub_Repositories_Live -@_exported import GitHub_Shared +@_exported public import GitHub_Standard diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Client+all.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Client+all.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Client+all.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Client+all.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Client.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Client.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Client.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Page.Error.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Page.Error.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Page.Error.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Page.Error.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Page.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Page.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Page.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Page.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Error.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Error.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Error.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Error.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Limit.Items.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Limit.Items.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Limit.Items.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Limit.Items.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Limit.Pages.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Limit.Pages.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Limit.Pages.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Limit.Pages.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Limit.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Limit.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Traversal.Limit.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.Limit.swift diff --git a/Sources/GitHub/GitHub.Repository.Stargazers.Traversal.swift b/Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Stargazers.Traversal.swift rename to Sources/GitHub Stargazers/GitHub.Repository.Stargazers.Traversal.swift diff --git a/Sources/GitHub Stargazers/exports.swift b/Sources/GitHub Stargazers/exports.swift new file mode 100644 index 0000000..0a13c58 --- /dev/null +++ b/Sources/GitHub Stargazers/exports.swift @@ -0,0 +1,3 @@ +@_exported public import Async_Lifecycle_Primitives +@_exported public import Either_Primitives +@_exported public import GitHub_Standard diff --git a/Sources/GitHub/GitHub.Repository.Traffic.Client.swift b/Sources/GitHub Traffic/GitHub.Repository.Traffic.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.Repository.Traffic.Client.swift rename to Sources/GitHub Traffic/GitHub.Repository.Traffic.Client.swift diff --git a/Sources/GitHub Traffic/exports.swift b/Sources/GitHub Traffic/exports.swift new file mode 100644 index 0000000..a24ac5e --- /dev/null +++ b/Sources/GitHub Traffic/exports.swift @@ -0,0 +1 @@ +@_exported public import GitHub_Standard diff --git a/Sources/GitHub/GitHub.User.Authenticated.Emails.List.Client.swift b/Sources/GitHub Users/GitHub.User.Authenticated.Emails.List.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Authenticated.Emails.List.Client.swift rename to Sources/GitHub Users/GitHub.User.Authenticated.Emails.List.Client.swift diff --git a/Sources/GitHub/GitHub.User.Authenticated.Get.Client.swift b/Sources/GitHub Users/GitHub.User.Authenticated.Get.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Authenticated.Get.Client.swift rename to Sources/GitHub Users/GitHub.User.Authenticated.Get.Client.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Client+all.swift b/Sources/GitHub Users/GitHub.User.Repositories.Client+all.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Client+all.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Client+all.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Client.swift b/Sources/GitHub Users/GitHub.User.Repositories.Client.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Client.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Client.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Page.Error.swift b/Sources/GitHub Users/GitHub.User.Repositories.Page.Error.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Page.Error.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Page.Error.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Page.swift b/Sources/GitHub Users/GitHub.User.Repositories.Page.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Page.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Page.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Traversal.Error.swift b/Sources/GitHub Users/GitHub.User.Repositories.Traversal.Error.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Traversal.Error.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Traversal.Error.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Traversal.Limit.Items.swift b/Sources/GitHub Users/GitHub.User.Repositories.Traversal.Limit.Items.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Traversal.Limit.Items.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Traversal.Limit.Items.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Traversal.Limit.Pages.swift b/Sources/GitHub Users/GitHub.User.Repositories.Traversal.Limit.Pages.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Traversal.Limit.Pages.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Traversal.Limit.Pages.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Traversal.Limit.swift b/Sources/GitHub Users/GitHub.User.Repositories.Traversal.Limit.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Traversal.Limit.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Traversal.Limit.swift diff --git a/Sources/GitHub/GitHub.User.Repositories.Traversal.swift b/Sources/GitHub Users/GitHub.User.Repositories.Traversal.swift similarity index 100% rename from Sources/GitHub/GitHub.User.Repositories.Traversal.swift rename to Sources/GitHub Users/GitHub.User.Repositories.Traversal.swift diff --git a/Sources/GitHub Users/exports.swift b/Sources/GitHub Users/exports.swift new file mode 100644 index 0000000..0a13c58 --- /dev/null +++ b/Sources/GitHub Users/exports.swift @@ -0,0 +1,3 @@ +@_exported public import Async_Lifecycle_Primitives +@_exported public import Either_Primitives +@_exported public import GitHub_Standard diff --git a/Sources/GitHub/exports.swift b/Sources/GitHub/exports.swift index 0a13c58..9d00a10 100644 --- a/Sources/GitHub/exports.swift +++ b/Sources/GitHub/exports.swift @@ -1,3 +1,6 @@ -@_exported public import Async_Lifecycle_Primitives -@_exported public import Either_Primitives -@_exported public import GitHub_Standard +@_exported public import GitHub_OAuth +@_exported public import GitHub_Organizations +@_exported public import GitHub_Repositories +@_exported public import GitHub_Stargazers +@_exported public import GitHub_Traffic +@_exported public import GitHub_Users diff --git a/Tests/GitHub Core Tests/GitHub.OAuth.Client Tests.swift b/Tests/GitHub OAuth Core Tests/GitHub.OAuth.Client Tests.swift similarity index 98% rename from Tests/GitHub Core Tests/GitHub.OAuth.Client Tests.swift rename to Tests/GitHub OAuth Core Tests/GitHub.OAuth.Client Tests.swift index 8eb8784..7c57585 100644 --- a/Tests/GitHub Core Tests/GitHub.OAuth.Client Tests.swift +++ b/Tests/GitHub OAuth Core Tests/GitHub.OAuth.Client Tests.swift @@ -1,7 +1,7 @@ import RFC_3986 import Testing -@testable import GitHub +@testable import GitHub_OAuth extension GitHub.OAuth { @Suite("GitHub.OAuth.Client.Unit") diff --git a/Tests/GitHub Core Tests/GitHub.OAuth.Fixture.Failure.swift b/Tests/GitHub OAuth Core Tests/GitHub.OAuth.Fixture.Failure.swift similarity index 79% rename from Tests/GitHub Core Tests/GitHub.OAuth.Fixture.Failure.swift rename to Tests/GitHub OAuth Core Tests/GitHub.OAuth.Fixture.Failure.swift index d01addb..c051a43 100644 --- a/Tests/GitHub Core Tests/GitHub.OAuth.Fixture.Failure.swift +++ b/Tests/GitHub OAuth Core Tests/GitHub.OAuth.Fixture.Failure.swift @@ -1,4 +1,4 @@ -@testable import GitHub +@testable import GitHub_OAuth extension GitHub.OAuth.Fixture { enum Failure: Swift.Error, Equatable, Sendable { diff --git a/Tests/GitHub Core Tests/GitHub.OAuth.Fixture.swift b/Tests/GitHub OAuth Core Tests/GitHub.OAuth.Fixture.swift similarity index 61% rename from Tests/GitHub Core Tests/GitHub.OAuth.Fixture.swift rename to Tests/GitHub OAuth Core Tests/GitHub.OAuth.Fixture.swift index 30d9b58..9010a27 100644 --- a/Tests/GitHub Core Tests/GitHub.OAuth.Fixture.swift +++ b/Tests/GitHub OAuth Core Tests/GitHub.OAuth.Fixture.swift @@ -1,4 +1,4 @@ -@testable import GitHub +@testable import GitHub_OAuth extension GitHub.OAuth { enum Fixture {} diff --git a/Tests/GitHub Core Tests/GitHub.Organization.Repositories.Client Tests.swift b/Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Client Tests.swift similarity index 99% rename from Tests/GitHub Core Tests/GitHub.Organization.Repositories.Client Tests.swift rename to Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Client Tests.swift index 719ebdd..b805f2b 100644 --- a/Tests/GitHub Core Tests/GitHub.Organization.Repositories.Client Tests.swift +++ b/Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Client Tests.swift @@ -1,6 +1,6 @@ import Testing -@testable import GitHub +@testable import GitHub_Organizations extension GitHub.Organization.Repositories { @Suite("GitHub.Organization.Repositories.Client.Unit") diff --git a/Tests/GitHub Core Tests/GitHub.Organization.Repositories.Fixture.Failure.swift b/Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Fixture.Failure.swift similarity index 78% rename from Tests/GitHub Core Tests/GitHub.Organization.Repositories.Fixture.Failure.swift rename to Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Fixture.Failure.swift index 981e2a6..ced5e79 100644 --- a/Tests/GitHub Core Tests/GitHub.Organization.Repositories.Fixture.Failure.swift +++ b/Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Fixture.Failure.swift @@ -1,4 +1,4 @@ -@testable import GitHub +@testable import GitHub_Organizations extension GitHub.Organization.Repositories.Fixture { enum Failure: Swift.Error, Equatable, Sendable { diff --git a/Tests/GitHub Core Tests/GitHub.Organization.Repositories.Fixture.swift b/Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Fixture.swift similarity index 64% rename from Tests/GitHub Core Tests/GitHub.Organization.Repositories.Fixture.swift rename to Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Fixture.swift index 5da7410..6b122bc 100644 --- a/Tests/GitHub Core Tests/GitHub.Organization.Repositories.Fixture.swift +++ b/Tests/GitHub Organizations Core Tests/GitHub.Organization.Repositories.Fixture.swift @@ -1,4 +1,4 @@ -@testable import GitHub +@testable import GitHub_Organizations extension GitHub.Organization.Repositories { enum Fixture {} diff --git a/Tests/GitHub Core Tests/GitHub.Repository.Content.Client Tests.swift b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Content.Client Tests.swift similarity index 97% rename from Tests/GitHub Core Tests/GitHub.Repository.Content.Client Tests.swift rename to Tests/GitHub Repositories Core Tests/GitHub.Repository.Content.Client Tests.swift index c56e3bd..fd9cafb 100644 --- a/Tests/GitHub Core Tests/GitHub.Repository.Content.Client Tests.swift +++ b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Content.Client Tests.swift @@ -1,6 +1,6 @@ import Testing -@testable import GitHub +@testable import GitHub_Repositories extension GitHub.Repository.Content { @Suite("GitHub.Repository.Content.Client.Unit") diff --git a/Tests/GitHub Core Tests/GitHub.Repository.Fixture.Failure.swift b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Fixture.Failure.swift similarity index 79% rename from Tests/GitHub Core Tests/GitHub.Repository.Fixture.Failure.swift rename to Tests/GitHub Repositories Core Tests/GitHub.Repository.Fixture.Failure.swift index a51ae1d..2f01bc9 100644 --- a/Tests/GitHub Core Tests/GitHub.Repository.Fixture.Failure.swift +++ b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Fixture.Failure.swift @@ -1,4 +1,4 @@ -@testable import GitHub +@testable import GitHub_Repositories extension GitHub.Repository.Fixture { enum Failure: Swift.Error, Equatable, Sendable { diff --git a/Tests/GitHub Core Tests/GitHub.Repository.Fixture.swift b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Fixture.swift similarity index 58% rename from Tests/GitHub Core Tests/GitHub.Repository.Fixture.swift rename to Tests/GitHub Repositories Core Tests/GitHub.Repository.Fixture.swift index 2d7db42..79ae1c9 100644 --- a/Tests/GitHub Core Tests/GitHub.Repository.Fixture.swift +++ b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Fixture.swift @@ -1,4 +1,4 @@ -@testable import GitHub +@testable import GitHub_Repositories extension GitHub.Repository { enum Fixture {} diff --git a/Tests/GitHub Core Tests/GitHub.Repository.Get.Client Tests.swift b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Get.Client Tests.swift similarity index 95% rename from Tests/GitHub Core Tests/GitHub.Repository.Get.Client Tests.swift rename to Tests/GitHub Repositories Core Tests/GitHub.Repository.Get.Client Tests.swift index bd1a070..5f4ca72 100644 --- a/Tests/GitHub Core Tests/GitHub.Repository.Get.Client Tests.swift +++ b/Tests/GitHub Repositories Core Tests/GitHub.Repository.Get.Client Tests.swift @@ -1,6 +1,6 @@ import Testing -@testable import GitHub +@testable import GitHub_Repositories extension GitHub.Repository.Get { @Suite("GitHub.Repository.Get.Client.Unit") diff --git a/Tests/GitHub Core Tests/GitHub.Repository.Stargazers.Client Tests.swift b/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Client Tests.swift similarity index 96% rename from Tests/GitHub Core Tests/GitHub.Repository.Stargazers.Client Tests.swift rename to Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Client Tests.swift index 7347c5d..7787da0 100644 --- a/Tests/GitHub Core Tests/GitHub.Repository.Stargazers.Client Tests.swift +++ b/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Client Tests.swift @@ -1,6 +1,6 @@ import Testing -@testable import GitHub +@testable import GitHub_Stargazers extension GitHub.Repository.Stargazers { @Suite("GitHub.Repository.Stargazers.Client.Unit") @@ -46,7 +46,7 @@ extension GitHub.Repository.Stargazers { size: .maximum ) let limit: GitHub.Repository.Stargazers.Traversal.Limit - do throws(GitHub.Repository.Fixture.Failure) { + do throws(GitHub.Repository.Stargazers.Fixture.Failure) { limit = try self.limit(pages: 2, items: 1) } catch { Issue.record("invalid traversal limit fixture: \(error)") @@ -123,7 +123,7 @@ extension GitHub.Repository.Stargazers { private func limit( pages: UInt, items: UInt - ) throws(GitHub.Repository.Fixture.Failure) + ) throws(GitHub.Repository.Stargazers.Fixture.Failure) -> GitHub.Repository.Stargazers.Traversal.Limit { guard diff --git a/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Fixture.Failure.swift b/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Fixture.Failure.swift new file mode 100644 index 0000000..b47f43b --- /dev/null +++ b/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Fixture.Failure.swift @@ -0,0 +1,7 @@ +@testable import GitHub_Stargazers + +extension GitHub.Repository.Stargazers.Fixture { + enum Failure: Swift.Error, Equatable, Sendable { + case unexpected + } +} diff --git a/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Fixture.swift b/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Fixture.swift new file mode 100644 index 0000000..5e6def2 --- /dev/null +++ b/Tests/GitHub Stargazers Core Tests/GitHub.Repository.Stargazers.Fixture.swift @@ -0,0 +1,5 @@ +@testable import GitHub_Stargazers + +extension GitHub.Repository.Stargazers { + enum Fixture {} +} diff --git a/Tests/GitHub Core Tests/GitHub.Repository.Traffic.Client Tests.swift b/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Client Tests.swift similarity index 72% rename from Tests/GitHub Core Tests/GitHub.Repository.Traffic.Client Tests.swift rename to Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Client Tests.swift index f4a5f06..1d25f6b 100644 --- a/Tests/GitHub Core Tests/GitHub.Repository.Traffic.Client Tests.swift +++ b/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Client Tests.swift @@ -1,23 +1,23 @@ import Testing -@testable import GitHub +@testable import GitHub_Traffic extension GitHub.Repository.Traffic { @Suite("GitHub.Repository.Traffic.Client.Unit") struct Core { @Test("Each traffic endpoint is a typed one-call capability") - func capabilities() async throws(GitHub.Repository.Fixture.Failure) { - let client = Client( - views: { _ async throws(GitHub.Repository.Fixture.Failure) in + func capabilities() async throws(GitHub.Repository.Traffic.Fixture.Failure) { + let client = Client( + views: { _ async throws(GitHub.Repository.Traffic.Fixture.Failure) in .init(count: 1, uniques: 1, views: []) }, - clones: { _ async throws(GitHub.Repository.Fixture.Failure) in + clones: { _ async throws(GitHub.Repository.Traffic.Fixture.Failure) in .init(count: 2, uniques: 2, clones: []) }, - paths: { _ async throws(GitHub.Repository.Fixture.Failure) in + paths: { _ async throws(GitHub.Repository.Traffic.Fixture.Failure) in .init(paths: []) }, - referrers: { _ async throws(GitHub.Repository.Fixture.Failure) in + referrers: { _ async throws(GitHub.Repository.Traffic.Fixture.Failure) in .init(referrers: []) } ) @@ -45,24 +45,24 @@ extension GitHub.Repository.Traffic { @Test("Traffic endpoint failures remain typed") func failure() async { - let client = Client( + let client = Client( views: { - (_: Views.Request) async throws(GitHub.Repository.Fixture.Failure) + (_: Views.Request) async throws(GitHub.Repository.Traffic.Fixture.Failure) -> Views.Response in throw .expected }, clones: { - (_: Clones.Request) async throws(GitHub.Repository.Fixture.Failure) + (_: Clones.Request) async throws(GitHub.Repository.Traffic.Fixture.Failure) -> Clones.Response in throw .expected }, paths: { - (_: Paths.Request) async throws(GitHub.Repository.Fixture.Failure) + (_: Paths.Request) async throws(GitHub.Repository.Traffic.Fixture.Failure) -> Paths.Response in throw .expected }, referrers: { - (_: Referrers.Request) async throws(GitHub.Repository.Fixture.Failure) + (_: Referrers.Request) async throws(GitHub.Repository.Traffic.Fixture.Failure) -> Referrers.Response in throw .expected } @@ -74,16 +74,16 @@ extension GitHub.Repository.Traffic { let clones = Clones.Request(owner: owner, repository: repository) let paths = Paths.Request(owner: owner, repository: repository) let referrers = Referrers.Request(owner: owner, repository: repository) - await #expect(throws: GitHub.Repository.Fixture.Failure.expected) { + await #expect(throws: GitHub.Repository.Traffic.Fixture.Failure.expected) { try await client.views(views) } - await #expect(throws: GitHub.Repository.Fixture.Failure.expected) { + await #expect(throws: GitHub.Repository.Traffic.Fixture.Failure.expected) { try await client.clones(clones) } - await #expect(throws: GitHub.Repository.Fixture.Failure.expected) { + await #expect(throws: GitHub.Repository.Traffic.Fixture.Failure.expected) { try await client.paths(paths) } - await #expect(throws: GitHub.Repository.Fixture.Failure.expected) { + await #expect(throws: GitHub.Repository.Traffic.Fixture.Failure.expected) { try await client.referrers(referrers) } } diff --git a/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Fixture.Failure.swift b/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Fixture.Failure.swift new file mode 100644 index 0000000..7e9d763 --- /dev/null +++ b/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Fixture.Failure.swift @@ -0,0 +1,7 @@ +@testable import GitHub_Traffic + +extension GitHub.Repository.Traffic.Fixture { + enum Failure: Swift.Error, Equatable, Sendable { + case expected + } +} diff --git a/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Fixture.swift b/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Fixture.swift new file mode 100644 index 0000000..95155eb --- /dev/null +++ b/Tests/GitHub Traffic Core Tests/GitHub.Repository.Traffic.Fixture.swift @@ -0,0 +1,5 @@ +@testable import GitHub_Traffic + +extension GitHub.Repository.Traffic { + enum Fixture {} +} diff --git a/Tests/GitHub Core Tests/GitHub.User.Authenticated.Client Tests.swift b/Tests/GitHub Users Core Tests/GitHub.User.Authenticated.Client Tests.swift similarity index 65% rename from Tests/GitHub Core Tests/GitHub.User.Authenticated.Client Tests.swift rename to Tests/GitHub Users Core Tests/GitHub.User.Authenticated.Client Tests.swift index af41ea8..90e0188 100644 --- a/Tests/GitHub Core Tests/GitHub.User.Authenticated.Client Tests.swift +++ b/Tests/GitHub Users Core Tests/GitHub.User.Authenticated.Client Tests.swift @@ -1,32 +1,32 @@ import Testing -@testable import GitHub +@testable import GitHub_Users extension GitHub.User.Authenticated { @Suite("GitHub.User.Authenticated.Client.Unit") struct Core { @Test("Authenticated-user lookup preserves its typed failure") func get() async { - let client = Get.Client { - (request: Get.Request) async throws(GitHub.OAuth.Fixture.Failure) in + let client = Get.Client { + (request: Get.Request) async throws(GitHub.User.Fixture.Failure) in #expect(request.accessToken == "access-token") throw .expected } - await #expect(throws: GitHub.OAuth.Fixture.Failure.expected) { + await #expect(throws: GitHub.User.Fixture.Failure.expected) { try await client.get(.init(accessToken: "access-token")) } } @Test("Authenticated-user email listing preserves its typed failure") func emails() async { - let client = Emails.List.Client { - (request: Emails.List.Request) async throws(GitHub.OAuth.Fixture.Failure) in + let client = Emails.List.Client { + (request: Emails.List.Request) async throws(GitHub.User.Fixture.Failure) in #expect(request.accessToken == "access-token") throw .expected } - await #expect(throws: GitHub.OAuth.Fixture.Failure.expected) { + await #expect(throws: GitHub.User.Fixture.Failure.expected) { try await client.list(.init(accessToken: "access-token")) } } diff --git a/Tests/GitHub Users Core Tests/GitHub.User.Fixture.Failure.swift b/Tests/GitHub Users Core Tests/GitHub.User.Fixture.Failure.swift new file mode 100644 index 0000000..293a28b --- /dev/null +++ b/Tests/GitHub Users Core Tests/GitHub.User.Fixture.Failure.swift @@ -0,0 +1,8 @@ +@testable import GitHub_Users + +extension GitHub.User.Fixture { + enum Failure: Swift.Error, Equatable, Sendable { + case expected + case unexpected + } +} diff --git a/Tests/GitHub Users Core Tests/GitHub.User.Fixture.swift b/Tests/GitHub Users Core Tests/GitHub.User.Fixture.swift new file mode 100644 index 0000000..41ef1fa --- /dev/null +++ b/Tests/GitHub Users Core Tests/GitHub.User.Fixture.swift @@ -0,0 +1,5 @@ +@testable import GitHub_Users + +extension GitHub.User { + enum Fixture {} +} diff --git a/Tests/GitHub Core Tests/GitHub.User.Repositories.Client Tests.swift b/Tests/GitHub Users Core Tests/GitHub.User.Repositories.Client Tests.swift similarity index 97% rename from Tests/GitHub Core Tests/GitHub.User.Repositories.Client Tests.swift rename to Tests/GitHub Users Core Tests/GitHub.User.Repositories.Client Tests.swift index e2116c8..a86fec7 100644 --- a/Tests/GitHub Core Tests/GitHub.User.Repositories.Client Tests.swift +++ b/Tests/GitHub Users Core Tests/GitHub.User.Repositories.Client Tests.swift @@ -1,6 +1,6 @@ import Testing -@testable import GitHub +@testable import GitHub_Users extension GitHub.User.Repositories { @Suite("GitHub.User.Repositories.Client.Unit") @@ -34,7 +34,7 @@ extension GitHub.User.Repositories { let first = Request(page: .first, size: .maximum) let limit: GitHub.User.Repositories.Traversal.Limit - do throws(GitHub.Repository.Fixture.Failure) { + do throws(GitHub.User.Fixture.Failure) { limit = try self.limit(pages: 2, items: 1) } catch { Issue.record("invalid traversal limit fixture: \(error)") @@ -109,7 +109,7 @@ extension GitHub.User.Repositories { private func limit( pages: UInt, items: UInt - ) throws(GitHub.Repository.Fixture.Failure) + ) throws(GitHub.User.Fixture.Failure) -> GitHub.User.Repositories.Traversal.Limit { guard