Skip to content

Commit cf53770

Browse files
Merge pull request #1450 from apollographql/fix/protocol-default-implementation
Fix request body creator non-default implementations getting hammered by compiler
2 parents 94fcd28 + cb96c4a commit cf53770

6 files changed

Lines changed: 43 additions & 20 deletions

File tree

Sources/Apollo/RequestBodyCreator.swift

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,24 @@ public protocol RequestBodyCreator {
88
///
99
/// - Parameters:
1010
/// - operation: The operation to use
11-
/// - sendOperationIdentifiers: Whether or not to send operation identifiers. Defaults to false.
11+
/// - sendOperationIdentifiers: Whether or not to send operation identifiers. Should default to `false`.
12+
/// - sendQueryDocument: Whether or not to send the full query document. Should default to `true`.
13+
/// - autoPersistQuery: Whether to use auto-persisted query information. Should default to `false`.
1214
/// - Returns: The created `GraphQLMap`
1315
func requestBody<Operation: GraphQLOperation>(for operation: Operation,
1416
sendOperationIdentifiers: Bool,
1517
sendQueryDocument: Bool,
1618
autoPersistQuery: Bool) -> GraphQLMap
1719
}
1820

21+
// MARK: - Default Implementation
22+
1923
extension RequestBodyCreator {
20-
/// Creates a `GraphQLMap` out of the passed-in operation
21-
///
22-
/// - Parameters:
23-
/// - operation: The operation to use
24-
/// - sendOperationIdentifiers: Whether or not to send operation identifiers. Defaults to false.
25-
/// - sendQueryDocument: Whether or not to send the full query document. Defaults to true.
26-
/// - autoPersistQuery: Whether to use auto-persisted query information. Defaults to false.
27-
/// - Returns: The created `GraphQLMap`
24+
2825
public func requestBody<Operation: GraphQLOperation>(for operation: Operation,
29-
sendOperationIdentifiers: Bool = false,
30-
sendQueryDocument: Bool = true,
31-
autoPersistQuery: Bool = false) -> GraphQLMap {
26+
sendOperationIdentifiers: Bool,
27+
sendQueryDocument: Bool,
28+
autoPersistQuery: Bool) -> GraphQLMap {
3229
var body: GraphQLMap = [
3330
"variables": operation.variables,
3431
"operationName": operation.operationName,

Sources/Apollo/UploadRequest.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ open class UploadRequest<Operation: GraphQLOperation>: HTTPRequest<Operation> {
6969
// Make sure all fields for files are set to null, or the server won't look
7070
// for the files in the rest of the form data
7171
let fieldsForFiles = Set(files.map { $0.fieldName }).sorted()
72-
var fields = self.requestBodyCreator.requestBody(for: operation, sendOperationIdentifiers: shouldSendOperationID)
72+
var fields = self.requestBodyCreator.requestBody(for: operation,
73+
sendOperationIdentifiers: shouldSendOperationID,
74+
sendQueryDocument: true,
75+
autoPersistQuery: false)
7376
var variables = fields["variables"] as? GraphQLMap ?? GraphQLMap()
7477
for fieldName in fieldsForFiles {
7578
if

Sources/ApolloWebSocket/WebSocketTransport.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,10 @@ public class WebSocketTransport {
270270
}
271271

272272
func sendHelper<Operation: GraphQLOperation>(operation: Operation, resultHandler: @escaping (_ result: Result<JSONObject, Error>) -> Void) -> String? {
273-
let body = requestBodyCreator.requestBody(for: operation, sendOperationIdentifiers: self.sendOperationIdentifiers)
273+
let body = requestBodyCreator.requestBody(for: operation,
274+
sendOperationIdentifiers: self.sendOperationIdentifiers,
275+
sendQueryDocument: true,
276+
autoPersistQuery: false)
274277
let sequenceNumber = "\(sequenceNumberCounter.increment())"
275278

276279
guard let message = OperationMessage(payload: body, id: sequenceNumber).rawMessage else {

Tests/ApolloTests/GETTransformerTests.swift

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ class GETTransformerTests: XCTestCase {
1717

1818
func testEncodingQueryWithSingleParameter() {
1919
let operation = HeroNameQuery(episode: .empire)
20-
let body = requestBodyCreator.requestBody(for: operation, sendOperationIdentifiers: false)
20+
let body = requestBodyCreator.requestBody(for: operation,
21+
sendOperationIdentifiers: false,
22+
sendQueryDocument: true,
23+
autoPersistQuery: false)
2124

2225
let transformer = GraphQLGETTransformer(body: body, url: self.url)
2326

@@ -28,7 +31,10 @@ class GETTransformerTests: XCTestCase {
2831

2932
func testEncodingQueryWithMoreThanOneParameterIncludingNonHashableValue() throws {
3033
let operation = HeroNameTypeSpecificConditionalInclusionQuery(episode: .jedi, includeName: true)
31-
let body = requestBodyCreator.requestBody(for: operation, sendOperationIdentifiers: false)
34+
let body = requestBodyCreator.requestBody(for: operation,
35+
sendOperationIdentifiers: false,
36+
sendQueryDocument: true,
37+
autoPersistQuery: false)
3238

3339
let transformer = GraphQLGETTransformer(body: body, url: self.url)
3440

@@ -195,7 +201,10 @@ class GETTransformerTests: XCTestCase {
195201

196202
func testEncodingQueryWithNullDefaultParameter() {
197203
let operation = HeroNameQuery()
198-
let body = requestBodyCreator.requestBody(for: operation, sendOperationIdentifiers: false)
204+
let body = requestBodyCreator.requestBody(for: operation,
205+
sendOperationIdentifiers: false,
206+
sendQueryDocument: true,
207+
autoPersistQuery: false)
199208

200209
let transformer = GraphQLGETTransformer(body: body, url: self.url)
201210

Tests/ApolloTests/RequestBodyCreatorTests.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,25 @@ class RequestBodyCreatorTests: XCTestCase {
1515
private let customRequestBodyCreator = TestCustomRequestBodyCreator()
1616
private let apolloRequestBodyCreator = ApolloRequestBodyCreator()
1717

18+
func create<Operation: GraphQLOperation>(with creator: RequestBodyCreator, for query: Operation) -> GraphQLMap {
19+
creator.requestBody(for: query,
20+
sendOperationIdentifiers: false,
21+
sendQueryDocument: true,
22+
autoPersistQuery: false)
23+
}
24+
1825
// MARK: - Tests
1926

2027
func testRequestBodyWithApolloRequestBodyCreator() {
2128
let query = HeroNameQuery()
22-
let req = apolloRequestBodyCreator.requestBody(for: query, sendOperationIdentifiers: false)
29+
let req = self.create(with: apolloRequestBodyCreator, for: query)
2330

2431
XCTAssertEqual(query.queryDocument, req["query"] as? String)
2532
}
2633

2734
func testRequestBodyWithCustomRequestBodyCreator() {
2835
let query = HeroNameQuery()
29-
let req = customRequestBodyCreator.requestBody(for: query, sendOperationIdentifiers: false)
36+
let req = self.create(with: customRequestBodyCreator, for: query)
3037

3138
XCTAssertEqual(query.queryDocument, req["test_query"] as? String)
3239
}

Tests/ApolloTests/TestCustomRequestBodyCreator.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
import Apollo
1010

1111
struct TestCustomRequestBodyCreator: RequestBodyCreator {
12-
public func requestBody<Operation: GraphQLOperation>(for operation: Operation, sendOperationIdentifiers: Bool) -> GraphQLMap {
12+
func requestBody<Operation: GraphQLOperation>(
13+
for operation: Operation,
14+
sendOperationIdentifiers: Bool,
15+
sendQueryDocument: Bool, autoPersistQuery: Bool) -> GraphQLMap {
16+
1317
var body: GraphQLMap = [
1418
"test_variables": operation.variables,
1519
"test_operationName": operation.operationName,

0 commit comments

Comments
 (0)