Skip to content

Commit a29bb23

Browse files
authored
[Bug Fix][Amplify API] Fix the bug which fails to update the value to nil (#519)
* debug Model-GraphQL.swift to fix update nil bug * debug Model-GraphQL.swift to fix update nil bug * added a unit test * revert changes in Podfile.lock and Manifest.lock
1 parent da99e04 commit a29bb23

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

Amplify.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@
331331
B9FAA175238EFC5A009414B4 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9FAA174238EFC59009414B4 /* String+Extensions.swift */; };
332332
B9FAA180238FBB5D009414B4 /* Model+Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9FAA17F238FBB5D009414B4 /* Model+Array.swift */; };
333333
B9FB05F82383740D00DE1FD4 /* DataStoreStatement.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9FB05F72383740D00DE1FD4 /* DataStoreStatement.swift */; };
334+
D83C5160248964780091548E /* ModelGraphQLTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D83C515F248964780091548E /* ModelGraphQLTests.swift */; };
334335
FA0173352375F8A5005DDDFC /* LoggingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0173342375F8A5005DDDFC /* LoggingError.swift */; };
335336
FA0173372375FAA5005DDDFC /* HubError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0173362375FAA5005DDDFC /* HubError.swift */; };
336337
FA09337C23844E9F00C2FD5F /* GraphQLOperationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA09337B23844E9F00C2FD5F /* GraphQLOperationRequest.swift */; };
@@ -1088,6 +1089,7 @@
10881089
D2A0246D3621B503C915A5D1 /* Pods-AWSPlugins-AWSAuthService-AWSAPICategoryPlugin.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AWSPlugins-AWSAuthService-AWSAPICategoryPlugin.release.xcconfig"; path = "Target Support Files/Pods-AWSPlugins-AWSAuthService-AWSAPICategoryPlugin/Pods-AWSPlugins-AWSAuthService-AWSAPICategoryPlugin.release.xcconfig"; sourceTree = "<group>"; };
10891090
D5363CAF9EFAA822FED56808 /* Pods_Amplify_AWSPluginsCore_AWSPluginsTestConfigs_AWSPluginsTestCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Amplify_AWSPluginsCore_AWSPluginsTestConfigs_AWSPluginsTestCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; };
10901091
D5521D5FA66340943C39C451 /* Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSAPICategoryPlugin.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSAPICategoryPlugin.debug.xcconfig"; path = "Target Support Files/Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSAPICategoryPlugin/Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSAPICategoryPlugin.debug.xcconfig"; sourceTree = "<group>"; };
1092+
D83C515F248964780091548E /* ModelGraphQLTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelGraphQLTests.swift; sourceTree = "<group>"; };
10911093
DD2486414D63230FF39130C7 /* Pods-Amplify-AWSPluginsCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Amplify-AWSPluginsCore.debug.xcconfig"; path = "Target Support Files/Pods-Amplify-AWSPluginsCore/Pods-Amplify-AWSPluginsCore.debug.xcconfig"; sourceTree = "<group>"; };
10921094
DEEB82A328223C60557B75C1 /* Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSPinpointAnalyticsPlugin.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSPinpointAnalyticsPlugin.release.xcconfig"; path = "Target Support Files/Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSPinpointAnalyticsPlugin/Pods-Amplify-AmplifyAWSPlugins-AWSPluginsCore-AWSPinpointAnalyticsPlugin.release.xcconfig"; sourceTree = "<group>"; };
10931095
E1306F31E45EE7C6B6048F89 /* Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests.release.xcconfig"; path = "Target Support Files/Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests/Pods-AmplifyAWSPlugins-AWSPluginsCore-AWSS3StoragePlugin-AWSS3StoragePluginTests.release.xcconfig"; sourceTree = "<group>"; };
@@ -1490,6 +1492,7 @@
14901492
isa = PBXGroup;
14911493
children = (
14921494
2129BE2F2394828A006363A1 /* QueryPredicateGraphQLTests.swift */,
1495+
D83C515F248964780091548E /* ModelGraphQLTests.swift */,
14931496
);
14941497
path = Support;
14951498
sourceTree = "<group>";
@@ -3966,6 +3969,7 @@
39663969
6BBECD7423ADA9D100C8DFBE /* AmplifyAWSServiceConfigurationTests.swift in Sources */,
39673970
2129BE3C2394828B006363A1 /* GraphQLRequestModelTests.swift in Sources */,
39683971
2183A56523EA4A8400232880 /* GraphQLListQueryTests.swift in Sources */,
3972+
D83C5160248964780091548E /* ModelGraphQLTests.swift in Sources */,
39693973
);
39703974
runOnlyForDeploymentPostprocessing = 0;
39713975
};

AmplifyPlugins/Core/AWSPluginsCore/Model/Support/Model+GraphQL.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ extension Model {
2424

2525
// swiftlint:disable:next syntactic_sugar
2626
guard case .some(Optional<Any>.some(let value)) = fieldValue ?? nil else {
27-
input[name] = nil
27+
input.updateValue(nil, forKey: name)
2828
return
2929
}
3030

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
//
2+
// Copyright 2018-2020 Amazon.com,
3+
// Inc. or its affiliates. All Rights Reserved.
4+
//
5+
// SPDX-License-Identifier: Apache-2.0
6+
//
7+
8+
import XCTest
9+
@testable import Amplify
10+
@testable import AmplifyTestCommon
11+
@testable import AWSPluginsCore
12+
13+
class ModelGraphQLTests: XCTestCase {
14+
15+
/// - Given: a `Model` type
16+
/// - When:
17+
/// - the model is of type `Post`
18+
/// - the model is initialized with value except `updatedAt` is set to nil
19+
/// - Then:
20+
/// - check if the generated GraphQLInput is valid input:
21+
/// - fields other than `updatedAt` has the correct value in them
22+
/// - `updatedAt` is nil
23+
func testPostModelToGraphQLInputSuccess() throws {
24+
let date: Temporal.DateTime = .now()
25+
let status = PostStatus.published
26+
let post = Post(id: "id",
27+
title: "title",
28+
content: "content",
29+
createdAt: date,
30+
draft: true,
31+
rating: 5.0,
32+
status: status)
33+
34+
let graphQLInput = post.graphQLInput
35+
36+
XCTAssertEqual(graphQLInput["title"] as? String, post.title)
37+
XCTAssertEqual(graphQLInput["content"] as? String, post.content)
38+
XCTAssertEqual(graphQLInput["createdAt"] as? String, post.createdAt.iso8601String)
39+
XCTAssertEqual(graphQLInput["draft"] as? Bool, post.draft)
40+
XCTAssertEqual(graphQLInput["rating"] as? Double, post.rating)
41+
XCTAssertEqual(graphQLInput["status"] as? String, status.rawValue)
42+
43+
XCTAssertTrue(graphQLInput.keys.contains("updatedAt"))
44+
XCTAssertNil(graphQLInput["updatedAt"]!)
45+
}
46+
}

0 commit comments

Comments
 (0)