Sfoglia il codice sorgente

Update Fortunes test implementation to conform test requirements

Evgeny Kazakov 8 anni fa
parent
commit
2a50ff943b

+ 16 - 11
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/Fortune.swift

@@ -1,24 +1,29 @@
 import Vapor
 
 final class Fortune: Model {
-  
+
   static let entity = "fortune"
-  
+
   var mongoId: Node?
   var id: Node?
   var message: String
-  
+
   static var idKey = "_id"
-  
+
   // For internal Vapor use
   var exists: Bool = false
-  
+
+  init(id: Int, message: String) {
+    self.id = Node(id)
+    self.message = message
+  }
+
   init(node: Node, in context: Context) throws {
     id = try node.extract("_id")
     mongoId = try node.extract("id")
     message = try node.extract("message")
   }
-  
+
   func makeNode(context: Context) throws -> Node {
     return try Node(node: [
       "id": mongoId,
@@ -26,28 +31,28 @@ final class Fortune: Model {
       "message": message
     ])
   }
-  
+
   func makeJSONNode() throws -> Node {
     return try Node(node: [
       "id": id?.int,
       "message": message
     ])
   }
-  
+
   func makeJSON() throws -> JSON {
     let node = try makeJSONNode()
     return try JSON(node: node)
   }
-  
+
   static func prepare(_ database: Database) throws {
     try database.create("Fortune") { fortune in
       fortune.id("id")
       fortune.string("message")
     }
   }
-  
+
   static func revert(_ database: Database) throws {
     try database.delete("Fortune")
   }
-  
+
 }

+ 11 - 2
frameworks/Swift/vapor/Sources/vapor-tfb-mongodb/main.swift

@@ -1,3 +1,4 @@
+import Foundation
 import Vapor
 import JSON
 import HTTP
@@ -41,9 +42,17 @@ drop.get("queries") { req in
 }
 
 // Test type 4: Fortunes
+private let posixLocale = Locale(identifier: "en_US_POSIX")
 drop.get("fortunes") { _ in
-  let fortunes = try Fortune.all().flatMap { try $0.makeJSONNode() }
-  return try drop.view.make("fortune", ["fortunes": Node(fortunes)])
+  var fortunes = try Fortune.all()
+  let additional = Fortune(id: 0, message: "Additional fortune added at request time.")
+  fortunes.insert(additional, at: 0)
+  fortunes.sort(by: { lhs, rhs -> Bool in
+    return lhs.message.compare(rhs.message, locale: posixLocale) == .orderedAscending
+  })
+  
+  let nodes = try fortunes.map { try $0.makeJSONNode() }
+  return try drop.view.make("fortune", ["fortunes": Node(nodes)])
 }
 
 // Test type 5: Database updates

+ 14 - 9
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/Fortune.swift

@@ -1,37 +1,42 @@
 import Vapor
 
 final class Fortune: Model {
-  
+
   static let entity = "Fortune"
-  
+
   var id: Node?
-  
+
   var message: String
-  
+
   // For internal Vapor use
   var exists: Bool = false
-  
+
+  init(id: Int, message: String) {
+    self.id = Node(id)
+    self.message = message
+  }
+
   init(node: Node, in context: Context) throws {
     id = try node.extract("id")
     message = try node.extract("message")
   }
-  
+
   func makeNode(context: Context) throws -> Node {
     return try Node(node: [
       "id": id,
       "message": message
     ])
   }
-  
+
   static func prepare(_ database: Database) throws {
     try database.create("Fortune") { fortune in
       fortune.id("id")
       fortune.string("message")
     }
   }
-  
+
   static func revert(_ database: Database) throws {
     try database.delete("Fortune")
   }
-  
+
 }

+ 12 - 2
frameworks/Swift/vapor/Sources/vapor-tfb-mysql/main.swift

@@ -1,3 +1,4 @@
+import Foundation
 import Vapor
 import JSON
 import HTTP
@@ -41,9 +42,18 @@ drop.get("queries") { req in
 }
 
 // Test type 4: Fortunes
+/// Locale for string comparison to workaround https://bugs.swift.org/browse/SR-530
+private let posixLocale = Locale(identifier: "en_US_POSIX")
 drop.get("fortunes") { _ in
-  let fortunes = try Fortune.all().flatMap { try $0.makeNode() }
-  return try drop.view.make("fortune", ["fortunes": Node(fortunes)])
+  var fortunes = try Fortune.all()
+  let additional = Fortune(id: 0, message: "Additional fortune added at request time.")
+  fortunes.insert(additional, at: 0)
+  fortunes.sort(by: { lhs, rhs -> Bool in
+    return lhs.message.compare(rhs.message, locale: posixLocale) == .orderedAscending
+  })
+  
+  let nodes = try fortunes.map { try $0.makeNode() }
+  return try drop.view.make("fortune", ["fortunes": Node(nodes)])
 }
 
 // Test type 5: Database updates

+ 14 - 9
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/Fortune.swift

@@ -1,37 +1,42 @@
 import Vapor
 
 final class Fortune: Model {
-  
+
   static let entity = "Fortune"
-  
+
   var id: Node?
-  
+
   var message: String
-  
+
   // For internal Vapor use
   var exists: Bool = false
-  
+
+  init(id: Int, message: String) {
+    self.id = Node(id)
+    self.message = message
+  }
+
   init(node: Node, in context: Context) throws {
     id = try node.extract("id")
     message = try node.extract("message")
   }
-  
+
   func makeNode(context: Context) throws -> Node {
     return try Node(node: [
       "id": id,
       "message": message
     ])
   }
-  
+
   static func prepare(_ database: Database) throws {
     try database.create("Fortune") { fortune in
       fortune.id("id")
       fortune.string("message")
     }
   }
-  
+
   static func revert(_ database: Database) throws {
     try database.delete("Fortune")
   }
-  
+
 }

+ 11 - 2
frameworks/Swift/vapor/Sources/vapor-tfb-postgresql/main.swift

@@ -1,3 +1,4 @@
+import Foundation
 import Vapor
 import JSON
 import HTTP
@@ -41,9 +42,17 @@ drop.get("queries") { req in
 }
 
 // Test type 4: Fortunes
+private let posixLocale = Locale(identifier: "en_US_POSIX")
 drop.get("fortunes") { _ in
-  let fortunes = try Fortune.all().flatMap { try $0.makeNode() }
-  return try drop.view.make("fortune", ["fortunes": Node(fortunes)])
+  var fortunes = try Fortune.all()
+  let additional = Fortune(id: 0, message: "Additional fortune added at request time.")
+  fortunes.insert(additional, at: 0)
+  fortunes.sort(by: { lhs, rhs -> Bool in
+    return lhs.message.compare(rhs.message, locale: posixLocale) == .orderedAscending
+  })
+  
+  let nodes = try fortunes.map { try $0.makeNode() }
+  return try drop.view.make("fortune", ["fortunes": Node(nodes)])
 }
 
 // Test type 5: Database updates