12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import Vapor
- import JSON
- import HTTP
- import VaporMySQL
- import TfbCommon
- let drop = Droplet()
- try drop.addProvider(VaporMySQL.Provider.self)
- // All test types require `Server` and `Date` HTTP response headers.
- // Vapor has standard middleware that adds `Date` header.
- // We use custom middleware that adds `Server` header.
- drop.middleware.append(ServerMiddleware())
- // Normally we would add preparation for Fluent Models.
- // `drop.preparations.append(World.self)` etc.
- // During preparation Fluent creates `fluent` table to track migrations.
- // But TFB environment does not grant user rights to create tables.
- // So we just configure our Models with correct database.
- World.database = drop.database
- Fortune.database = drop.database
- // Test type 1: JSON serialization
- drop.get("json") { req in
- return try JSON(node: Message("Hello, World!"))
- }
- // Test type 2: Single database query
- drop.get("db") { _ in
- let worldId = WorldMeta.randomId()
- return try World.find(worldId)?.makeJSON() ?? JSON(node: .null)
- }
- // Test type 3: Multiple database queries
- drop.get("queries") { req in
- let queries = queriesParam(for: req)
- let ids = (1...queries).map({ _ in WorldMeta.randomId() })
- let worlds = try ids.flatMap { try World.find($0)?.makeJSON() }
- return JSON(worlds)
- }
- // Test type 4: Fortunes
- drop.get("fortunes") { _ in
- let fortunes = try Fortune.all().flatMap { try $0.makeNode() }
- return try drop.view.make("fortune", ["fortunes": Node(fortunes)])
- }
- // Test type 5: Database updates
- drop.get("updates") { req in
- let queries = queriesParam(for: req)
- let ids = (1...queries).map({ _ in WorldMeta.randomId() })
- var worlds = try ids.flatMap { try World.find($0) }
- worlds.forEach { $0.randomNumber = WorldMeta.randomRandomNumber() }
- worlds = try worlds.flatMap { world in
- var modifiedWorld = world
- try modifiedWorld.save()
- return modifiedWorld
- }
- let updatedWorlds = try worlds.flatMap { try $0.makeJSON() }
- return JSON(updatedWorlds)
- }
- // Test type 6: Plaintext
- let helloWorldBuffer = "Hello, World!".utf8.array
- drop.get("plaintext") { req in
- return Response(headers: ["Content-Type": "text/plain; charset=utf-8"], body: helloWorldBuffer)
- }
- drop.run()
|