Skip to content

Commit 369a9ee

Browse files
authored
Add PostgresRow decoding tests, reformat Package.swift (#346)
1 parent 263d071 commit 369a9ee

File tree

2 files changed

+107
-22
lines changed

2 files changed

+107
-22
lines changed

Package.swift

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,36 @@ let package = Package(
2222
.package(url: "https://github.com/apple/swift-log.git", from: "1.5.2"),
2323
],
2424
targets: [
25-
.target(name: "PostgresNIO", dependencies: [
26-
.product(name: "Atomics", package: "swift-atomics"),
27-
.product(name: "Crypto", package: "swift-crypto"),
28-
.product(name: "Logging", package: "swift-log"),
29-
.product(name: "Metrics", package: "swift-metrics"),
30-
.product(name: "NIO", package: "swift-nio"),
31-
.product(name: "NIOCore", package: "swift-nio"),
32-
.product(name: "NIOPosix", package: "swift-nio"),
33-
.product(name: "NIOTransportServices", package: "swift-nio-transport-services"),
34-
.product(name: "NIOTLS", package: "swift-nio"),
35-
.product(name: "NIOSSL", package: "swift-nio-ssl"),
36-
.product(name: "NIOFoundationCompat", package: "swift-nio"),
37-
]),
38-
.testTarget(name: "PostgresNIOTests", dependencies: [
39-
.target(name: "PostgresNIO"),
40-
.product(name: "NIOEmbedded", package: "swift-nio"),
41-
.product(name: "NIOTestUtils", package: "swift-nio"),
42-
]),
43-
.testTarget(name: "IntegrationTests", dependencies: [
44-
.target(name: "PostgresNIO"),
45-
.product(name: "NIOTestUtils", package: "swift-nio"),
46-
]),
25+
.target(
26+
name: "PostgresNIO",
27+
dependencies: [
28+
.product(name: "Atomics", package: "swift-atomics"),
29+
.product(name: "Crypto", package: "swift-crypto"),
30+
.product(name: "Logging", package: "swift-log"),
31+
.product(name: "Metrics", package: "swift-metrics"),
32+
.product(name: "NIO", package: "swift-nio"),
33+
.product(name: "NIOCore", package: "swift-nio"),
34+
.product(name: "NIOPosix", package: "swift-nio"),
35+
.product(name: "NIOTransportServices", package: "swift-nio-transport-services"),
36+
.product(name: "NIOTLS", package: "swift-nio"),
37+
.product(name: "NIOSSL", package: "swift-nio-ssl"),
38+
.product(name: "NIOFoundationCompat", package: "swift-nio"),
39+
]
40+
),
41+
.testTarget(
42+
name: "PostgresNIOTests",
43+
dependencies: [
44+
.target(name: "PostgresNIO"),
45+
.product(name: "NIOEmbedded", package: "swift-nio"),
46+
.product(name: "NIOTestUtils", package: "swift-nio"),
47+
]
48+
),
49+
.testTarget(
50+
name: "IntegrationTests",
51+
dependencies: [
52+
.target(name: "PostgresNIO"),
53+
.product(name: "NIOTestUtils", package: "swift-nio"),
54+
]
55+
),
4756
]
4857
)

Tests/PostgresNIOTests/New/PostgresRowTests.swift

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,80 @@ final class PostgresRowTests: XCTestCase {
122122
XCTAssertEqual(randomAccessRow["id"], PostgresCell(bytes: nil, dataType: .uuid, format: .binary, columnName: "id", columnIndex: 0))
123123
XCTAssertEqual(randomAccessRow["name"], PostgresCell(bytes: ByteBuffer(string: "Hello world!"), dataType: .text, format: .binary, columnName: "name", columnIndex: 1))
124124
}
125+
126+
func testDecoding() {
127+
let rowDescription = [
128+
RowDescription.Column(
129+
name: "id",
130+
tableOID: 1,
131+
columnAttributeNumber: 1,
132+
dataType: .uuid,
133+
dataTypeSize: 0,
134+
dataTypeModifier: 0,
135+
format: .binary
136+
),
137+
RowDescription.Column(
138+
name: "name",
139+
tableOID: 1,
140+
columnAttributeNumber: 1,
141+
dataType: .text,
142+
dataTypeSize: 0,
143+
dataTypeModifier: 0,
144+
format: .binary
145+
)
146+
]
147+
148+
let row = PostgresRow(
149+
data: .makeTestDataRow(nil, ByteBuffer(string: "Hello world!")),
150+
lookupTable: ["id": 0, "name": 1],
151+
columns: rowDescription
152+
)
153+
154+
var result: (UUID?, String)?
155+
XCTAssertNoThrow(result = try row.decode((UUID?, String).self))
156+
XCTAssertEqual(result?.0, .some(.none))
157+
XCTAssertEqual(result?.1, "Hello world!")
158+
}
159+
160+
func testDecodingTypeMismatch() {
161+
let rowDescription = [
162+
RowDescription.Column(
163+
name: "id",
164+
tableOID: 1,
165+
columnAttributeNumber: 1,
166+
dataType: .uuid,
167+
dataTypeSize: 0,
168+
dataTypeModifier: 0,
169+
format: .binary
170+
),
171+
RowDescription.Column(
172+
name: "name",
173+
tableOID: 1,
174+
columnAttributeNumber: 1,
175+
dataType: .int8,
176+
dataTypeSize: 0,
177+
dataTypeModifier: 0,
178+
format: .binary
179+
)
180+
]
181+
182+
let row = PostgresRow(
183+
data: .makeTestDataRow(nil, ByteBuffer(integer: 123)),
184+
lookupTable: ["id": 0, "name": 1],
185+
columns: rowDescription
186+
)
187+
188+
XCTAssertThrowsError(try row.decode((UUID?, String).self)) { error in
189+
guard let psqlError = error as? PostgresDecodingError else { return XCTFail("Unexpected error type") }
190+
191+
XCTAssertEqual(psqlError.columnName, "name")
192+
XCTAssertEqual(psqlError.columnIndex, 1)
193+
XCTAssertEqual(psqlError.line, #line - 5)
194+
XCTAssertEqual(psqlError.file, #file)
195+
XCTAssertEqual(psqlError.postgresData, ByteBuffer(integer: 123))
196+
XCTAssertEqual(psqlError.postgresFormat, .binary)
197+
XCTAssertEqual(psqlError.postgresType, .int8)
198+
XCTAssert(psqlError.targetType == String.self)
199+
}
200+
}
125201
}

0 commit comments

Comments
 (0)