forked from apollographql/apollo-ios
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestCustomRequestCreator.swift
More file actions
62 lines (52 loc) · 2.22 KB
/
TestCustomRequestCreator.swift
File metadata and controls
62 lines (52 loc) · 2.22 KB
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
//
// TestCustomRequestCreator.swift
// Apollo
//
// Created by Kim de Vos on 02/10/2019.
// Copyright © 2019 Apollo GraphQL. All rights reserved.
//
import Apollo
fileprivate struct TestCustomRequestCreator: RequestCreator {
public func requestBody<Operation: GraphQLOperation>(for operation: Operation, sendOperationIdentifiers: Bool) -> GraphQLMap {
var body: GraphQLMap = [
"test_variables": operation.variables,
"test_operationName": operation.operationName,
]
if sendOperationIdentifiers {
guard let operationIdentifier = operation.operationIdentifier else {
preconditionFailure("To send operation identifiers, Apollo types must be generated with operationIdentifiers")
}
body["test_id"] = operationIdentifier
} else {
body["test_query"] = operation.queryDocument
}
return body
}
public func requestMultipartFormData<Operation: GraphQLOperation>(for operation: Operation,
files: [GraphQLFile],
sendOperationIdentifiers: Bool,
serializationFormat: JSONSerializationFormat.Type,
manualBoundary: String?) throws -> MultipartFormData {
let formData: MultipartFormData
if let boundary = manualBoundary {
formData = MultipartFormData(boundary: boundary)
} else {
formData = MultipartFormData()
}
let fields = requestBody(for: operation, sendOperationIdentifiers: false)
for (name, data) in fields {
if let data = data as? GraphQLMap {
let data = try serializationFormat.serialize(value: data)
formData.appendPart(data: data, name: name)
} else if let data = data as? String {
try formData.appendPart(string: data, name: name)
} else {
try formData.appendPart(string: data.debugDescription, name: name)
}
}
files.forEach {
formData.appendPart(inputStream: $0.inputStream, contentLength: $0.contentLength, name: $0.fieldName, contentType: $0.mimeType, filename: $0.originalName)
}
return formData
}
}