Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementing Attachments #18

Merged
merged 4 commits into from
Jun 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AmazonConnectChatIOS/.gitignore → .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
/Packages/
.swiftpm/configuration/registries.json
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
contents.xcworkspacedata

# Xcode files
xcuserdata/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,17 @@
F74726442BF418F0002B278E /* MetricsClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74726432BF418F0002B278E /* MetricsClient.swift */; };
F74726472BF41948002B278E /* MetricsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74726462BF41948002B278E /* MetricsManager.swift */; };
F74726522BF6F018002B278E /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74726512BF6F018002B278E /* Config.swift */; };
F76BB94D2C1898BE0005C3EC /* APIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76BB94C2C1898BE0005C3EC /* APIClient.swift */; };
F76BB9532C18F84D0005C3EC /* MockAPIClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76BB9522C18F84D0005C3EC /* MockAPIClient.swift */; };
F76BB9562C1900480005C3EC /* APIClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F76BB9552C1900480005C3EC /* APIClientTests.swift */; };
F7B0747C2BDB298400E8B805 /* HeartbeatManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B0747B2BDB298400E8B805 /* HeartbeatManager.swift */; };
F7B0747D2BDB298400E8B805 /* HeartbeatManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B0747B2BDB298400E8B805 /* HeartbeatManager.swift */; };
F7B0747F2BDB2A0700E8B805 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B0747E2BDB2A0700E8B805 /* Notifications.swift */; };
F7B074802BDB2A0700E8B805 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B0747E2BDB2A0700E8B805 /* Notifications.swift */; };
F7B074822BDB2D3A00E8B805 /* NetworkConnectionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B074812BDB2D3A00E8B805 /* NetworkConnectionManager.swift */; };
F7B074832BDB2D3A00E8B805 /* NetworkConnectionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B074812BDB2D3A00E8B805 /* NetworkConnectionManager.swift */; };
F7B4A1282C1157B0005C7921 /* AttachmentTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B4A1272C1157B0005C7921 /* AttachmentTypes.swift */; };
F7B4A1362C14FDA9005C7921 /* MockAttachmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B4A1352C14FDA9005C7921 /* MockAttachmentManager.swift */; };
F7B4A1382C15649B005C7921 /* MockHttpClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B4A1372C15649B005C7921 /* MockHttpClient.swift */; };
F7B4A13A2C17AE43005C7921 /* TestUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B4A1392C17AE43005C7921 /* TestUtils.swift */; };
F7B4A13C2C17E3C3005C7921 /* MockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B4A13B2C17E3C3005C7921 /* MockURLSession.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -111,9 +116,17 @@
F74726432BF418F0002B278E /* MetricsClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricsClient.swift; sourceTree = "<group>"; };
F74726462BF41948002B278E /* MetricsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricsManager.swift; sourceTree = "<group>"; };
F74726512BF6F018002B278E /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = "<group>"; };
F76BB94C2C1898BE0005C3EC /* APIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIClient.swift; sourceTree = "<group>"; };
F76BB9522C18F84D0005C3EC /* MockAPIClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAPIClient.swift; sourceTree = "<group>"; };
F76BB9552C1900480005C3EC /* APIClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIClientTests.swift; sourceTree = "<group>"; };
F7B0747B2BDB298400E8B805 /* HeartbeatManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeartbeatManager.swift; sourceTree = "<group>"; };
F7B0747E2BDB2A0700E8B805 /* Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notifications.swift; sourceTree = "<group>"; };
F7B074812BDB2D3A00E8B805 /* NetworkConnectionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkConnectionManager.swift; sourceTree = "<group>"; };
F7B4A1272C1157B0005C7921 /* AttachmentTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentTypes.swift; sourceTree = "<group>"; };
F7B4A1352C14FDA9005C7921 /* MockAttachmentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockAttachmentManager.swift; sourceTree = "<group>"; };
F7B4A1372C15649B005C7921 /* MockHttpClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockHttpClient.swift; sourceTree = "<group>"; };
F7B4A1392C17AE43005C7921 /* TestUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestUtils.swift; sourceTree = "<group>"; };
F7B4A13B2C17E3C3005C7921 /* MockURLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockURLSession.swift; sourceTree = "<group>"; };
FA5FA5BCFCE22047DCA91060 /* Pods-AmazonConnectChatIOS-AmazonConnectChatIOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AmazonConnectChatIOS-AmazonConnectChatIOSTests.debug.xcconfig"; path = "Target Support Files/Pods-AmazonConnectChatIOS-AmazonConnectChatIOSTests/Pods-AmazonConnectChatIOS-AmazonConnectChatIOSTests.debug.xcconfig"; sourceTree = "<group>"; };
FCB565490D66D6F8C4BB3C09 /* Pods-AmazonConnectChatIOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AmazonConnectChatIOS.release.xcconfig"; path = "Target Support Files/Pods-AmazonConnectChatIOS/Pods-AmazonConnectChatIOS.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
Expand Down Expand Up @@ -160,10 +173,9 @@
7E2336E12BFE7D7400E6C4B7 /* Network */ = {
isa = PBXGroup;
children = (
F76BB9542C19000F0005C3EC /* Mocks */,
7E2336E22BFE7D7400E6C4B7 /* AWSClientTests.swift */,
7E2336E32BFE7D7400E6C4B7 /* MockAWSClient.swift */,
7E2336E42BFE7D7400E6C4B7 /* MockWebSocketManager.swift */,
7E2336E52BFE7D7400E6C4B7 /* MockAWSConnectParticipant.swift */,
F76BB9552C1900480005C3EC /* APIClientTests.swift */,
);
path = Network;
sourceTree = "<group>";
Expand All @@ -172,6 +184,8 @@
isa = PBXGroup;
children = (
7E2336E72BFE7D7400E6C4B7 /* MockConnectionDetailsProvider.swift */,
F7B4A1352C14FDA9005C7921 /* MockAttachmentManager.swift */,
F7B4A1392C17AE43005C7921 /* TestUtils.swift */,
);
path = utils;
sourceTree = "<group>";
Expand Down Expand Up @@ -249,6 +263,7 @@
7ED5DEC12BEAF933001693FC /* TranscriptItem.swift */,
7ED5DEC32BEAFD42001693FC /* Event.swift */,
7ED5DEC52BEB38B8001693FC /* Metadata.swift */,
F7B4A1272C1157B0005C7921 /* AttachmentTypes.swift */,
);
path = Models;
sourceTree = "<group>";
Expand All @@ -263,6 +278,7 @@
F74726432BF418F0002B278E /* MetricsClient.swift */,
F74726462BF41948002B278E /* MetricsManager.swift */,
7EF438492BFF056400E7F8E9 /* AWSConnectParticipantAdapter.swift */,
F76BB94C2C1898BE0005C3EC /* APIClient.swift */,
);
path = Network;
sourceTree = "<group>";
Expand Down Expand Up @@ -330,6 +346,19 @@
path = Pods;
sourceTree = "<group>";
};
F76BB9542C19000F0005C3EC /* Mocks */ = {
isa = PBXGroup;
children = (
7E2336E52BFE7D7400E6C4B7 /* MockAWSConnectParticipant.swift */,
7E2336E42BFE7D7400E6C4B7 /* MockWebSocketManager.swift */,
7E2336E32BFE7D7400E6C4B7 /* MockAWSClient.swift */,
F76BB9522C18F84D0005C3EC /* MockAPIClient.swift */,
F7B4A1372C15649B005C7921 /* MockHttpClient.swift */,
F7B4A13B2C17E3C3005C7921 /* MockURLSession.swift */,
);
path = Mocks;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXHeadersBuildPhase section */
Expand Down Expand Up @@ -507,6 +536,7 @@
buildActionMask = 2147483647;
files = (
7E57F6522BC7758C00B25623 /* ConnectionDetails.swift in Sources */,
F76BB94D2C1898BE0005C3EC /* APIClient.swift in Sources */,
7E58A6092BBB460A00965327 /* DefaultHttpClient.swift in Sources */,
F74726522BF6F018002B278E /* Config.swift in Sources */,
7E91597B2BC0A92E00821C05 /* Constants.swift in Sources */,
Expand All @@ -521,6 +551,7 @@
7E58A60A2BBB460A00965327 /* HttpMethod.swift in Sources */,
F7B0747C2BDB298400E8B805 /* HeartbeatManager.swift in Sources */,
7ED5DEC22BEAF933001693FC /* TranscriptItem.swift in Sources */,
F7B4A1282C1157B0005C7921 /* AttachmentTypes.swift in Sources */,
7ED5DEC62BEB38B8001693FC /* Metadata.swift in Sources */,
7E58A6112BBB484D00965327 /* SDKLoggerProtocol.swift in Sources */,
7E58A60C2BBB460A00965327 /* HttpClient.swift in Sources */,
Expand All @@ -545,16 +576,19 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F7B4A13C2C17E3C3005C7921 /* MockURLSession.swift in Sources */,
F7B4A1362C14FDA9005C7921 /* MockAttachmentManager.swift in Sources */,
F76BB9532C18F84D0005C3EC /* MockAPIClient.swift in Sources */,
F76BB9562C1900480005C3EC /* APIClientTests.swift in Sources */,
F7B4A13A2C17AE43005C7921 /* TestUtils.swift in Sources */,
7E2336EF2BFE7D7400E6C4B7 /* MockAWSConnectParticipant.swift in Sources */,
7E2336F22BFE7D7400E6C4B7 /* ChatServiceTests.swift in Sources */,
F7B074802BDB2A0700E8B805 /* Notifications.swift in Sources */,
7E2336F32BFE7D7400E6C4B7 /* MockChatService.swift in Sources */,
F7B0747D2BDB298400E8B805 /* HeartbeatManager.swift in Sources */,
7E2336EE2BFE7D7400E6C4B7 /* MockWebSocketManager.swift in Sources */,
7E2336EC2BFE7D7400E6C4B7 /* AWSClientTests.swift in Sources */,
7E2336F12BFE7D7400E6C4B7 /* ChatSessionTests.swift in Sources */,
F7B074832BDB2D3A00E8B805 /* NetworkConnectionManager.swift in Sources */,
7E2336F02BFE7D7400E6C4B7 /* MockConnectionDetailsProvider.swift in Sources */,
F7B4A1382C15649B005C7921 /* MockHttpClient.swift in Sources */,
7E2336ED2BFE7D7400E6C4B7 /* MockAWSClient.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: MIT-0

import XCTest
import AWSConnectParticipant
@testable import AmazonConnectChatIOS

class APIClientTests: XCTestCase {
var apiClient: APIClient!
var testFileUrl = FileManager.default.temporaryDirectory.appendingPathComponent("sample.txt")

override func setUp() {
super.setUp()
apiClient = APIClient(httpClient: MockHttpClient())
}

override func tearDown() {
super.tearDown()
}

func testUploadAttachment_Success() {
let expectation = self.expectation(description: "UploadAttachment succeeds")

let startAttachmentUploadResponse = AWSConnectParticipantStartAttachmentUploadResponse()
startAttachmentUploadResponse?.uploadMetadata = AWSConnectParticipantUploadMetadata()

let testUrl = "https://www.test-endpoint.com"

startAttachmentUploadResponse?.uploadMetadata?.headersToInclude = TestConstants.sampleAttachmentHeaders

startAttachmentUploadResponse?.uploadMetadata?.url = testUrl


TestUtils.writeSampleTextToUrl(url: testFileUrl)

apiClient.uploadAttachment(file: testFileUrl, response: startAttachmentUploadResponse!) { success, error in
if success {
let mockHttpClient = self.apiClient.httpClient as! MockHttpClient
XCTAssertEqual(mockHttpClient.urlString, testUrl)
XCTAssertEqual(mockHttpClient.headers, TestConstants.sampleAttachmentHttpHeaders)
XCTAssertNotNil(mockHttpClient.body)
expectation.fulfill()
} else if error != nil {
XCTFail("Expected success, got unexpected failure: \(String(describing: error))")
} else {
XCTFail("Expected success, got unexpected failure")
}
}

waitForExpectations(timeout: 1.0, handler: nil)
}

func testUploadAttachment_NoDataFailure() {
let expectation = self.expectation(description: "UploadAttachment fails due to no data")

let startAttachmentUploadResponse = AWSConnectParticipantStartAttachmentUploadResponse()

startAttachmentUploadResponse?.uploadMetadata = AWSConnectParticipantUploadMetadata()

let testUrl = "https://www.test-endpoint.com"

startAttachmentUploadResponse?.uploadMetadata?.headersToInclude = TestConstants.sampleAttachmentHeaders

startAttachmentUploadResponse?.uploadMetadata?.url = testUrl

apiClient.uploadAttachment(file: testFileUrl, response: startAttachmentUploadResponse!) { success, error in
if success {
XCTFail("Expected failure, got unexpected success")
} else if error != nil {
XCTAssertEqual(error?.localizedDescription, "Unable to read file data")
expectation.fulfill()
} else {
XCTFail("Expected failure with error")
}
}

waitForExpectations(timeout: 1.0, handler: nil)
}

func testUploadAttachment_NoHeadersFailure() {
let expectation = self.expectation(description: "UploadAttachment fails due to missing headers")

let startAttachmentUploadResponse = AWSConnectParticipantStartAttachmentUploadResponse()

startAttachmentUploadResponse?.uploadMetadata = AWSConnectParticipantUploadMetadata()

let testUrl = "https://www.test-endpoint.com"

startAttachmentUploadResponse?.uploadMetadata?.url = testUrl


TestUtils.writeSampleTextToUrl(url: testFileUrl)

apiClient.uploadAttachment(file: testFileUrl, response: startAttachmentUploadResponse!) { success, error in
if success {
XCTFail("Expected failure, got unexpected success")
} else if error != nil {
XCTAssertEqual(error?.localizedDescription, "Missing upload metadata headers")
expectation.fulfill()
} else {
XCTFail("Expected failure with error")
}
}

waitForExpectations(timeout: 1.0, handler: nil)
}
}
Loading
Loading