generated from dankinsoid/iOSLibraryTemplate
-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
ArrayDecodingTests.swift
122 lines (105 loc) · 3.72 KB
/
ArrayDecodingTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import CustomDump
import Foundation
@testable import SwiftOpenAPI
import XCTest
class ArrayDecodingTests: XCTestCase {
func testDecodeArray() throws {
var schemas: ComponentsMap<SchemaObject> = [:]
_ = try ReferenceOr<SchemaObject>.decodeSchema(Tag.ListResponse.self, into: &schemas)
XCTAssertNoDifference(
schemas,
[
"TagResponse": .object(
properties: [
"id": .integer,
"value": .string
],
required: [
"id",
"value"
]
),
"TagListResponse": .object(
properties: [
"tags": .array(of: .ref(components: \.schemas, "TagResponse"))
],
required: ["tags"]
)
]
)
}
func testEncodeRecursiveArray() throws {
var schemas: ComponentsMap<SchemaObject> = [:]
_ = try ReferenceOr<SchemaObject>.encodeSchema(ProductDependency.example, into: &schemas)
XCTAssertNoDifference(schemas, ["ProductDependency": .value(ProductDependency.scheme)])
}
func testDecodeRecursiveArray() throws {
var schemas: ComponentsMap<SchemaObject> = [:]
_ = try ReferenceOr<SchemaObject>.encodeSchema(ProductDependency.example, into: &schemas)
XCTAssertNoDifference(schemas, ["ProductDependency": .value(ProductDependency.scheme)])
}
func testDecodeEmbeddedRecursiveOptionalArray() throws {
var schemas: ComponentsMap<SchemaObject> = [:]
let _ = try ReferenceOr<SchemaObject>.encodeSchema(EmbeddedOptionalRecursiveTypeInArray.example, into: &schemas)
XCTAssertNoDifference(
schemas["EmbeddedOptionalRecursiveTypeInArray"],
.value(EmbeddedOptionalRecursiveTypeInArray.scheme)
)
XCTAssertNoDifference(
schemas["ProductDependency"],
.value(ProductDependency.scheme)
)
}
}
enum Tag {
struct Response: Codable {
let id: Int
let value: String
}
struct ListResponse: Codable {
let tags: [Response]
}
}
public struct EmbeddedOptionalRecursiveTypeInArray: Codable, Equatable {
public var name: String
public var dependencies: [ProductDependency]?
public static let example = EmbeddedOptionalRecursiveTypeInArray(
name: "DTOExample",
dependencies: [ProductDependency.example]
)
static let scheme: SchemaObject = .object(
properties: [
"name": .string,
"dependencies": .array(of: .ref(components: \.schemas, "ProductDependency"))
.with(\.nullable, true)
],
required: ["name"]
)
}
public struct ProductDependency: Codable, Equatable {
public var identity: String
public var name: String
public var url: String
public var dependencies: [ProductDependency]
public init(identity: String, name: String, url: String, dependencies: [ProductDependency]) {
self.identity = identity
self.name = name
self.url = url
self.dependencies = dependencies
}
public static let example = ProductDependency(
identity: "0",
name: "name",
url: "http://vapor.com",
dependencies: []
)
static let scheme: SchemaObject = .object(
properties: [
"identity": .string,
"name": .string,
"url": .string,
"dependencies": .array(of: .ref(components: \.schemas, "ProductDependency"))
],
required: ["identity", "name", "url", "dependencies"]
)
}