Skip to content

Commit bfd8281

Browse files
palpatimlawmicha
andauthored
feat: Add AmplifyConfiguration file-based initializer (#707)
refs:#460 Co-authored-by: Michael Law <[email protected]>
1 parent f0acf51 commit bfd8281

File tree

6 files changed

+65
-6
lines changed

6 files changed

+65
-6
lines changed

Amplify.xcodeproj/project.pbxproj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@
415415
FA6BC87F235F5DAE0001A882 /* APICategoryInterceptorBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6BC87E235F5DAE0001A882 /* APICategoryInterceptorBehavior.swift */; };
416416
FA76A2D12342B1A600B91ADB /* StorageCategory+HubPayloadEventName.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA76A2D02342B1A600B91ADB /* StorageCategory+HubPayloadEventName.swift */; };
417417
FA76A2D32342B47100B91ADB /* HubPayloadEventName.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA76A2D22342B47100B91ADB /* HubPayloadEventName.swift */; };
418+
FA87609324E45091004148C6 /* AmplifyConfigurationInitFromFileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA87609024E44CCC004148C6 /* AmplifyConfigurationInitFromFileTests.swift */; };
418419
FA8EE779238627040097E4F1 /* Model+ModelName.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8EE778238627040097E4F1 /* Model+ModelName.swift */; };
419420
FA8EE77D238627350097E4F1 /* Model+Subscript.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8EE77C238627350097E4F1 /* Model+Subscript.swift */; };
420421
FA8EE781238628490097E4F1 /* Persistable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8EE780238628490097E4F1 /* Persistable.swift */; };
@@ -1205,6 +1206,7 @@
12051206
FA6BC87E235F5DAE0001A882 /* APICategoryInterceptorBehavior.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APICategoryInterceptorBehavior.swift; sourceTree = "<group>"; };
12061207
FA76A2D02342B1A600B91ADB /* StorageCategory+HubPayloadEventName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StorageCategory+HubPayloadEventName.swift"; sourceTree = "<group>"; };
12071208
FA76A2D22342B47100B91ADB /* HubPayloadEventName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HubPayloadEventName.swift; sourceTree = "<group>"; };
1209+
FA87609024E44CCC004148C6 /* AmplifyConfigurationInitFromFileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplifyConfigurationInitFromFileTests.swift; sourceTree = "<group>"; };
12081210
FA8EE772238621320097E4F1 /* AnyModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyModelTests.swift; sourceTree = "<group>"; };
12091211
FA8EE776238626D60097E4F1 /* AnyModel+Codable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AnyModel+Codable.swift"; sourceTree = "<group>"; };
12101212
FA8EE778238627040097E4F1 /* Model+ModelName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Model+ModelName.swift"; sourceTree = "<group>"; };
@@ -3028,9 +3030,10 @@
30283030
FACA35F32327FB14000E74F6 /* AmplifyFunctionalTests */ = {
30293031
isa = PBXGroup;
30303032
children = (
3031-
FA9D6C1D238DEEF900C7DD9F /* Hub */,
3032-
FACA35F42327FB14000E74F6 /* AmplifyConfigurationTests.swift */,
30333033
FACA35F62327FB14000E74F6 /* Info.plist */,
3034+
FA87609024E44CCC004148C6 /* AmplifyConfigurationInitFromFileTests.swift */,
3035+
FACA35F42327FB14000E74F6 /* AmplifyConfigurationTests.swift */,
3036+
FA9D6C1D238DEEF900C7DD9F /* Hub */,
30343037
);
30353038
path = AmplifyFunctionalTests;
30363039
sourceTree = "<group>";
@@ -4465,6 +4468,7 @@
44654468
buildActionMask = 2147483647;
44664469
files = (
44674470
FA9D6C1E238DEF0E00C7DD9F /* DefaultHubPluginPerformanceTestHelpers.swift in Sources */,
4471+
FA87609324E45091004148C6 /* AmplifyConfigurationInitFromFileTests.swift in Sources */,
44684472
FA9D6C1F238DEF1100C7DD9F /* SerialDispatcherPerformanceTests.swift in Sources */,
44694473
FA9D6C1B238DEEEB00C7DD9F /* ConcurrentDispatcherPerformanceTests.swift in Sources */,
44704474
FACA35F52327FB14000E74F6 /* AmplifyConfigurationTests.swift in Sources */,

Amplify/Core/Configuration/AmplifyConfiguration.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ public struct AmplifyConfiguration: Codable {
6161
self.predictions = predictions
6262
self.storage = storage
6363
}
64+
65+
/// Initialize `AmplifyConfiguration` by loading it from a URL representing the configuration file.
66+
public init(configurationFile url: URL) throws {
67+
self = try AmplifyConfiguration.loadAmplifyConfiguration(from: url)
68+
}
69+
6470
}
6571

6672
// MARK: - Configure

Amplify/Core/Configuration/Internal/AmplifyConfigurationInitialization.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@ extension AmplifyConfiguration {
2828
self = try AmplifyConfiguration.loadAmplifyConfiguration(from: url)
2929
}
3030

31-
init(configurationFile url: URL) throws {
32-
self = try AmplifyConfiguration.loadAmplifyConfiguration(from: url)
33-
}
34-
3531
static func loadAmplifyConfiguration(from url: URL) throws -> AmplifyConfiguration {
3632
let fileData: Data
3733
do {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
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+
import Amplify
10+
11+
/// Test the public AmplifyConfiguration initializer. Note that this means we must not import
12+
/// Amplify as `@testable`. That means we cannot `Amplify.reset()`, which means we can only have
13+
/// one test in this file. Further, this means we need to ensure that other tests do call
14+
/// `Amplify.reset()` in their static `setUp()` and `tearDown()` methods.
15+
class AmplifyConfigurationInitFromFileTests: XCTestCase {
16+
17+
func testInitFromFile() throws {
18+
let configString = """
19+
{
20+
"UserAgent": "aws-amplify-cli/2.0",
21+
"Version": "1.0"
22+
}
23+
"""
24+
25+
let configData = configString.data(using: .utf8)!
26+
let configURL = FileManager
27+
.default
28+
.temporaryDirectory
29+
.appendingPathComponent("testconfig.json")
30+
try configData.write(to: configURL)
31+
32+
var config: AmplifyConfiguration!
33+
XCTAssertNoThrow(config = try AmplifyConfiguration(configurationFile: configURL))
34+
XCTAssertNoThrow(try Amplify.configure(config))
35+
}
36+
37+
}

AmplifyFunctionalTests/AmplifyConfigurationTests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ import XCTest
1212

1313
class AmplifyConfigurationTests: XCTestCase {
1414

15+
override static func setUp() {
16+
Amplify.reset()
17+
}
18+
19+
override static func tearDown() {
20+
Amplify.reset()
21+
}
22+
1523
override func setUp() {
1624
Amplify.reset()
1725
}

AmplifyFunctionalTests/Hub/SerialDispatcherPerformanceTests.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ class SerialDispatcherPerformanceTests: XCTestCase {
1212

1313
let dispatcherTypeUnderTest = SerialDispatcher.self
1414

15+
override static func setUp() {
16+
Amplify.reset()
17+
}
18+
19+
override static func tearDown() {
20+
Amplify.reset()
21+
}
22+
1523
override func setUp() {
1624
Amplify.reset()
1725
let config = AmplifyConfiguration()

0 commit comments

Comments
 (0)