Skip to content

Commit a0b926f

Browse files
committed
Add a basic test for the database notification hook (doesn't cover much but does prove that it works in the simplest case).
1 parent fcae29d commit a0b926f

File tree

2 files changed

+71
-9
lines changed

2 files changed

+71
-9
lines changed

Package.swift

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ let package = Package(
1414
dependencies: [
1515
.package(url: "https://github.com/vapor/queues.git", from: "1.5.0"),
1616
.package(url: "https://github.com/vapor/fluent-kit.git", from: "1.7.0"),
17-
.package(url: "https://github.com/vapor/sql-kit.git", from: "3.7.0")
17+
.package(url: "https://github.com/vapor/sql-kit.git", from: "3.7.0"),
18+
19+
// Test-only dependencies
20+
.package(url: "https://github.com/vapor/fluent-sqlite-driver.git", from: "4.0.0"),
21+
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
22+
.package(url: "https://github.com/vapor/fluent.git", from: "4.0.0"),
1823
],
1924
targets: [
2025
.target(
@@ -26,6 +31,12 @@ let package = Package(
2631
]),
2732
.testTarget(
2833
name: "QueuesDatabaseHooksTests",
29-
dependencies: ["QueuesDatabaseHooks"]),
34+
dependencies: [
35+
.target(name: "QueuesDatabaseHooks"),
36+
.product(name: "FluentSQLiteDriver", package: "fluent-sqlite-driver"),
37+
.product(name: "XCTQueues", package: "queues"),
38+
.product(name: "XCTVapor", package: "vapor"),
39+
.product(name: "Fluent", package: "fluent"),
40+
]),
3041
]
3142
)
Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,59 @@
1-
//
2-
// File.swift
3-
//
4-
//
5-
// Created by Jimmy McDermott on 10/10/20.
6-
//
1+
import QueuesDatabaseHooks
2+
import Queues
3+
import XCTQueues
4+
import XCTVapor
5+
import Fluent
6+
import FluentSQLiteDriver
7+
import XCTest
78

8-
import Foundation
9+
final class QueuesDatabaseHooksTests: XCTestCase {
10+
var app: Application!
11+
12+
override func setUpWithError() throws {
13+
self.app = Application(.testing)
14+
self.app.databases.use(.sqlite(.memory, maxConnectionsPerEventLoop: 1), as: .sqlite)
15+
self.app.migrations.add(QueueDatabaseEntryMigration())
16+
try self.app.migrator.setupIfNeeded().wait()
17+
try self.app.migrator.prepareBatch().wait()
18+
self.app.queues.use(.test)
19+
self.app.queues.add(QueuesDatabaseNotificationHook(db: self.app.db, errorClosure: { $0.localizedDescription }, payloadClosure: { $0 }))
20+
}
21+
22+
override func tearDownWithError() throws {
23+
self.app.shutdown()
24+
}
25+
26+
func testJobLifecycle() throws {
27+
struct Foo: Job {
28+
struct Payload: Codable {}
29+
30+
func dequeue(_ context: QueueContext, _: Payload) -> EventLoopFuture<Void> {
31+
context.eventLoop.makeSucceededVoidFuture()
32+
}
33+
34+
func error(_ context: QueueContext, _: Error, _: Payload) -> EventLoopFuture<Void> {
35+
context.eventLoop.makeSucceededVoidFuture()
36+
}
37+
}
38+
39+
self.app.queues.add(Foo())
40+
self.app.get("foo") { $0.queue.dispatch(Foo.self, .init()).map { _ in "done" } }
41+
try app.testable().test(.GET, "/foo") { XCTAssertEqual($0.body.string, "done") }
42+
43+
let entries1 = try QueueDatabaseEntry.query(on: self.app.db).all().wait()
44+
XCTAssertEqual(entries1.count, 1)
45+
XCTAssertEqual(entries1.first?.status, .queued)
46+
XCTAssertNil(entries1.first?.dequeuedAt)
47+
XCTAssertNil(entries1.first?.completedAt)
48+
XCTAssertNil(entries1.first?.errorString)
49+
50+
try app.queues.queue.worker.run().wait()
51+
52+
let entries2 = try QueueDatabaseEntry.query(on: self.app.db).all().wait()
53+
XCTAssertEqual(entries2.count, 1)
54+
XCTAssertEqual(entries2.first?.status, .success)
55+
XCTAssertNotNil(entries2.first?.dequeuedAt)
56+
XCTAssertNotNil(entries2.first?.completedAt)
57+
XCTAssertNil(entries2.first?.errorString)
58+
}
59+
}

0 commit comments

Comments
 (0)