Skip to content

Commit 67fdc7a

Browse files
Merge pull request #91 from samisuteria/samisuteria/union-init
add array based init for unions
2 parents e972e2e + 232b16c commit 67fdc7a

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

Sources/Graphiti/Union/Union.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,12 @@ public extension Union {
3838
) {
3939
self.init(type: type, name: name, members: members)
4040
}
41+
42+
convenience init(
43+
_ type: UnionType.Type,
44+
as name: String? = nil,
45+
members: [Any.Type]
46+
) {
47+
self.init(type: type, name: name, members: members)
48+
}
4149
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import Foundation
2+
@testable import Graphiti
3+
import GraphQL
4+
import NIO
5+
import XCTest
6+
7+
class UnionTests: XCTestCase {
8+
func testUnionInit() throws {
9+
_ = try Schema<StarWarsResolver, StarWarsContext> {
10+
Type(Planet.self) {
11+
Field("id", at: \.id)
12+
}
13+
14+
Type(Human.self) {
15+
Field("id", at: \.id)
16+
}
17+
18+
Type(Droid.self) {
19+
Field("id", at: \.id)
20+
}
21+
22+
Union(SearchResult.self, members: Planet.self, Human.self, Droid.self)
23+
24+
Query {
25+
Field("search", at: StarWarsResolver.search, as: [SearchResult].self) {
26+
Argument("query", at: \.query)
27+
}
28+
}
29+
}
30+
31+
32+
_ = try Schema<StarWarsResolver, StarWarsContext> {
33+
Type(Planet.self) {
34+
Field("id", at: \.id)
35+
}
36+
37+
Type(Human.self) {
38+
Field("id", at: \.id)
39+
}
40+
41+
Type(Droid.self) {
42+
Field("id", at: \.id)
43+
}
44+
45+
Union(SearchResult.self, members: [
46+
Planet.self,
47+
Human.self,
48+
Droid.self,
49+
])
50+
51+
Query {
52+
Field("search", at: StarWarsResolver.search, as: [SearchResult].self) {
53+
Argument("query", at: \.query)
54+
}
55+
}
56+
}
57+
58+
}
59+
}

0 commit comments

Comments
 (0)