From 93b93f4d381834c43c2118f93e2d525f07326b69 Mon Sep 17 00:00:00 2001 From: Yuri Ramocan Date: Sat, 29 Jun 2024 23:14:00 -0400 Subject: [PATCH 1/2] Include variables in requestBody if at least one value is non-nil --- Sources/Apollo/RequestBodyCreator.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Sources/Apollo/RequestBodyCreator.swift b/Sources/Apollo/RequestBodyCreator.swift index 2692c2d4cf..e8a3a9001e 100644 --- a/Sources/Apollo/RequestBodyCreator.swift +++ b/Sources/Apollo/RequestBodyCreator.swift @@ -27,10 +27,13 @@ extension RequestBodyCreator { sendQueryDocument: Bool, autoPersistQuery: Bool) -> GraphQLMap { var body: GraphQLMap = [ - "variables": operation.variables, "operationName": operation.operationName, ] + if let variables = operation.variables?.compactMapValues({ $0 }) { + body["variables"] = variables + } + if sendOperationIdentifiers { guard let operationIdentifier = operation.operationIdentifier else { preconditionFailure("To send operation identifiers, Apollo types must be generated with operationIdentifiers") From 6e410d29288f4e51838d6364d60b4568baa79127 Mon Sep 17 00:00:00 2001 From: Yuri Ramocan Date: Sun, 30 Jun 2024 00:01:35 -0400 Subject: [PATCH 2/2] Add tests for variable field omission --- Tests/ApolloTests/RequestBodyCreatorTests.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Tests/ApolloTests/RequestBodyCreatorTests.swift b/Tests/ApolloTests/RequestBodyCreatorTests.swift index e0deb585c0..f6e0c12eb1 100644 --- a/Tests/ApolloTests/RequestBodyCreatorTests.swift +++ b/Tests/ApolloTests/RequestBodyCreatorTests.swift @@ -37,4 +37,19 @@ class RequestBodyCreatorTests: XCTestCase { XCTAssertEqual(query.queryDocument, req["test_query"] as? String) } + + func testRequestBodyOmitsVariablesFieldWhenValuesAreNil() { + let query = HeroNameQuery(episode: nil) + let req = self.create(with: apolloRequestBodyCreator, for: query) + + XCTAssertFalse(req.keys.contains(where: { $0 == "variables" })) + } + + func testRequestBodyIncludesVariablesFieldWhenItContainsNonNilValues() { + let episode = Episode.empire + let query = HeroNameQuery(episode: episode) + let req = self.create(with: apolloRequestBodyCreator, for: query) + + XCTAssertEqual(req["variables"], ["episode": episode.rawValue]) + } }