Skip to content

Commit b4942cf

Browse files
Merge pull request #114 from samisuteria/samisuteria/execute-helper
Add helper to API.execute
2 parents 64b180e + 05a1d20 commit b4942cf

File tree

2 files changed

+99
-0
lines changed

2 files changed

+99
-0
lines changed

Sources/Graphiti/API/API.swift

+65
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,21 @@ public extension API {
2828
)
2929
}
3030

31+
func execute(
32+
request: GraphQLRequest,
33+
context: ContextType,
34+
on eventLoopGroup: EventLoopGroup,
35+
validationRules: [(ValidationContext) -> Visitor] = []
36+
) -> EventLoopFuture<GraphQLResult> {
37+
return execute(request: request.query,
38+
context: context,
39+
on: eventLoopGroup,
40+
variables: request.variables,
41+
operationName: request.operationName,
42+
validationRules: validationRules
43+
)
44+
}
45+
3146
func subscribe(
3247
request: String,
3348
context: ContextType,
@@ -46,6 +61,22 @@ public extension API {
4661
validationRules: validationRules
4762
)
4863
}
64+
65+
func subscribe(
66+
request: GraphQLRequest,
67+
context: ContextType,
68+
on eventLoopGroup: EventLoopGroup,
69+
validationRules: [(ValidationContext) -> Visitor] = []
70+
) -> EventLoopFuture<SubscriptionResult> {
71+
return subscribe(
72+
request: request.query,
73+
context: context,
74+
on: eventLoopGroup,
75+
variables: request.variables,
76+
operationName: request.operationName,
77+
validationRules: validationRules
78+
)
79+
}
4980
}
5081

5182
#if compiler(>=5.5) && canImport(_Concurrency)
@@ -71,6 +102,23 @@ public extension API {
71102
).get()
72103
}
73104

105+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
106+
func execute(
107+
request: GraphQLRequest,
108+
context: ContextType,
109+
on eventLoopGroup: EventLoopGroup,
110+
validationRules: [(ValidationContext) -> Visitor] = []
111+
) async throws -> GraphQLResult {
112+
return try await execute(
113+
request: request.query,
114+
context: context,
115+
on: eventLoopGroup,
116+
variables: request.variables,
117+
operationName: request.operationName,
118+
validationRules: validationRules
119+
)
120+
}
121+
74122
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
75123
func subscribe(
76124
request: String,
@@ -90,6 +138,23 @@ public extension API {
90138
validationRules: validationRules
91139
).get()
92140
}
141+
142+
@available(macOS 10.15, iOS 15, watchOS 8, tvOS 15, *)
143+
func subscribe(
144+
request: GraphQLRequest,
145+
context: ContextType,
146+
on eventLoopGroup: EventLoopGroup,
147+
validationRules: [(ValidationContext) -> Visitor] = []
148+
) async throws -> SubscriptionResult {
149+
return try await subscribe(
150+
request: request.query,
151+
context: context,
152+
on: eventLoopGroup,
153+
variables: request.variables,
154+
operationName: request.operationName,
155+
validationRules: validationRules
156+
)
157+
}
93158
}
94159

95160
#endif

Tests/GraphitiTests/HelloWorldTests/HelloWorldTests.swift

+34
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,40 @@ class HelloWorldTests: XCTestCase {
343343
wait(for: [expectation], timeout: 10)
344344
}
345345

346+
func testInputRequest() throws {
347+
let mutation = """
348+
mutation addUser($user: UserInput!) {
349+
addUser(user: $user) {
350+
id,
351+
name
352+
}
353+
}
354+
"""
355+
let variables: [String: Map] = ["user": ["id": "123", "name": "bob"]]
356+
357+
let request = GraphQLRequest(
358+
query: mutation,
359+
variables: variables
360+
)
361+
362+
let expected = GraphQLResult(
363+
data: ["addUser": ["id": "123", "name": "bob"]]
364+
)
365+
366+
let expectation = XCTestExpectation()
367+
368+
api.execute(
369+
request: request,
370+
context: api.context,
371+
on: group
372+
).whenSuccess { result in
373+
XCTAssertEqual(result, expected)
374+
expectation.fulfill()
375+
}
376+
377+
wait(for: [expectation], timeout: 10)
378+
}
379+
346380
func testInputRecursive() throws {
347381
let mutation = """
348382
mutation addUser($user: UserInput!) {

0 commit comments

Comments
 (0)