87 lines
1.9 KiB
Swift
87 lines
1.9 KiB
Swift
import DoxyLibrary
|
|
import Hummingbird
|
|
import HummingbirdTesting
|
|
import Testing
|
|
|
|
@Suite("AppBuilder", .tags(.builder))
|
|
struct AppBuilderTests {
|
|
|
|
// MARK: Properties
|
|
|
|
private let arguments = TestArguments()
|
|
|
|
// MARK: Route tests
|
|
|
|
@Test(arguments: zip([String].uris, [HTTPResponse.Status].statuses))
|
|
func routes(
|
|
uri: String,
|
|
expects status: HTTPResponse.Status
|
|
) async throws {
|
|
let appBuilder = AppBuilder(
|
|
name: arguments.name,
|
|
archivesPath: arguments.archivesPath
|
|
)
|
|
let app = try await appBuilder(arguments)
|
|
|
|
try await app.test(.router) { client in
|
|
try await client.execute(
|
|
uri: uri,
|
|
method: .get
|
|
) { response in
|
|
#expect(response.status == status)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// MARK: - Collection+HTTPResponseStatus
|
|
|
|
private extension Collection where Element == HTTPResponse.Status {
|
|
|
|
// MARK: Computed
|
|
|
|
static var statuses: [Element] {[
|
|
.notFound,
|
|
.notFound,
|
|
.notFound,
|
|
.ok,
|
|
.seeOther,
|
|
.seeOther,
|
|
.notImplemented,
|
|
.seeOther,
|
|
.seeOther,
|
|
.seeOther,
|
|
.seeOther,
|
|
.notImplemented,
|
|
.seeOther,
|
|
.seeOther,
|
|
]}
|
|
|
|
}
|
|
|
|
// MARK: - Collection+String
|
|
|
|
private extension Collection where Element == String {
|
|
|
|
// MARK: Computed
|
|
|
|
static var uris: [Element] {[
|
|
"/",
|
|
"/index.html",
|
|
"/xxx",
|
|
"/archives",
|
|
"/archives/SomeArchive",
|
|
"/archives/SomeArchive/",
|
|
"/archives/SomeArchive/index.html",
|
|
"/archives/SomeArchive/documentation",
|
|
"/archives/SomeArchive/tutorials",
|
|
"/archives/SlothCreator",
|
|
"/archives/SlothCreator/",
|
|
"/archives/SlothCreator/index.html",
|
|
"/archives/SlothCreator/documentation",
|
|
"/archives/SlothCreator/tutorials",
|
|
]}
|
|
|
|
}
|