Skip to content

Commit 7702aa2

Browse files
Merge pull request #1644 from apollographql/fix/upload-additional-headers
Fix uploads not getting `additionalHeaders`
2 parents 5245283 + 7ae144c commit 7702aa2

2 files changed

Lines changed: 40 additions & 21 deletions

File tree

Sources/Apollo/RequestChainNetworkTransport.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ open class RequestChainNetworkTransport: NetworkTransport {
6969
contextIdentifier: contextIdentifier,
7070
clientName: self.clientName,
7171
clientVersion: self.clientVersion,
72-
additionalHeaders: additionalHeaders,
72+
additionalHeaders: self.additionalHeaders,
7373
cachePolicy: cachePolicy,
7474
autoPersistQueries: self.autoPersistQueries,
7575
useGETForQueries: self.useGETForQueries,
@@ -110,16 +110,20 @@ extension RequestChainNetworkTransport: UploadingNetworkTransport {
110110
/// - Parameters:
111111
/// - operation: The operation to create a request for
112112
/// - files: The files you wish to upload
113+
/// - manualBoundary: [optional] A manually set boundary for your upload request. Defaults to nil.
113114
/// - Returns: The created request.
114115
open func constructUploadRequest<Operation: GraphQLOperation>(
115116
for operation: Operation,
116-
with files: [GraphQLFile]) -> HTTPRequest<Operation> {
117+
with files: [GraphQLFile],
118+
manualBoundary: String? = nil) -> HTTPRequest<Operation> {
117119

118120
UploadRequest(graphQLEndpoint: self.endpointURL,
119121
operation: operation,
120122
clientName: self.clientName,
121123
clientVersion: self.clientVersion,
124+
additionalHeaders: self.additionalHeaders,
122125
files: files,
126+
manualBoundary: manualBoundary,
123127
requestBodyCreator: self.requestBodyCreator)
124128
}
125129

Tests/ApolloTests/UploadTests.swift

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ class UploadTests: XCTestCase {
1212
let store = ApolloStore()
1313
let provider = LegacyInterceptorProvider(store: store)
1414
let transport = RequestChainNetworkTransport(interceptorProvider: provider,
15-
endpointURL: self.uploadClientURL)
15+
endpointURL: self.uploadClientURL,
16+
additionalHeaders: ["headerKey": "headerValue"])
17+
transport.clientName = "test"
18+
transport.clientVersion = "test"
1619

1720
return ApolloClient(networkTransport: transport, store: store)
1821
}()
@@ -295,12 +298,17 @@ class UploadTests: XCTestCase {
295298
mimeType: "text/plain",
296299
fileURL: alphaFileUrl)
297300
let operation = UploadOneFileMutation(file: alphaFile.originalName)
298-
let uploadRequest = UploadRequest(graphQLEndpoint: TestURL.mockServer.url,
299-
operation: operation,
300-
clientName: "test",
301-
clientVersion: "test",
302-
files: [alphaFile],
303-
manualBoundary: "TEST.BOUNDARY")
301+
302+
let transport = try XCTUnwrap(self.client.networkTransport as? RequestChainNetworkTransport)
303+
304+
let httpRequest = transport.constructUploadRequest(for: operation,
305+
with: [alphaFile],
306+
manualBoundary: "TEST.BOUNDARY")
307+
let uploadRequest = try XCTUnwrap(httpRequest as? UploadRequest)
308+
309+
let urlRequest = try uploadRequest.toURLRequest()
310+
XCTAssertEqual(urlRequest.allHTTPHeaderFields?["headerKey"], "headerValue")
311+
304312
let formData = try uploadRequest.requestMultipartFormData()
305313
let stringToCompare = try formData.toTestString()
306314

@@ -340,12 +348,16 @@ Alpha file content.
340348

341349
let files = [alphaFile, betaFile]
342350
let operation = UploadMultipleFilesToTheSameParameterMutation(files: files.map { $0.originalName })
343-
let uploadRequest = UploadRequest(graphQLEndpoint: TestURL.mockServer.url,
344-
operation: operation,
345-
clientName: "test",
346-
clientVersion: "test",
347-
files: files,
348-
manualBoundary: "TEST.BOUNDARY")
351+
let transport = try XCTUnwrap(self.client.networkTransport as? RequestChainNetworkTransport)
352+
353+
let httpRequest = transport.constructUploadRequest(for: operation,
354+
with: [alphaFile, betaFile],
355+
manualBoundary: "TEST.BOUNDARY")
356+
let uploadRequest = try XCTUnwrap(httpRequest as? UploadRequest)
357+
358+
let urlRequest = try uploadRequest.toURLRequest()
359+
XCTAssertEqual(urlRequest.allHTTPHeaderFields?["headerKey"], "headerValue")
360+
349361
let multipartData = try uploadRequest.requestMultipartFormData()
350362
let stringToCompare = try multipartData.toTestString()
351363

@@ -394,12 +406,15 @@ Bravo file content.
394406
mimeType: "text/plain",
395407
fileURL: charlieFileUrl)
396408

397-
let uploadRequest = UploadRequest(graphQLEndpoint: TestURL.mockServer.url,
398-
operation: HeroNameQuery(),
399-
clientName: "test",
400-
clientVersion: "test",
401-
files: [alphaFile, betaFile, charlieFile],
402-
manualBoundary: "TEST.BOUNDARY")
409+
let transport = try XCTUnwrap(self.client.networkTransport as? RequestChainNetworkTransport)
410+
411+
let httpRequest = transport.constructUploadRequest(for: HeroNameQuery(),
412+
with: [alphaFile, betaFile, charlieFile],
413+
manualBoundary: "TEST.BOUNDARY")
414+
let uploadRequest = try XCTUnwrap(httpRequest as? UploadRequest)
415+
416+
let urlRequest = try uploadRequest.toURLRequest()
417+
XCTAssertEqual(urlRequest.allHTTPHeaderFields?["headerKey"], "headerValue")
403418

404419
let multipartData = try uploadRequest.requestMultipartFormData()
405420
let stringToCompare = try multipartData.toTestString()

0 commit comments

Comments
 (0)