360 lines
17 KiB
Swift
360 lines
17 KiB
Swift
//
|
|
// Copyright Amazon.com Inc. or its affiliates.
|
|
// All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
import Amplify
|
|
import XCTest
|
|
|
|
@testable import AWSPinpointAnalyticsPlugin
|
|
|
|
// swiftlint:disable:next type_name
|
|
class AWSPinpointAnalyticsPluginConfigurationTests: XCTestCase {
|
|
let testAppId = "testAppId"
|
|
let appId: JSONValue = "testAppId"
|
|
let testRegion = "us-east-1"
|
|
let region: JSONValue = "us-east-1"
|
|
let testAutoFlushInterval = 300
|
|
let autoFlushInterval: JSONValue = 300
|
|
let testTrackAppSession = false
|
|
let trackAppSession: JSONValue = false
|
|
let testAutoSessionTrackingInterval = 100
|
|
let autoSessionTrackingInterval: JSONValue = 100
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.appIdConfigKey, "testAppId"),
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, "us-east-1")
|
|
)
|
|
|
|
func testConfigureSuccess_withTargetingConfiguration() throws {
|
|
let regionConfiguration = JSONValue(dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, "us-east-1"))
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration),
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointTargetingConfigKey, regionConfiguration)
|
|
)
|
|
|
|
do {
|
|
let config = try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)
|
|
XCTAssertNotNil(config)
|
|
XCTAssertEqual(config.appId, testAppId)
|
|
XCTAssertEqual(config.region, testRegion)
|
|
XCTAssertEqual(config.autoFlushEventsInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoFlushEventsInterval)
|
|
XCTAssertEqual(config.trackAppSessions,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultTrackAppSession)
|
|
XCTAssertEqual(config.autoSessionTrackingInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoSessionTrackingInterval)
|
|
} catch {
|
|
XCTFail("Failed to instantiate analytics plugin configuration")
|
|
}
|
|
}
|
|
|
|
func testConfigureSuccess_withoutTargetingConfiguration() throws {
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
do {
|
|
let config = try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)
|
|
XCTAssertNotNil(config)
|
|
XCTAssertEqual(config.appId, testAppId)
|
|
XCTAssertEqual(config.region, testRegion)
|
|
XCTAssertEqual(config.autoFlushEventsInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoFlushEventsInterval)
|
|
XCTAssertEqual(config.trackAppSessions,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultTrackAppSession)
|
|
XCTAssertEqual(config.autoSessionTrackingInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoSessionTrackingInterval)
|
|
} catch {
|
|
XCTFail("Failed to instantiate analytics plugin configuration")
|
|
}
|
|
}
|
|
|
|
func testConfigureWithAutoFlushEventsIntervalSuccess() {
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration),
|
|
(AWSPinpointAnalyticsPluginConfiguration.autoFlushEventsIntervalKey, autoFlushInterval)
|
|
)
|
|
|
|
do {
|
|
let config = try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)
|
|
XCTAssertNotNil(config)
|
|
XCTAssertEqual(config.appId, testAppId)
|
|
XCTAssertEqual(config.region, testRegion)
|
|
XCTAssertEqual(config.autoFlushEventsInterval, testAutoFlushInterval)
|
|
XCTAssertEqual(config.trackAppSessions,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultTrackAppSession)
|
|
XCTAssertEqual(config.autoSessionTrackingInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoSessionTrackingInterval)
|
|
} catch {
|
|
XCTFail("Failed to instantiate analytics plugin configuration")
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForInvalidAutoFlushEventsIntervalValue() {
|
|
let autoFlushInterval = JSONValue(integerLiteral: -100)
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration),
|
|
(AWSPinpointAnalyticsPluginConfiguration.autoFlushEventsIntervalKey, autoFlushInterval)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription,
|
|
AnalyticsPluginErrorConstant.invalidAutoFlushEventsInterval.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureWithTrackAppSessionSuccess() {
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration),
|
|
(AWSPinpointAnalyticsPluginConfiguration.trackAppSessionsKey, trackAppSession)
|
|
)
|
|
|
|
do {
|
|
let config = try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)
|
|
XCTAssertNotNil(config)
|
|
XCTAssertEqual(config.appId, testAppId)
|
|
XCTAssertEqual(config.region, testRegion)
|
|
XCTAssertEqual(config.autoFlushEventsInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoFlushEventsInterval)
|
|
XCTAssertEqual(config.trackAppSessions, testTrackAppSession)
|
|
XCTAssertEqual(config.autoSessionTrackingInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoSessionTrackingInterval)
|
|
} catch {
|
|
XCTFail("Failed to instantiate analytics plugin configuration")
|
|
}
|
|
}
|
|
|
|
func testConfigureWithAutoSessionTrackingIntervalSuccess() {
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration),
|
|
(AWSPinpointAnalyticsPluginConfiguration.autoSessionTrackingIntervalKey, autoSessionTrackingInterval)
|
|
)
|
|
|
|
do {
|
|
let config = try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)
|
|
XCTAssertNotNil(config)
|
|
XCTAssertEqual(config.appId, testAppId)
|
|
XCTAssertEqual(config.region, testRegion)
|
|
XCTAssertEqual(config.autoFlushEventsInterval,
|
|
AWSPinpointAnalyticsPluginConfiguration.defaultAutoFlushEventsInterval)
|
|
XCTAssertEqual(config.trackAppSessions, AWSPinpointAnalyticsPluginConfiguration.defaultTrackAppSession)
|
|
XCTAssertEqual(config.autoSessionTrackingInterval, testAutoSessionTrackingInterval)
|
|
} catch {
|
|
XCTFail("Failed to instantiate analytics plugin configuration")
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForInvalidAutoSessionTrackingValue() {
|
|
let autoSessionTrackingInterval = JSONValue(integerLiteral: -100)
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration),
|
|
(AWSPinpointAnalyticsPluginConfiguration.autoSessionTrackingIntervalKey, autoSessionTrackingInterval)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription,
|
|
AnalyticsPluginErrorConstant.invalidAutoSessionTrackingInterval.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingConfigurationObject() {
|
|
let analyticsPluginConfig = JSONValue(stringLiteral: "notADictionaryLiteral")
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription,
|
|
AnalyticsPluginErrorConstant.configurationObjectExpected.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingPinpointAnalyticsConfiguration() {
|
|
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, region)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription,
|
|
AnalyticsPluginErrorConstant.missingPinpointAnalyicsConfiguration.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingPinpointAnalyticsConfigurationObject() {
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(stringLiteral: "notDictionary")
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription,
|
|
AnalyticsPluginErrorConstant.pinpointAnalyticsConfigurationExpected.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingPinpointAnalyticsAppId() {
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, region))
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription, AnalyticsPluginErrorConstant.missingAppId.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForEmptyPinpointAnalyticsAppIdValue() {
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.appIdConfigKey, ""),
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, region)
|
|
)
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription, AnalyticsPluginErrorConstant.emptyAppId.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForInvalidPinpointAnalyticsAppIdValue() {
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.appIdConfigKey, 1),
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, region)
|
|
)
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription, AnalyticsPluginErrorConstant.invalidAppId.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForMissingPinpointAnalyticsRegion() {
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.appIdConfigKey, appId))
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription, AnalyticsPluginErrorConstant.missingRegion.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForEmptyPinpointAnalyticsRegionValue() {
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.appIdConfigKey, appId),
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, "")
|
|
)
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription, AnalyticsPluginErrorConstant.emptyRegion.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testConfigureThrowsErrorForInvalidPinpointAnalyticsRegionValue() {
|
|
let pinpointAnalyticsPluginConfiguration = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.appIdConfigKey, appId),
|
|
(AWSPinpointAnalyticsPluginConfiguration.regionConfigKey, "")
|
|
)
|
|
let analyticsPluginConfig = JSONValue(
|
|
dictionaryLiteral:
|
|
(AWSPinpointAnalyticsPluginConfiguration.pinpointAnalyticsConfigKey, pinpointAnalyticsPluginConfiguration)
|
|
)
|
|
|
|
XCTAssertThrowsError(try AWSPinpointAnalyticsPluginConfiguration(analyticsPluginConfig)) { error in
|
|
guard case let PluginError.pluginConfigurationError(errorDescription, _, _) = error else {
|
|
XCTFail("Expected PluginError pluginConfigurationError, got: \(error)")
|
|
return
|
|
}
|
|
XCTAssertEqual(errorDescription, AnalyticsPluginErrorConstant.emptyRegion.errorDescription)
|
|
}
|
|
}
|
|
|
|
func testThrowsOnMissingConfig() throws {
|
|
let plugin = AWSPinpointAnalyticsPlugin()
|
|
try Amplify.add(plugin: plugin)
|
|
|
|
let categoryConfig = AnalyticsCategoryConfiguration(plugins: ["NonExistentPlugin": true])
|
|
let amplifyConfig = AmplifyConfiguration(analytics: categoryConfig)
|
|
do {
|
|
try Amplify.configure(amplifyConfig)
|
|
XCTFail("Should have thrown a pluginConfigurationError if not supplied with a plugin-specific config.")
|
|
} catch {
|
|
guard case PluginError.pluginConfigurationError = error else {
|
|
XCTFail("Should have thrown a pluginConfigurationError if not supplied with a plugin-specific config.")
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|