@testable import ForgejoKit import Foundation import Testing struct UserServiceTests { @Test func createTokenPayloadEncodesCorrectKeys() throws { let payload: [String: Any] = [ "name": "integration-test-token", "scopes": ["read:user", "write:user"], ] let data = try JSONSerialization.data(withJSONObject: payload) let dict = try #require(JSONSerialization.jsonObject(with: data) as? [String: Any]) #expect(dict["name"] as? String == "integration-test-token") #expect((dict["scopes"] as? [String])?.count == 2) } @Test func createTokenURLConstruction() throws { let client = ForgejoClient(serverURL: "https://forgejo.example.com", username: "admin", password: "pass") let url = try client.makeURL(path: "/api/v1/users/\(ForgejoClient.encodedPathSegment("testuser"))/tokens") #expect(url.absoluteString == "https://forgejo.example.com/api/v1/users/testuser/tokens") } @Test func createTokenURLEncodesSpecialCharacters() throws { let client = ForgejoClient(serverURL: "https://forgejo.example.com", username: "admin", password: "pass") let encoded = ForgejoClient.encodedPathSegment("user name") let url = try client.makeURL(path: "/api/v1/users/\(encoded)/tokens") #expect(url.absoluteString.contains("user%20name")) } }