diff --git a/.gitignore b/.gitignore index b19285b02..d81a3bb73 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,4 @@ fastlane/test_output .Trashes Icon? *.bak +test-settings.plist diff --git a/AzureSDK.xcworkspace/contents.xcworkspacedata b/AzureSDK.xcworkspace/contents.xcworkspacedata index 56f862aac..dc25b60c7 100644 --- a/AzureSDK.xcworkspace/contents.xcworkspacedata +++ b/AzureSDK.xcworkspace/contents.xcworkspacedata @@ -4,9 +4,22 @@ + + + + + + + + @@ -39,10 +52,10 @@ + location = "group:sdk/template/AzureTemplate/AzureTemplate.xcodeproj"> @@ -470,7 +483,4 @@ location = "group:AzureCore.yml"> - - diff --git a/Podfile b/Podfile index 299f09c6a..7e8b71a52 100644 --- a/Podfile +++ b/Podfile @@ -28,6 +28,14 @@ use_frameworks! platform :ios, '12.0' workspace 'AzureSDK' +# update with local repo location +$dvr_path = '~/repos/DVR' +$use_local_dvr = false + +target 'AzureTemplate' do + project 'sdk/template/AzureTemplate/AzureTemplate' +end + target 'AzureCommunicationCommon' do project 'sdk/communication/AzureCommunicationCommon/AzureCommunicationCommon' @@ -44,6 +52,12 @@ target 'AzureCommunicationChat' do inherit! :search_paths pod 'OHHTTPStubs/Swift' pod 'Trouter', '0.0.1-beta.5' + pod 'MSAL', '1.1.15' + if $use_local_dvr + pod 'DVR', :path => $dvr_path + else + pod 'DVR', :git => 'https://github.com/tjprescott/DVR.git' + end end target 'AzureCommunicationChatUnitTests' do @@ -81,14 +95,6 @@ target 'AzureStorageBlob' do end end -target 'AzureTemplate' do - project 'sdk/template/AzureTemplate/AzureTemplate' - - target 'AzureTemplateTests' do - inherit! :search_paths - end -end - target 'AzureSDKDemoSwift' do project 'examples/AzureSDKDemoSwift/AzureSDKDemoSwift' pod 'MSAL', '1.1.15' @@ -104,6 +110,25 @@ target 'AzureSDKDemoSwiftUI' do pod 'MSAL', '1.1.15' end +target 'AzureTest' do + project 'sdk/test/AzureTest/AzureTest' + + if $use_local_dvr + pod 'DVR', :path => $dvr_path + else + pod 'DVR', :git => 'https://github.com/tjprescott/DVR.git' + end + + target 'AzureTestTests' do + inherit! :search_paths + if $use_local_dvr + pod 'DVR', :path => $dvr_path + else + pod 'DVR', :git => 'https://github.com/tjprescott/DVR.git' + end + end +end + post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| diff --git a/eng/scripts/prepare_chat_tests.py b/eng/scripts/prepare_chat_tests.py index ebdf149c7..e4d10cb2f 100644 --- a/eng/scripts/prepare_chat_tests.py +++ b/eng/scripts/prepare_chat_tests.py @@ -5,36 +5,49 @@ 1) Run `pip install azure.communication.administration` prior to running. -2) Set the `AZURE_COMMUNICATION_CS` environment variable +2) Run the script: `python prepare_chat_tests.py ` -3) Run the script. - -4) Copy the values to the AzureCommunicationChat scheme's testing environment variables and set `TEST_MODE` to +3) Copy the values to the AzureCommunicationChat scheme's testing environment variables and set `TEST_MODE` to "record". """ import os +import sys +import plistlib +import urllib +import xml from azure.communication.administration import CommunicationIdentityClient -connection_string = os.environ['AZURE_COMMUNICATION_CS'] +connection_string = sys.argv[1] identity_client = CommunicationIdentityClient.from_connection_string(connection_string) items = { key:val for (key, val) in (x.split('=', 1) for x in connection_string.split(';')) } -endpoint = items['endpoint'] user1 = identity_client.create_user() user2 = identity_client.create_user() -token = identity_client.issue_token(user1, scopes=["chat"]).token +data = { + 'endpoint': items['endpoint'], + 'user1': user1.identifier, + 'user2': user2.identifier, + 'token': identity_client.issue_token(user1, scopes=["chat"]).token +} + +cwd = os.getcwd() +path = os.path.join(cwd, 'sdk', 'communication', 'AzureCommunicationChat', 'Tests', 'test-settings.plist') -print('\n== AZURE_COMMUNICATION_ENDPOINT ==') -print(endpoint) +print(f'Settings path: {path}') -print('\n== AZURE_COMMUNICATION_USER_ID_1 ==') -print(user1.identifier) +# update or create plist file +try: + with open(path, 'rb') as fp: + plist = plistlib.load(fp) + plist.update(data) +except (IOError, plistlib.InvalidFileException, xml.parsers.expat.ExpatError): + plist = data -print('\n== AZURE_COMMUNICATION_USER_ID_2 ==') -print(user2.identifier) +# save plist file +with open(path, 'wb') as fp: + plistlib.dump(plist, fp) -print('\n== AZURE_COMMUNICATION_TOKEN ==') -print(token) +print('==PLIST UPDATED SUCCESSFULLY==') diff --git a/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/project.pbxproj b/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/project.pbxproj index 88781649a..299045606 100644 --- a/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/project.pbxproj +++ b/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/project.pbxproj @@ -7,37 +7,83 @@ objects = { /* Begin PBXBuildFile section */ - 0A68BF762656EED6004A7E3D /* ChatError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A68BF752656EED6004A7E3D /* ChatError.swift */; }; - 0A68BF782658747C004A7E3D /* AzureCommunicationChatClientOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A68BF772658747C004A7E3D /* AzureCommunicationChatClientOptions.swift */; }; + 0A1982DC2682A2DB00B7F3A2 /* TestSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE5BA06267D25AD006B93B7 /* TestSettings.swift */; }; + 0A1E7594267003A000054F60 /* ChatClientDVRTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A1E7593267003A000054F60 /* ChatClientDVRTests.swift */; }; 0A6A542326867D21001006AF /* Trouter.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A6A542226867D21001006AF /* Trouter.xcframework */; }; - 0A8B9FF3264C6D2C009C24B0 /* ChatClientInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A8B9FF2264C6D2C009C24B0 /* ChatClientInternal.swift */; }; - 0E5C83242667561B00F7D58F /* TrouterEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5C83232667561B00F7D58F /* TrouterEvent.swift */; }; - 0EDC08922640892B004CA84B /* SendTypingNotificationOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08812640892A004CA84B /* SendTypingNotificationOptions.swift */; }; - 0EDC08932640892B004CA84B /* CreateChatThreadOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08822640892A004CA84B /* CreateChatThreadOptions.swift */; }; - 0EDC08942640892B004CA84B /* ListChatReadReceiptsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08832640892A004CA84B /* ListChatReadReceiptsOptions.swift */; }; - 0EDC08952640892B004CA84B /* UpdateChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08842640892A004CA84B /* UpdateChatMessageOptions.swift */; }; - 0EDC08962640892B004CA84B /* SendChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08852640892A004CA84B /* SendChatMessageOptions.swift */; }; - 0EDC08972640892B004CA84B /* GetChatThreadPropertiesOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08862640892A004CA84B /* GetChatThreadPropertiesOptions.swift */; }; - 0EDC08982640892B004CA84B /* ListChatParticipantsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08872640892A004CA84B /* ListChatParticipantsOptions.swift */; }; - 0EDC089A2640892B004CA84B /* GetChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08892640892A004CA84B /* GetChatMessageOptions.swift */; }; - 0EDC089B2640892B004CA84B /* ListChatMessagesOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC088A2640892B004CA84B /* ListChatMessagesOptions.swift */; }; - 0EDC089C2640892B004CA84B /* DeleteChatThreadOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC088B2640892B004CA84B /* DeleteChatThreadOptions.swift */; }; - 0EDC089D2640892B004CA84B /* ListChatThreadsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC088C2640892B004CA84B /* ListChatThreadsOptions.swift */; }; - 0EDC089E2640892B004CA84B /* AddChatParticipantsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC088D2640892B004CA84B /* AddChatParticipantsOptions.swift */; }; - 0EDC089F2640892B004CA84B /* DeleteChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC088E2640892B004CA84B /* DeleteChatMessageOptions.swift */; }; - 0EDC08A02640892B004CA84B /* RemoveChatParticipantOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC088F2640892B004CA84B /* RemoveChatParticipantOptions.swift */; }; - 0EDC08A12640892B004CA84B /* SendChatReadReceiptOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08902640892B004CA84B /* SendChatReadReceiptOptions.swift */; }; - 0EDC08A22640892B004CA84B /* UpdateChatThreadPropertiesOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDC08912640892B004CA84B /* UpdateChatThreadPropertiesOptions.swift */; }; - 12D6B4896157F74B8AA686B1 /* Pods_AzureCommunicationChatTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA55FCB9FB58BAE327C97579 /* Pods_AzureCommunicationChatTests.framework */; }; - 826430C6A8104690F1F5DD05 /* Pods_AzureCommunicationChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6C8A0BDD521FD8ECD116120 /* Pods_AzureCommunicationChat.framework */; }; - 8840449825D5FA6300A194DC /* IdentifierSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8840449725D5FA6200A194DC /* IdentifierSerializer.swift */; }; - 88D37B8F25D60CCD004F3699 /* MicrosoftTeamsUserIdentifierModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D37B8B25D60CCD004F3699 /* MicrosoftTeamsUserIdentifierModel.swift */; }; - 88D37B9025D60CCD004F3699 /* CommunicationUserIdentifierModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D37B8C25D60CCD004F3699 /* CommunicationUserIdentifierModel.swift */; }; - 88D37B9125D60CCD004F3699 /* PhoneNumberIdentifierModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D37B8D25D60CCD004F3699 /* PhoneNumberIdentifierModel.swift */; }; + 0A6A5455268BAC57001006AF /* test_CreateThread_WithoutParticipants.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A6A5453268BAB8B001006AF /* test_CreateThread_WithoutParticipants.json */; }; + 0A6A5457268BAC5D001006AF /* test_ListThreads_ReturnsChatThreadItems.json in Resources */ = {isa = PBXBuildFile; fileRef = 0A6A5454268BAB8B001006AF /* test_ListThreads_ReturnsChatThreadItems.json */; }; + 0A922A0726B0745B00D4B387 /* libAzureTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A922A0626B0745B00D4B387 /* libAzureTest.a */; }; + 0A922A0926B0746500D4B387 /* libAzureTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A922A0826B0746500D4B387 /* libAzureTest.a */; }; + 0AE5BA07267D25AD006B93B7 /* TestSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AE5BA06267D25AD006B93B7 /* TestSettings.swift */; }; + 0AF8C48126A894890052FBFF /* ChatThreadClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C43526A894890052FBFF /* ChatThreadClient.swift */; }; + 0AF8C48226A8948A0052FBFF /* ChatClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C43626A894890052FBFF /* ChatClient.swift */; }; + 0AF8C48326A8948A0052FBFF /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C43726A894890052FBFF /* Custom.swift */; }; + 0AF8C48426A8948A0052FBFF /* IdentifierSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C43926A894890052FBFF /* IdentifierSerializer.swift */; }; + 0AF8C48526A8948A0052FBFF /* UpdateChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C43E26A894890052FBFF /* UpdateChatMessageOptions.swift */; }; + 0AF8C48626A8948A0052FBFF /* RemoveChatParticipantOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C43F26A894890052FBFF /* RemoveChatParticipantOptions.swift */; }; + 0AF8C48726A8948A0052FBFF /* SendChatReadReceiptOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44026A894890052FBFF /* SendChatReadReceiptOptions.swift */; }; + 0AF8C48826A8948A0052FBFF /* AzureCommunicationChatClientOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44126A894890052FBFF /* AzureCommunicationChatClientOptions.swift */; }; + 0AF8C48926A8948A0052FBFF /* ListChatParticipantsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44226A894890052FBFF /* ListChatParticipantsOptions.swift */; }; + 0AF8C48A26A8948A0052FBFF /* ListChatMessagesOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44326A894890052FBFF /* ListChatMessagesOptions.swift */; }; + 0AF8C48B26A8948A0052FBFF /* SendTypingNotificationOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44426A894890052FBFF /* SendTypingNotificationOptions.swift */; }; + 0AF8C48C26A8948A0052FBFF /* AddChatParticipantsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44526A894890052FBFF /* AddChatParticipantsOptions.swift */; }; + 0AF8C48D26A8948A0052FBFF /* GetChatThreadPropertiesOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44626A894890052FBFF /* GetChatThreadPropertiesOptions.swift */; }; + 0AF8C48E26A8948A0052FBFF /* SendChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44726A894890052FBFF /* SendChatMessageOptions.swift */; }; + 0AF8C48F26A8948A0052FBFF /* DeleteChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44826A894890052FBFF /* DeleteChatMessageOptions.swift */; }; + 0AF8C49026A8948A0052FBFF /* DeleteChatThreadOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44926A894890052FBFF /* DeleteChatThreadOptions.swift */; }; + 0AF8C49126A8948A0052FBFF /* GetChatMessageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44A26A894890052FBFF /* GetChatMessageOptions.swift */; }; + 0AF8C49226A8948A0052FBFF /* ListChatReadReceiptsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44B26A894890052FBFF /* ListChatReadReceiptsOptions.swift */; }; + 0AF8C49326A8948A0052FBFF /* UpdateChatThreadPropertiesOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44C26A894890052FBFF /* UpdateChatThreadPropertiesOptions.swift */; }; + 0AF8C49426A8948A0052FBFF /* CreateChatThreadOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44D26A894890052FBFF /* CreateChatThreadOptions.swift */; }; + 0AF8C49526A8948A0052FBFF /* ListChatThreadsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C44E26A894890052FBFF /* ListChatThreadsOptions.swift */; }; + 0AF8C49626A8948A0052FBFF /* PatchUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45026A894890052FBFF /* PatchUtil.swift */; }; + 0AF8C49726A8948A0052FBFF /* Chat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45126A894890052FBFF /* Chat.swift */; }; + 0AF8C49826A8948A0052FBFF /* SendChatMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45326A894890052FBFF /* SendChatMessageRequest.swift */; }; + 0AF8C49926A8948A0052FBFF /* CommunicationUserIdentifierModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45426A894890052FBFF /* CommunicationUserIdentifierModel.swift */; }; + 0AF8C49A26A8948A0052FBFF /* ChatError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45526A894890052FBFF /* ChatError.swift */; }; + 0AF8C49B26A8948A0052FBFF /* ChatMessagesCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45626A894890052FBFF /* ChatMessagesCollection.swift */; }; + 0AF8C49C26A8948A0052FBFF /* ChatMessageInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45726A894890052FBFF /* ChatMessageInternal.swift */; }; + 0AF8C49D26A8948A0052FBFF /* ChatMessageReadReceiptInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45826A894890052FBFF /* ChatMessageReadReceiptInternal.swift */; }; + 0AF8C49E26A8948A0052FBFF /* ChatThreadPropertiesInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45926A894890052FBFF /* ChatThreadPropertiesInternal.swift */; }; + 0AF8C49F26A8948A0052FBFF /* CommunicationErrorResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45A26A894890052FBFF /* CommunicationErrorResponse.swift */; }; + 0AF8C4A026A8948A0052FBFF /* AddChatParticipantsRequestInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45B26A894890052FBFF /* AddChatParticipantsRequestInternal.swift */; }; + 0AF8C4A126A8948A0052FBFF /* Enumerations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45C26A894890052FBFF /* Enumerations.swift */; }; + 0AF8C4A226A8948A0052FBFF /* PhoneNumberIdentifierModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45D26A894890052FBFF /* PhoneNumberIdentifierModel.swift */; }; + 0AF8C4A326A8948A0052FBFF /* AddChatParticipantsResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45E26A894890052FBFF /* AddChatParticipantsResult.swift */; }; + 0AF8C4A426A8948A0052FBFF /* ChatMessageReadReceiptsCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C45F26A894890052FBFF /* ChatMessageReadReceiptsCollection.swift */; }; + 0AF8C4A526A8948A0052FBFF /* CreateChatThreadResultInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46026A894890052FBFF /* CreateChatThreadResultInternal.swift */; }; + 0AF8C4A626A8948A0052FBFF /* UpdateChatMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46126A894890052FBFF /* UpdateChatMessageRequest.swift */; }; + 0AF8C4A726A8948A0052FBFF /* MicrosoftTeamsUserIdentifierModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46226A894890052FBFF /* MicrosoftTeamsUserIdentifierModel.swift */; }; + 0AF8C4A826A8948A0052FBFF /* SendReadReceiptRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46326A894890052FBFF /* SendReadReceiptRequest.swift */; }; + 0AF8C4A926A8948A0052FBFF /* ChatThreadsItemCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46426A894890052FBFF /* ChatThreadsItemCollection.swift */; }; + 0AF8C4AA26A8948A0052FBFF /* ChatParticipantInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46526A894890052FBFF /* ChatParticipantInternal.swift */; }; + 0AF8C4AB26A8948A0052FBFF /* CommunicationIdentifierModelInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46626A894890052FBFF /* CommunicationIdentifierModelInternal.swift */; }; + 0AF8C4AC26A8948A0052FBFF /* UpdateChatThreadRequestInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46726A894890052FBFF /* UpdateChatThreadRequestInternal.swift */; }; + 0AF8C4AD26A8948A0052FBFF /* ChatThreadItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46826A894890052FBFF /* ChatThreadItem.swift */; }; + 0AF8C4AE26A8948A0052FBFF /* SendChatMessageResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46926A894890052FBFF /* SendChatMessageResult.swift */; }; + 0AF8C4AF26A8948A0052FBFF /* CreateChatThreadRequestInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46A26A894890052FBFF /* CreateChatThreadRequestInternal.swift */; }; + 0AF8C4B026A8948A0052FBFF /* ChatParticipantsCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46B26A894890052FBFF /* ChatParticipantsCollection.swift */; }; + 0AF8C4B126A8948A0052FBFF /* ChatMessageContentInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46C26A894890052FBFF /* ChatMessageContentInternal.swift */; }; + 0AF8C4B226A8948A0052FBFF /* ChatThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46D26A894890052FBFF /* ChatThread.swift */; }; + 0AF8C4B326A8948A0052FBFF /* ChatClientInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C46E26A894890052FBFF /* ChatClientInternal.swift */; }; + 0AF8C4B426A8948A0052FBFF /* CommunicationSignalingClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47026A894890052FBFF /* CommunicationSignalingClient.swift */; }; + 0AF8C4B526A8948A0052FBFF /* TrouterNotificationPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47126A894890052FBFF /* TrouterNotificationPayload.swift */; }; + 0AF8C4B626A8948A0052FBFF /* TrouterSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47226A894890052FBFF /* TrouterSettings.swift */; }; + 0AF8C4B726A8948A0052FBFF /* ChatEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47426A894890052FBFF /* ChatEvent.swift */; }; + 0AF8C4B826A8948A0052FBFF /* TrouterEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47526A894890052FBFF /* TrouterEvent.swift */; }; + 0AF8C4B926A8948A0052FBFF /* TrouterEventUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47626A894890052FBFF /* TrouterEventUtil.swift */; }; + 0AF8C4BA26A8948A0052FBFF /* ChatThreadProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47826A894890052FBFF /* ChatThreadProperties.swift */; }; + 0AF8C4BB26A8948A0052FBFF /* ChatMessageContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47926A894890052FBFF /* ChatMessageContent.swift */; }; + 0AF8C4BC26A8948A0052FBFF /* ChatMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47A26A894890052FBFF /* ChatMessage.swift */; }; + 0AF8C4BD26A8948A0052FBFF /* ChatMessageReadReceipt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47B26A894890052FBFF /* ChatMessageReadReceipt.swift */; }; + 0AF8C4BE26A8948A0052FBFF /* CreateChatThreadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47C26A894890052FBFF /* CreateChatThreadRequest.swift */; }; + 0AF8C4BF26A8948A0052FBFF /* CreateChatThreadResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47D26A894890052FBFF /* CreateChatThreadResult.swift */; }; + 0AF8C4C026A8948A0052FBFF /* ChatParticipant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C47E26A894890052FBFF /* ChatParticipant.swift */; }; + 0AF8C4C126A8948A0052FBFF /* TokenCredentialAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF8C48026A894890052FBFF /* TokenCredentialAdapter.swift */; }; + 67AF2DD80FB3A3BE62D3A052 /* Pods_AzureCommunicationChatTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F299C5DDF75561133016BAD1 /* Pods_AzureCommunicationChatTests.framework */; }; + 77128E1C2E4C558CACB2F225 /* Pods_AzureCommunicationChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 692462E97C3640FA58E7D193 /* Pods_AzureCommunicationChat.framework */; }; 88F361162630EB7200A895D1 /* AzureCommunicationCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88F361152630EB7200A895D1 /* AzureCommunicationCommon.framework */; }; - 88F361172630EB7200A895D1 /* AzureCommunicationCommon.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 88F361152630EB7200A895D1 /* AzureCommunicationCommon.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - D10458A725EEA47800B3EB6D /* CommunicationSignalingClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10458A125EEA47800B3EB6D /* CommunicationSignalingClient.swift */; }; - D10458A825EEA47800B3EB6D /* TrouterEventUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10458A225EEA47800B3EB6D /* TrouterEventUtil.swift */; }; + A0AA847FE30B597264552CF7 /* Pods_AzureCommunicationChatUnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6C3EB522186A40FAFDDD43A /* Pods_AzureCommunicationChatUnitTests.framework */; }; D10C3BCE25A63F7800A181E3 /* listParticipants.json in Resources */ = {isa = PBXBuildFile; fileRef = D10C3BCD25A63F7800A181E3 /* listParticipants.json */; }; D10C3BD425A660AF00A181E3 /* listMessages.json in Resources */ = {isa = PBXBuildFile; fileRef = D10C3BD325A660AF00A181E3 /* listMessages.json */; }; D10C3BDA25A66D4D00A181E3 /* listThreads.json in Resources */ = {isa = PBXBuildFile; fileRef = D10C3BD925A66D4D00A181E3 /* listThreads.json */; }; @@ -57,41 +103,7 @@ D147E68A25CE2480001CFB5D /* UnauthorizedError.json in Resources */ = {isa = PBXBuildFile; fileRef = 0ECA8CEA2582A52D006760F7 /* UnauthorizedError.json */; }; D147E69125CE2482001CFB5D /* GetThreadResponse.json in Resources */ = {isa = PBXBuildFile; fileRef = 0ECA8CDE258188D0006760F7 /* GetThreadResponse.json */; }; D147E69825CE2485001CFB5D /* CreateThreadResponse.json in Resources */ = {isa = PBXBuildFile; fileRef = D1BA104525807B0B00CA7130 /* CreateThreadResponse.json */; }; - D14DBCFB260EACEA005C9C43 /* TrouterNotificationPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10458A325EEA47800B3EB6D /* TrouterNotificationPayload.swift */; }; - D14DBCFF260EACED005C9C43 /* TrouterSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10458A425EEA47800B3EB6D /* TrouterSettings.swift */; }; - D14DBD00260EACF0005C9C43 /* ChatEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D10458A625EEA47800B3EB6D /* ChatEvent.swift */; }; - D1565C71256DB74900AF45F8 /* ChatClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1565C70256DB74900AF45F8 /* ChatClient.swift */; }; - D1565C74256DB76C00AF45F8 /* ChatThreadClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1565C73256DB76C00AF45F8 /* ChatThreadClient.swift */; }; - D15E990C25B7C80C00E63DB2 /* PatchUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98DE25B7C80C00E63DB2 /* PatchUtil.swift */; }; - D15E990D25B7C80C00E63DB2 /* Chat.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98DF25B7C80C00E63DB2 /* Chat.swift */; }; - D15E991025B7C80C00E63DB2 /* SendChatMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98E325B7C80C00E63DB2 /* SendChatMessageRequest.swift */; }; - D15E991425B7C80C00E63DB2 /* ChatMessagesCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98E725B7C80C00E63DB2 /* ChatMessagesCollection.swift */; }; - D15E991825B7C80C00E63DB2 /* CommunicationErrorResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98EB25B7C80C00E63DB2 /* CommunicationErrorResponse.swift */; }; - D15E991925B7C80C00E63DB2 /* Enumerations.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98EC25B7C80C00E63DB2 /* Enumerations.swift */; }; - D15E991A25B7C80C00E63DB2 /* AddChatParticipantsResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98ED25B7C80C00E63DB2 /* AddChatParticipantsResult.swift */; }; - D15E991B25B7C80C00E63DB2 /* ChatMessageReadReceiptsCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98EE25B7C80C00E63DB2 /* ChatMessageReadReceiptsCollection.swift */; }; - D15E992025B7C80C00E63DB2 /* SendReadReceiptRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98F325B7C80C00E63DB2 /* SendReadReceiptRequest.swift */; }; - D15E992225B7C80C00E63DB2 /* SendChatMessageResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98F525B7C80C00E63DB2 /* SendChatMessageResult.swift */; }; - D15E992525B7C80C00E63DB2 /* ChatParticipantsCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15E98F825B7C80C00E63DB2 /* ChatParticipantsCollection.swift */; }; - D16C802D25BA0A2400C42803 /* ChatMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C802C25BA0A2400C42803 /* ChatMessage.swift */; }; - D16C803325BA0AE400C42803 /* ChatThreadProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C803225BA0AE400C42803 /* ChatThreadProperties.swift */; }; - D16C803725BA0AFE00C42803 /* ChatParticipant.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C803625BA0AFE00C42803 /* ChatParticipant.swift */; }; - D16C803B25BA0B0E00C42803 /* ChatMessageReadReceipt.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C803A25BA0B0E00C42803 /* ChatMessageReadReceipt.swift */; }; - D16C803F25BA0B5200C42803 /* ChatMessageContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C803E25BA0B5200C42803 /* ChatMessageContent.swift */; }; - D16C804325BA402100C42803 /* CreateChatThreadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C804225BA402100C42803 /* CreateChatThreadRequest.swift */; }; - D16C804725BA406D00C42803 /* CreateChatThreadResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C804625BA406D00C42803 /* CreateChatThreadResult.swift */; }; - D17C7B2F25FBF4AE007AD39B /* ChatThread.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B2E25FBF4AE007AD39B /* ChatThread.swift */; }; - D17C7B5A25FBF4D5007AD39B /* ChatThreadsItemCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5025FBF4D5007AD39B /* ChatThreadsItemCollection.swift */; }; - D17C7B5B25FBF4D5007AD39B /* CreateChatThreadRequestInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5125FBF4D5007AD39B /* CreateChatThreadRequestInternal.swift */; }; - D17C7B5D25FBF4D5007AD39B /* CreateChatThreadResultInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5325FBF4D5007AD39B /* CreateChatThreadResultInternal.swift */; }; - D17C7B5E25FBF4D5007AD39B /* ChatParticipantInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5425FBF4D5007AD39B /* ChatParticipantInternal.swift */; }; - D17C7B5F25FBF4D5007AD39B /* ChatMessageInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5525FBF4D5007AD39B /* ChatMessageInternal.swift */; }; - D17C7B6025FBF4D5007AD39B /* ChatMessageReadReceiptInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5625FBF4D5007AD39B /* ChatMessageReadReceiptInternal.swift */; }; - D17C7B6125FBF4D5007AD39B /* ChatThreadPropertiesInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5725FBF4D5007AD39B /* ChatThreadPropertiesInternal.swift */; }; - D17C7B6225FBF4D5007AD39B /* ChatThreadItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5825FBF4D5007AD39B /* ChatThreadItem.swift */; }; - D17C7B6325FBF4D5007AD39B /* ChatMessageContentInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D17C7B5925FBF4D5007AD39B /* ChatMessageContentInternal.swift */; }; D187D9B126151DB900C233B7 /* IdentifierSerializerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8840448725D5DD7900A194DC /* IdentifierSerializerTests.swift */; }; - D197C5DF260E82F80049718B /* TokenCredentialAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889FF7C9260516FA00722630 /* TokenCredentialAdapter.swift */; }; D1AEA09C2608EE3700849D5C /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CD93AC258D6C2500409613 /* Util.swift */; }; D1B7EB06257F0D20004F384A /* AzureCommunicationChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "AzureCommunicationChat::AzureCommunicationChat::Product" /* AzureCommunicationChat.framework */; }; D1CD93A2258D6BC700409613 /* ChatClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CD93A1258D6BC700409613 /* ChatClientTests.swift */; }; @@ -108,11 +120,6 @@ D1CD93E4258D6EF700409613 /* sendTypingNotification.json in Resources */ = {isa = PBXBuildFile; fileRef = D1CD93E3258D6EF700409613 /* sendTypingNotification.json */; }; D1CD93E8258D6F0600409613 /* updateMessage.json in Resources */ = {isa = PBXBuildFile; fileRef = D1CD93E7258D6F0600409613 /* updateMessage.json */; }; D1CD93EC258D6F1300409613 /* updateTopic.json in Resources */ = {isa = PBXBuildFile; fileRef = D1CD93EB258D6F1300409613 /* updateTopic.json */; }; - D1CF1A882697C95500F7EB1A /* UpdateChatMessageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1CF1A872697C95500F7EB1A /* UpdateChatMessageRequest.swift */; }; - D1F16FA72697B200005606C3 /* UpdateChatThreadRequestInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F16FA32697B200005606C3 /* UpdateChatThreadRequestInternal.swift */; }; - D1F16FA82697B200005606C3 /* AddChatParticipantsRequestInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F16FA42697B200005606C3 /* AddChatParticipantsRequestInternal.swift */; }; - D1F16FA92697B200005606C3 /* CommunicationIdentifierModelInternal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F16FA52697B200005606C3 /* CommunicationIdentifierModelInternal.swift */; }; - D56B96117CC0DBAC8167088A /* Pods_AzureCommunicationChatUnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C53A93628463638BD2194963 /* Pods_AzureCommunicationChatUnitTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -132,31 +139,88 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - 88F361182630EB7200A895D1 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 88F361172630EB7200A895D1 /* AzureCommunicationCommon.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 04B336EEF1E42CCE389E4935 /* Pods-AzureCommunicationChat.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureCommunicationChat.release.xcconfig"; path = "Target Support Files/Pods-AzureCommunicationChat/Pods-AzureCommunicationChat.release.xcconfig"; sourceTree = ""; }; - 0A10411325D306B3008E472E /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0A1E7593267003A000054F60 /* ChatClientDVRTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatClientDVRTests.swift; sourceTree = ""; }; 0A5DCA302620F95E00A9ABF3 /* AzureCommunicationChat.podspec.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = AzureCommunicationChat.podspec.json; sourceTree = ""; }; 0A5DCA322620F99400A9ABF3 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = ""; }; 0A5DCA352620FB7200A9ABF3 /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; - 0A68BF752656EED6004A7E3D /* ChatError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatError.swift; sourceTree = ""; }; - 0A68BF772658747C004A7E3D /* AzureCommunicationChatClientOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AzureCommunicationChatClientOptions.swift; sourceTree = ""; }; 0A6A542226867D21001006AF /* Trouter.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Trouter.xcframework; path = ../../../Pods/Trouter/Trouter.xcframework; sourceTree = ""; }; - 0A8B9FF2264C6D2C009C24B0 /* ChatClientInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatClientInternal.swift; sourceTree = ""; }; - 0E5C83232667561B00F7D58F /* TrouterEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrouterEvent.swift; sourceTree = ""; }; + 0A6A5453268BAB8B001006AF /* test_CreateThread_WithoutParticipants.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = test_CreateThread_WithoutParticipants.json; sourceTree = ""; }; + 0A6A5454268BAB8B001006AF /* test_ListThreads_ReturnsChatThreadItems.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = test_ListThreads_ReturnsChatThreadItems.json; sourceTree = ""; }; + 0A9229E626B068DE00D4B387 /* AzureTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureTest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A9229EA26B06E6F00D4B387 /* AzureTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureTest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A922A0426B0720A00D4B387 /* libAzureTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAzureTest.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A922A0626B0745B00D4B387 /* libAzureTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAzureTest.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A922A0826B0746500D4B387 /* libAzureTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libAzureTest.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 0AE5BA06267D25AD006B93B7 /* TestSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestSettings.swift; sourceTree = ""; }; + 0AF8C43526A894890052FBFF /* ChatThreadClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadClient.swift; sourceTree = ""; }; + 0AF8C43626A894890052FBFF /* ChatClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatClient.swift; sourceTree = ""; }; + 0AF8C43726A894890052FBFF /* Custom.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Custom.swift; sourceTree = ""; }; + 0AF8C43926A894890052FBFF /* IdentifierSerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierSerializer.swift; sourceTree = ""; }; + 0AF8C43B26A894890052FBFF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 0AF8C43E26A894890052FBFF /* UpdateChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatMessageOptions.swift; sourceTree = ""; }; + 0AF8C43F26A894890052FBFF /* RemoveChatParticipantOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemoveChatParticipantOptions.swift; sourceTree = ""; }; + 0AF8C44026A894890052FBFF /* SendChatReadReceiptOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatReadReceiptOptions.swift; sourceTree = ""; }; + 0AF8C44126A894890052FBFF /* AzureCommunicationChatClientOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AzureCommunicationChatClientOptions.swift; sourceTree = ""; }; + 0AF8C44226A894890052FBFF /* ListChatParticipantsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatParticipantsOptions.swift; sourceTree = ""; }; + 0AF8C44326A894890052FBFF /* ListChatMessagesOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatMessagesOptions.swift; sourceTree = ""; }; + 0AF8C44426A894890052FBFF /* SendTypingNotificationOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendTypingNotificationOptions.swift; sourceTree = ""; }; + 0AF8C44526A894890052FBFF /* AddChatParticipantsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddChatParticipantsOptions.swift; sourceTree = ""; }; + 0AF8C44626A894890052FBFF /* GetChatThreadPropertiesOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetChatThreadPropertiesOptions.swift; sourceTree = ""; }; + 0AF8C44726A894890052FBFF /* SendChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatMessageOptions.swift; sourceTree = ""; }; + 0AF8C44826A894890052FBFF /* DeleteChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteChatMessageOptions.swift; sourceTree = ""; }; + 0AF8C44926A894890052FBFF /* DeleteChatThreadOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteChatThreadOptions.swift; sourceTree = ""; }; + 0AF8C44A26A894890052FBFF /* GetChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetChatMessageOptions.swift; sourceTree = ""; }; + 0AF8C44B26A894890052FBFF /* ListChatReadReceiptsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatReadReceiptsOptions.swift; sourceTree = ""; }; + 0AF8C44C26A894890052FBFF /* UpdateChatThreadPropertiesOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatThreadPropertiesOptions.swift; sourceTree = ""; }; + 0AF8C44D26A894890052FBFF /* CreateChatThreadOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadOptions.swift; sourceTree = ""; }; + 0AF8C44E26A894890052FBFF /* ListChatThreadsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatThreadsOptions.swift; sourceTree = ""; }; + 0AF8C45026A894890052FBFF /* PatchUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PatchUtil.swift; sourceTree = ""; }; + 0AF8C45126A894890052FBFF /* Chat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Chat.swift; sourceTree = ""; }; + 0AF8C45326A894890052FBFF /* SendChatMessageRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatMessageRequest.swift; sourceTree = ""; }; + 0AF8C45426A894890052FBFF /* CommunicationUserIdentifierModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationUserIdentifierModel.swift; sourceTree = ""; }; + 0AF8C45526A894890052FBFF /* ChatError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatError.swift; sourceTree = ""; }; + 0AF8C45626A894890052FBFF /* ChatMessagesCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessagesCollection.swift; sourceTree = ""; }; + 0AF8C45726A894890052FBFF /* ChatMessageInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageInternal.swift; sourceTree = ""; }; + 0AF8C45826A894890052FBFF /* ChatMessageReadReceiptInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageReadReceiptInternal.swift; sourceTree = ""; }; + 0AF8C45926A894890052FBFF /* ChatThreadPropertiesInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadPropertiesInternal.swift; sourceTree = ""; }; + 0AF8C45A26A894890052FBFF /* CommunicationErrorResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationErrorResponse.swift; sourceTree = ""; }; + 0AF8C45B26A894890052FBFF /* AddChatParticipantsRequestInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddChatParticipantsRequestInternal.swift; sourceTree = ""; }; + 0AF8C45C26A894890052FBFF /* Enumerations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Enumerations.swift; sourceTree = ""; }; + 0AF8C45D26A894890052FBFF /* PhoneNumberIdentifierModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneNumberIdentifierModel.swift; sourceTree = ""; }; + 0AF8C45E26A894890052FBFF /* AddChatParticipantsResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddChatParticipantsResult.swift; sourceTree = ""; }; + 0AF8C45F26A894890052FBFF /* ChatMessageReadReceiptsCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageReadReceiptsCollection.swift; sourceTree = ""; }; + 0AF8C46026A894890052FBFF /* CreateChatThreadResultInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadResultInternal.swift; sourceTree = ""; }; + 0AF8C46126A894890052FBFF /* UpdateChatMessageRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatMessageRequest.swift; sourceTree = ""; }; + 0AF8C46226A894890052FBFF /* MicrosoftTeamsUserIdentifierModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MicrosoftTeamsUserIdentifierModel.swift; sourceTree = ""; }; + 0AF8C46326A894890052FBFF /* SendReadReceiptRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendReadReceiptRequest.swift; sourceTree = ""; }; + 0AF8C46426A894890052FBFF /* ChatThreadsItemCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadsItemCollection.swift; sourceTree = ""; }; + 0AF8C46526A894890052FBFF /* ChatParticipantInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatParticipantInternal.swift; sourceTree = ""; }; + 0AF8C46626A894890052FBFF /* CommunicationIdentifierModelInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationIdentifierModelInternal.swift; sourceTree = ""; }; + 0AF8C46726A894890052FBFF /* UpdateChatThreadRequestInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatThreadRequestInternal.swift; sourceTree = ""; }; + 0AF8C46826A894890052FBFF /* ChatThreadItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadItem.swift; sourceTree = ""; }; + 0AF8C46926A894890052FBFF /* SendChatMessageResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatMessageResult.swift; sourceTree = ""; }; + 0AF8C46A26A894890052FBFF /* CreateChatThreadRequestInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadRequestInternal.swift; sourceTree = ""; }; + 0AF8C46B26A894890052FBFF /* ChatParticipantsCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatParticipantsCollection.swift; sourceTree = ""; }; + 0AF8C46C26A894890052FBFF /* ChatMessageContentInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageContentInternal.swift; sourceTree = ""; }; + 0AF8C46D26A894890052FBFF /* ChatThread.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThread.swift; sourceTree = ""; }; + 0AF8C46E26A894890052FBFF /* ChatClientInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatClientInternal.swift; sourceTree = ""; }; + 0AF8C47026A894890052FBFF /* CommunicationSignalingClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationSignalingClient.swift; sourceTree = ""; }; + 0AF8C47126A894890052FBFF /* TrouterNotificationPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrouterNotificationPayload.swift; sourceTree = ""; }; + 0AF8C47226A894890052FBFF /* TrouterSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrouterSettings.swift; sourceTree = ""; }; + 0AF8C47426A894890052FBFF /* ChatEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatEvent.swift; sourceTree = ""; }; + 0AF8C47526A894890052FBFF /* TrouterEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrouterEvent.swift; sourceTree = ""; }; + 0AF8C47626A894890052FBFF /* TrouterEventUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrouterEventUtil.swift; sourceTree = ""; }; + 0AF8C47826A894890052FBFF /* ChatThreadProperties.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadProperties.swift; sourceTree = ""; }; + 0AF8C47926A894890052FBFF /* ChatMessageContent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageContent.swift; sourceTree = ""; }; + 0AF8C47A26A894890052FBFF /* ChatMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessage.swift; sourceTree = ""; }; + 0AF8C47B26A894890052FBFF /* ChatMessageReadReceipt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageReadReceipt.swift; sourceTree = ""; }; + 0AF8C47C26A894890052FBFF /* CreateChatThreadRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadRequest.swift; sourceTree = ""; }; + 0AF8C47D26A894890052FBFF /* CreateChatThreadResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadResult.swift; sourceTree = ""; }; + 0AF8C47E26A894890052FBFF /* ChatParticipant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatParticipant.swift; sourceTree = ""; }; + 0AF8C48026A894890052FBFF /* TokenCredentialAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenCredentialAdapter.swift; sourceTree = ""; }; + 0AF8C4C226A8BBE60052FBFF /* AzureTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureTest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0ECA8CD1258181A5006760F7 /* ChatClientUnitTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatClientUnitTests.swift; sourceTree = ""; }; 0ECA8CDE258188D0006760F7 /* GetThreadResponse.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = GetThreadResponse.json; sourceTree = ""; }; 0ECA8CEA2582A52D006760F7 /* UnauthorizedError.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = UnauthorizedError.json; sourceTree = ""; }; @@ -169,76 +233,20 @@ 0ECA8D2225888DD8006760F7 /* ListParticipantsResponse.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ListParticipantsResponse.json; sourceTree = ""; }; 0ECA8D28258892CD006760F7 /* AddParticipantResponse.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = AddParticipantResponse.json; sourceTree = ""; }; 0ECA8D2E25889619006760F7 /* ListReadReceiptResponse.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = ListReadReceiptResponse.json; sourceTree = ""; }; - 0EDC08812640892A004CA84B /* SendTypingNotificationOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendTypingNotificationOptions.swift; sourceTree = ""; }; - 0EDC08822640892A004CA84B /* CreateChatThreadOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadOptions.swift; sourceTree = ""; }; - 0EDC08832640892A004CA84B /* ListChatReadReceiptsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatReadReceiptsOptions.swift; sourceTree = ""; }; - 0EDC08842640892A004CA84B /* UpdateChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatMessageOptions.swift; sourceTree = ""; }; - 0EDC08852640892A004CA84B /* SendChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatMessageOptions.swift; sourceTree = ""; }; - 0EDC08862640892A004CA84B /* GetChatThreadPropertiesOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetChatThreadPropertiesOptions.swift; sourceTree = ""; }; - 0EDC08872640892A004CA84B /* ListChatParticipantsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatParticipantsOptions.swift; sourceTree = ""; }; - 0EDC08892640892A004CA84B /* GetChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetChatMessageOptions.swift; sourceTree = ""; }; - 0EDC088A2640892B004CA84B /* ListChatMessagesOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatMessagesOptions.swift; sourceTree = ""; }; - 0EDC088B2640892B004CA84B /* DeleteChatThreadOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteChatThreadOptions.swift; sourceTree = ""; }; - 0EDC088C2640892B004CA84B /* ListChatThreadsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListChatThreadsOptions.swift; sourceTree = ""; }; - 0EDC088D2640892B004CA84B /* AddChatParticipantsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddChatParticipantsOptions.swift; sourceTree = ""; }; - 0EDC088E2640892B004CA84B /* DeleteChatMessageOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteChatMessageOptions.swift; sourceTree = ""; }; - 0EDC088F2640892B004CA84B /* RemoveChatParticipantOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemoveChatParticipantOptions.swift; sourceTree = ""; }; - 0EDC08902640892B004CA84B /* SendChatReadReceiptOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatReadReceiptOptions.swift; sourceTree = ""; }; - 0EDC08912640892B004CA84B /* UpdateChatThreadPropertiesOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatThreadPropertiesOptions.swift; sourceTree = ""; }; 2CB55B558C70B4045A54487D /* Pods-AzureCommunicationChatTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureCommunicationChatTests.debug.xcconfig"; path = "Target Support Files/Pods-AzureCommunicationChatTests/Pods-AzureCommunicationChatTests.debug.xcconfig"; sourceTree = ""; }; + 692462E97C3640FA58E7D193 /* Pods_AzureCommunicationChat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureCommunicationChat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 81ACD2D328DC5DE8F0F90C92 /* Pods-AzureCommunicationChatUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureCommunicationChatUnitTests.debug.xcconfig"; path = "Target Support Files/Pods-AzureCommunicationChatUnitTests/Pods-AzureCommunicationChatUnitTests.debug.xcconfig"; sourceTree = ""; }; 8840448725D5DD7900A194DC /* IdentifierSerializerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierSerializerTests.swift; sourceTree = ""; }; - 8840449725D5FA6200A194DC /* IdentifierSerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifierSerializer.swift; sourceTree = ""; }; - 889FF7C9260516FA00722630 /* TokenCredentialAdapter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TokenCredentialAdapter.swift; sourceTree = ""; }; - 88D37B8B25D60CCD004F3699 /* MicrosoftTeamsUserIdentifierModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MicrosoftTeamsUserIdentifierModel.swift; sourceTree = ""; }; - 88D37B8C25D60CCD004F3699 /* CommunicationUserIdentifierModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationUserIdentifierModel.swift; sourceTree = ""; }; - 88D37B8D25D60CCD004F3699 /* PhoneNumberIdentifierModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneNumberIdentifierModel.swift; sourceTree = ""; }; 88F361152630EB7200A895D1 /* AzureCommunicationCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureCommunicationCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8E5206D2E09378DA0F9FD0E4 /* Pods-AzureCommunicationChatTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureCommunicationChatTests.release.xcconfig"; path = "Target Support Files/Pods-AzureCommunicationChatTests/Pods-AzureCommunicationChatTests.release.xcconfig"; sourceTree = ""; }; 9FE998BEC9685C476F2AFD1C /* Pods-AzureCommunicationChat.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureCommunicationChat.debug.xcconfig"; path = "Target Support Files/Pods-AzureCommunicationChat/Pods-AzureCommunicationChat.debug.xcconfig"; sourceTree = ""; }; "AzureCommunicationChat::AzureCommunicationChat::Product" /* AzureCommunicationChat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureCommunicationChat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C53A93628463638BD2194963 /* Pods_AzureCommunicationChatUnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureCommunicationChatUnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D10458A125EEA47800B3EB6D /* CommunicationSignalingClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationSignalingClient.swift; sourceTree = ""; }; - D10458A225EEA47800B3EB6D /* TrouterEventUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrouterEventUtil.swift; sourceTree = ""; }; - D10458A325EEA47800B3EB6D /* TrouterNotificationPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrouterNotificationPayload.swift; sourceTree = ""; }; - D10458A425EEA47800B3EB6D /* TrouterSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrouterSettings.swift; sourceTree = ""; }; - D10458A625EEA47800B3EB6D /* ChatEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatEvent.swift; sourceTree = ""; }; D10C3BCD25A63F7800A181E3 /* listParticipants.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = listParticipants.json; sourceTree = ""; }; D10C3BD325A660AF00A181E3 /* listMessages.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = listMessages.json; sourceTree = ""; }; D10C3BD925A66D4D00A181E3 /* listThreads.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = listThreads.json; sourceTree = ""; }; D110F509258D604B001FA3CD /* AzureCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D13CE64E25BFB69100415467 /* listReadReceipts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = listReadReceipts.json; sourceTree = ""; }; D147E62825CE242C001CFB5D /* AzureCommunicationChatUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AzureCommunicationChatUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - D1565C70256DB74900AF45F8 /* ChatClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatClient.swift; sourceTree = ""; }; - D1565C73256DB76C00AF45F8 /* ChatThreadClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatThreadClient.swift; sourceTree = ""; }; - D15E98DE25B7C80C00E63DB2 /* PatchUtil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PatchUtil.swift; sourceTree = ""; }; - D15E98DF25B7C80C00E63DB2 /* Chat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Chat.swift; sourceTree = ""; }; - D15E98E325B7C80C00E63DB2 /* SendChatMessageRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatMessageRequest.swift; sourceTree = ""; }; - D15E98E725B7C80C00E63DB2 /* ChatMessagesCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessagesCollection.swift; sourceTree = ""; }; - D15E98EB25B7C80C00E63DB2 /* CommunicationErrorResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationErrorResponse.swift; sourceTree = ""; }; - D15E98EC25B7C80C00E63DB2 /* Enumerations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Enumerations.swift; sourceTree = ""; }; - D15E98ED25B7C80C00E63DB2 /* AddChatParticipantsResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddChatParticipantsResult.swift; sourceTree = ""; }; - D15E98EE25B7C80C00E63DB2 /* ChatMessageReadReceiptsCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageReadReceiptsCollection.swift; sourceTree = ""; }; - D15E98F325B7C80C00E63DB2 /* SendReadReceiptRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendReadReceiptRequest.swift; sourceTree = ""; }; - D15E98F525B7C80C00E63DB2 /* SendChatMessageResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendChatMessageResult.swift; sourceTree = ""; }; - D15E98F825B7C80C00E63DB2 /* ChatParticipantsCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatParticipantsCollection.swift; sourceTree = ""; }; - D16C802C25BA0A2400C42803 /* ChatMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessage.swift; sourceTree = ""; }; - D16C803225BA0AE400C42803 /* ChatThreadProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatThreadProperties.swift; sourceTree = ""; }; - D16C803625BA0AFE00C42803 /* ChatParticipant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatParticipant.swift; sourceTree = ""; }; - D16C803A25BA0B0E00C42803 /* ChatMessageReadReceipt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageReadReceipt.swift; sourceTree = ""; }; - D16C803E25BA0B5200C42803 /* ChatMessageContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageContent.swift; sourceTree = ""; }; - D16C804225BA402100C42803 /* CreateChatThreadRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateChatThreadRequest.swift; sourceTree = ""; }; - D16C804625BA406D00C42803 /* CreateChatThreadResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateChatThreadResult.swift; sourceTree = ""; }; - D17C7B2E25FBF4AE007AD39B /* ChatThread.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThread.swift; sourceTree = ""; }; - D17C7B5025FBF4D5007AD39B /* ChatThreadsItemCollection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadsItemCollection.swift; sourceTree = ""; }; - D17C7B5125FBF4D5007AD39B /* CreateChatThreadRequestInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadRequestInternal.swift; sourceTree = ""; }; - D17C7B5325FBF4D5007AD39B /* CreateChatThreadResultInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateChatThreadResultInternal.swift; sourceTree = ""; }; - D17C7B5425FBF4D5007AD39B /* ChatParticipantInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatParticipantInternal.swift; sourceTree = ""; }; - D17C7B5525FBF4D5007AD39B /* ChatMessageInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageInternal.swift; sourceTree = ""; }; - D17C7B5625FBF4D5007AD39B /* ChatMessageReadReceiptInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageReadReceiptInternal.swift; sourceTree = ""; }; - D17C7B5725FBF4D5007AD39B /* ChatThreadPropertiesInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadPropertiesInternal.swift; sourceTree = ""; }; - D17C7B5825FBF4D5007AD39B /* ChatThreadItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatThreadItem.swift; sourceTree = ""; }; - D17C7B5925FBF4D5007AD39B /* ChatMessageContentInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageContentInternal.swift; sourceTree = ""; }; D1B7EAED257F02FC004F384A /* AzureCommunicationChatTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AzureCommunicationChatTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D1B7EAFC257F03A1004F384A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D1BA104525807B0B00CA7130 /* CreateThreadResponse.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = CreateThreadResponse.json; sourceTree = ""; }; @@ -256,13 +264,9 @@ D1CD93E3258D6EF700409613 /* sendTypingNotification.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = sendTypingNotification.json; sourceTree = ""; }; D1CD93E7258D6F0600409613 /* updateMessage.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = updateMessage.json; sourceTree = ""; }; D1CD93EB258D6F1300409613 /* updateTopic.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = updateTopic.json; sourceTree = ""; }; - D1CF1A872697C95500F7EB1A /* UpdateChatMessageRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatMessageRequest.swift; sourceTree = ""; }; D1D829BD25D1FFD700AC3CF3 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - D1F16FA32697B200005606C3 /* UpdateChatThreadRequestInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UpdateChatThreadRequestInternal.swift; sourceTree = ""; }; - D1F16FA42697B200005606C3 /* AddChatParticipantsRequestInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddChatParticipantsRequestInternal.swift; sourceTree = ""; }; - D1F16FA52697B200005606C3 /* CommunicationIdentifierModelInternal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CommunicationIdentifierModelInternal.swift; sourceTree = ""; }; - EA55FCB9FB58BAE327C97579 /* Pods_AzureCommunicationChatTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureCommunicationChatTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F6C8A0BDD521FD8ECD116120 /* Pods_AzureCommunicationChat.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureCommunicationChat.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E6C3EB522186A40FAFDDD43A /* Pods_AzureCommunicationChatUnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureCommunicationChatUnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F299C5DDF75561133016BAD1 /* Pods_AzureCommunicationChatTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureCommunicationChatTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FCF18D210ADF02D5CBA71786 /* Pods-AzureCommunicationChatUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureCommunicationChatUnitTests.release.xcconfig"; path = "Target Support Files/Pods-AzureCommunicationChatUnitTests/Pods-AzureCommunicationChatUnitTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -271,8 +275,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 0A922A0926B0746500D4B387 /* libAzureTest.a in Frameworks */, D147E62D25CE242C001CFB5D /* AzureCommunicationChat.framework in Frameworks */, - D56B96117CC0DBAC8167088A /* Pods_AzureCommunicationChatUnitTests.framework in Frameworks */, + A0AA847FE30B597264552CF7 /* Pods_AzureCommunicationChatUnitTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -280,8 +285,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 0A922A0726B0745B00D4B387 /* libAzureTest.a in Frameworks */, D1B7EB06257F0D20004F384A /* AzureCommunicationChat.framework in Frameworks */, - 12D6B4896157F74B8AA686B1 /* Pods_AzureCommunicationChatTests.framework in Frameworks */, + 67AF2DD80FB3A3BE62D3A052 /* Pods_AzureCommunicationChatTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -292,205 +298,223 @@ 0A6A542326867D21001006AF /* Trouter.xcframework in Frameworks */, D110F50A258D604B001FA3CD /* AzureCore.framework in Frameworks */, 88F361162630EB7200A895D1 /* AzureCommunicationCommon.framework in Frameworks */, - 826430C6A8104690F1F5DD05 /* Pods_AzureCommunicationChat.framework in Frameworks */, + 77128E1C2E4C558CACB2F225 /* Pods_AzureCommunicationChat.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0A10411225D306B3008E472E /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 0A10411325D306B3008E472E /* Info.plist */, - ); - path = "Supporting Files"; - sourceTree = ""; - }; 0A74765A2522918800819FC9 /* Frameworks */ = { isa = PBXGroup; children = ( + 0A922A0826B0746500D4B387 /* libAzureTest.a */, + 0A922A0626B0745B00D4B387 /* libAzureTest.a */, + 0A922A0426B0720A00D4B387 /* libAzureTest.a */, 0A6A542226867D21001006AF /* Trouter.xcframework */, 88F361152630EB7200A895D1 /* AzureCommunicationCommon.framework */, + 0A9229EA26B06E6F00D4B387 /* AzureTest.framework */, D110F509258D604B001FA3CD /* AzureCore.framework */, - F6C8A0BDD521FD8ECD116120 /* Pods_AzureCommunicationChat.framework */, - EA55FCB9FB58BAE327C97579 /* Pods_AzureCommunicationChatTests.framework */, - C53A93628463638BD2194963 /* Pods_AzureCommunicationChatUnitTests.framework */, + 0A9229E626B068DE00D4B387 /* AzureTest.framework */, + 0AF8C4C226A8BBE60052FBFF /* AzureTest.framework */, + F299C5DDF75561133016BAD1 /* Pods_AzureCommunicationChatTests.framework */, + 692462E97C3640FA58E7D193 /* Pods_AzureCommunicationChat.framework */, + E6C3EB522186A40FAFDDD43A /* Pods_AzureCommunicationChatUnitTests.framework */, ); name = Frameworks; sourceTree = ""; }; - 0ECA8CD52581838E006760F7 /* Mocks */ = { + 0A9207EC26839B3100469608 /* Recordings */ = { isa = PBXGroup; children = ( - 0ECA8D2E25889619006760F7 /* ListReadReceiptResponse.json */, - 0ECA8D28258892CD006760F7 /* AddParticipantResponse.json */, - 0ECA8D2225888DD8006760F7 /* ListParticipantsResponse.json */, - 0ECA8D1C258887D3006760F7 /* ListMessagesResponse.json */, - 0ECA8D1625888667006760F7 /* GetMessageResponse.json */, - 0ECA8D0E25888515006760F7 /* NoContent.json */, - 0ECA8D0F25888515006760F7 /* SendMessageResponse.json */, - 0ECA8CF02582A633006760F7 /* ListThreadsResponse.json */, - 0ECA8CEA2582A52D006760F7 /* UnauthorizedError.json */, - 0ECA8CDE258188D0006760F7 /* GetThreadResponse.json */, - D1BA104525807B0B00CA7130 /* CreateThreadResponse.json */, + 0A6A5453268BAB8B001006AF /* test_CreateThread_WithoutParticipants.json */, + 0A6A5454268BAB8B001006AF /* test_ListThreads_ReturnsChatThreadItems.json */, ); - path = Mocks; + path = Recordings; sourceTree = ""; }; - 8840445625D5C65700A194DC /* Serializer */ = { + 0AF8C43826A894890052FBFF /* Serializer */ = { isa = PBXGroup; children = ( - 8840449725D5FA6200A194DC /* IdentifierSerializer.swift */, + 0AF8C43926A894890052FBFF /* IdentifierSerializer.swift */, ); path = Serializer; sourceTree = ""; }; - 889FF7C82605161A00722630 /* Token */ = { + 0AF8C43A26A894890052FBFF /* Supporting Files */ = { isa = PBXGroup; children = ( - 889FF7C9260516FA00722630 /* TokenCredentialAdapter.swift */, + 0AF8C43B26A894890052FBFF /* Info.plist */, ); - path = Token; + path = "Supporting Files"; sourceTree = ""; }; - A4D0748296D3AEEA8C0DAB94 /* Pods */ = { + 0AF8C43C26A894890052FBFF /* Generated */ = { isa = PBXGroup; children = ( - 9FE998BEC9685C476F2AFD1C /* Pods-AzureCommunicationChat.debug.xcconfig */, - 04B336EEF1E42CCE389E4935 /* Pods-AzureCommunicationChat.release.xcconfig */, - 2CB55B558C70B4045A54487D /* Pods-AzureCommunicationChatTests.debug.xcconfig */, - 8E5206D2E09378DA0F9FD0E4 /* Pods-AzureCommunicationChatTests.release.xcconfig */, - 81ACD2D328DC5DE8F0F90C92 /* Pods-AzureCommunicationChatUnitTests.debug.xcconfig */, - FCF18D210ADF02D5CBA71786 /* Pods-AzureCommunicationChatUnitTests.release.xcconfig */, + 0AF8C43D26A894890052FBFF /* Options */, + 0AF8C44F26A894890052FBFF /* Util */, + 0AF8C45126A894890052FBFF /* Chat.swift */, + 0AF8C45226A894890052FBFF /* Models */, + 0AF8C46D26A894890052FBFF /* ChatThread.swift */, + 0AF8C46E26A894890052FBFF /* ChatClientInternal.swift */, ); - name = Pods; - path = ../../../Pods; + path = Generated; sourceTree = ""; }; - D104589925EEA47800B3EB6D /* Signaling */ = { + 0AF8C43D26A894890052FBFF /* Options */ = { isa = PBXGroup; children = ( - D10458A125EEA47800B3EB6D /* CommunicationSignalingClient.swift */, - D10458A325EEA47800B3EB6D /* TrouterNotificationPayload.swift */, - D10458A425EEA47800B3EB6D /* TrouterSettings.swift */, - D10458A525EEA47800B3EB6D /* Events */, + 0AF8C43E26A894890052FBFF /* UpdateChatMessageOptions.swift */, + 0AF8C43F26A894890052FBFF /* RemoveChatParticipantOptions.swift */, + 0AF8C44026A894890052FBFF /* SendChatReadReceiptOptions.swift */, + 0AF8C44126A894890052FBFF /* AzureCommunicationChatClientOptions.swift */, + 0AF8C44226A894890052FBFF /* ListChatParticipantsOptions.swift */, + 0AF8C44326A894890052FBFF /* ListChatMessagesOptions.swift */, + 0AF8C44426A894890052FBFF /* SendTypingNotificationOptions.swift */, + 0AF8C44526A894890052FBFF /* AddChatParticipantsOptions.swift */, + 0AF8C44626A894890052FBFF /* GetChatThreadPropertiesOptions.swift */, + 0AF8C44726A894890052FBFF /* SendChatMessageOptions.swift */, + 0AF8C44826A894890052FBFF /* DeleteChatMessageOptions.swift */, + 0AF8C44926A894890052FBFF /* DeleteChatThreadOptions.swift */, + 0AF8C44A26A894890052FBFF /* GetChatMessageOptions.swift */, + 0AF8C44B26A894890052FBFF /* ListChatReadReceiptsOptions.swift */, + 0AF8C44C26A894890052FBFF /* UpdateChatThreadPropertiesOptions.swift */, + 0AF8C44D26A894890052FBFF /* CreateChatThreadOptions.swift */, + 0AF8C44E26A894890052FBFF /* ListChatThreadsOptions.swift */, ); - path = Signaling; + path = Options; sourceTree = ""; }; - D10458A525EEA47800B3EB6D /* Events */ = { + 0AF8C44F26A894890052FBFF /* Util */ = { isa = PBXGroup; children = ( - D10458A225EEA47800B3EB6D /* TrouterEventUtil.swift */, - 0E5C83232667561B00F7D58F /* TrouterEvent.swift */, - D10458A625EEA47800B3EB6D /* ChatEvent.swift */, + 0AF8C45026A894890052FBFF /* PatchUtil.swift */, ); - path = Events; + path = Util; sourceTree = ""; }; - D15E98C925B7C80C00E63DB2 /* Generated */ = { + 0AF8C45226A894890052FBFF /* Models */ = { isa = PBXGroup; children = ( - 0A8B9FF2264C6D2C009C24B0 /* ChatClientInternal.swift */, - D17C7B2E25FBF4AE007AD39B /* ChatThread.swift */, - D15E98CB25B7C80C00E63DB2 /* Options */, - D15E98DD25B7C80C00E63DB2 /* Util */, - D15E98DF25B7C80C00E63DB2 /* Chat.swift */, - D15E98E025B7C80C00E63DB2 /* Models */, + 0AF8C45326A894890052FBFF /* SendChatMessageRequest.swift */, + 0AF8C45426A894890052FBFF /* CommunicationUserIdentifierModel.swift */, + 0AF8C45526A894890052FBFF /* ChatError.swift */, + 0AF8C45626A894890052FBFF /* ChatMessagesCollection.swift */, + 0AF8C45726A894890052FBFF /* ChatMessageInternal.swift */, + 0AF8C45826A894890052FBFF /* ChatMessageReadReceiptInternal.swift */, + 0AF8C45926A894890052FBFF /* ChatThreadPropertiesInternal.swift */, + 0AF8C45A26A894890052FBFF /* CommunicationErrorResponse.swift */, + 0AF8C45B26A894890052FBFF /* AddChatParticipantsRequestInternal.swift */, + 0AF8C45C26A894890052FBFF /* Enumerations.swift */, + 0AF8C45D26A894890052FBFF /* PhoneNumberIdentifierModel.swift */, + 0AF8C45E26A894890052FBFF /* AddChatParticipantsResult.swift */, + 0AF8C45F26A894890052FBFF /* ChatMessageReadReceiptsCollection.swift */, + 0AF8C46026A894890052FBFF /* CreateChatThreadResultInternal.swift */, + 0AF8C46126A894890052FBFF /* UpdateChatMessageRequest.swift */, + 0AF8C46226A894890052FBFF /* MicrosoftTeamsUserIdentifierModel.swift */, + 0AF8C46326A894890052FBFF /* SendReadReceiptRequest.swift */, + 0AF8C46426A894890052FBFF /* ChatThreadsItemCollection.swift */, + 0AF8C46526A894890052FBFF /* ChatParticipantInternal.swift */, + 0AF8C46626A894890052FBFF /* CommunicationIdentifierModelInternal.swift */, + 0AF8C46726A894890052FBFF /* UpdateChatThreadRequestInternal.swift */, + 0AF8C46826A894890052FBFF /* ChatThreadItem.swift */, + 0AF8C46926A894890052FBFF /* SendChatMessageResult.swift */, + 0AF8C46A26A894890052FBFF /* CreateChatThreadRequestInternal.swift */, + 0AF8C46B26A894890052FBFF /* ChatParticipantsCollection.swift */, + 0AF8C46C26A894890052FBFF /* ChatMessageContentInternal.swift */, ); - path = Generated; + path = Models; sourceTree = ""; }; - D15E98CB25B7C80C00E63DB2 /* Options */ = { + 0AF8C46F26A894890052FBFF /* Signaling */ = { isa = PBXGroup; children = ( - 0A68BF772658747C004A7E3D /* AzureCommunicationChatClientOptions.swift */, - 0EDC088D2640892B004CA84B /* AddChatParticipantsOptions.swift */, - 0EDC08822640892A004CA84B /* CreateChatThreadOptions.swift */, - 0EDC088E2640892B004CA84B /* DeleteChatMessageOptions.swift */, - 0EDC088B2640892B004CA84B /* DeleteChatThreadOptions.swift */, - 0EDC08892640892A004CA84B /* GetChatMessageOptions.swift */, - 0EDC08862640892A004CA84B /* GetChatThreadPropertiesOptions.swift */, - 0EDC088A2640892B004CA84B /* ListChatMessagesOptions.swift */, - 0EDC08872640892A004CA84B /* ListChatParticipantsOptions.swift */, - 0EDC08832640892A004CA84B /* ListChatReadReceiptsOptions.swift */, - 0EDC088C2640892B004CA84B /* ListChatThreadsOptions.swift */, - 0EDC088F2640892B004CA84B /* RemoveChatParticipantOptions.swift */, - 0EDC08852640892A004CA84B /* SendChatMessageOptions.swift */, - 0EDC08902640892B004CA84B /* SendChatReadReceiptOptions.swift */, - 0EDC08812640892A004CA84B /* SendTypingNotificationOptions.swift */, - 0EDC08842640892A004CA84B /* UpdateChatMessageOptions.swift */, - 0EDC08912640892B004CA84B /* UpdateChatThreadPropertiesOptions.swift */, + 0AF8C47026A894890052FBFF /* CommunicationSignalingClient.swift */, + 0AF8C47126A894890052FBFF /* TrouterNotificationPayload.swift */, + 0AF8C47226A894890052FBFF /* TrouterSettings.swift */, + 0AF8C47326A894890052FBFF /* events */, ); - path = Options; + path = Signaling; sourceTree = ""; }; - D15E98DD25B7C80C00E63DB2 /* Util */ = { + 0AF8C47326A894890052FBFF /* events */ = { isa = PBXGroup; children = ( - D15E98DE25B7C80C00E63DB2 /* PatchUtil.swift */, + 0AF8C47426A894890052FBFF /* ChatEvent.swift */, + 0AF8C47526A894890052FBFF /* TrouterEvent.swift */, + 0AF8C47626A894890052FBFF /* TrouterEventUtil.swift */, ); - path = Util; + path = events; sourceTree = ""; }; - D15E98E025B7C80C00E63DB2 /* Models */ = { + 0AF8C47726A894890052FBFF /* Models */ = { isa = PBXGroup; children = ( - D1CF1A872697C95500F7EB1A /* UpdateChatMessageRequest.swift */, - D1F16FA42697B200005606C3 /* AddChatParticipantsRequestInternal.swift */, - D1F16FA52697B200005606C3 /* CommunicationIdentifierModelInternal.swift */, - D1F16FA32697B200005606C3 /* UpdateChatThreadRequestInternal.swift */, - 0A68BF752656EED6004A7E3D /* ChatError.swift */, - D17C7B5925FBF4D5007AD39B /* ChatMessageContentInternal.swift */, - D17C7B5525FBF4D5007AD39B /* ChatMessageInternal.swift */, - D17C7B5625FBF4D5007AD39B /* ChatMessageReadReceiptInternal.swift */, - D17C7B5425FBF4D5007AD39B /* ChatParticipantInternal.swift */, - D17C7B5825FBF4D5007AD39B /* ChatThreadItem.swift */, - D17C7B5725FBF4D5007AD39B /* ChatThreadPropertiesInternal.swift */, - D17C7B5025FBF4D5007AD39B /* ChatThreadsItemCollection.swift */, - D17C7B5125FBF4D5007AD39B /* CreateChatThreadRequestInternal.swift */, - D17C7B5325FBF4D5007AD39B /* CreateChatThreadResultInternal.swift */, - 88D37B8C25D60CCD004F3699 /* CommunicationUserIdentifierModel.swift */, - 88D37B8B25D60CCD004F3699 /* MicrosoftTeamsUserIdentifierModel.swift */, - 88D37B8D25D60CCD004F3699 /* PhoneNumberIdentifierModel.swift */, - D15E98E325B7C80C00E63DB2 /* SendChatMessageRequest.swift */, - D15E98E725B7C80C00E63DB2 /* ChatMessagesCollection.swift */, - D15E98EB25B7C80C00E63DB2 /* CommunicationErrorResponse.swift */, - D15E98EC25B7C80C00E63DB2 /* Enumerations.swift */, - D15E98ED25B7C80C00E63DB2 /* AddChatParticipantsResult.swift */, - D15E98EE25B7C80C00E63DB2 /* ChatMessageReadReceiptsCollection.swift */, - D15E98F325B7C80C00E63DB2 /* SendReadReceiptRequest.swift */, - D15E98F525B7C80C00E63DB2 /* SendChatMessageResult.swift */, - D15E98F825B7C80C00E63DB2 /* ChatParticipantsCollection.swift */, + 0AF8C47826A894890052FBFF /* ChatThreadProperties.swift */, + 0AF8C47926A894890052FBFF /* ChatMessageContent.swift */, + 0AF8C47A26A894890052FBFF /* ChatMessage.swift */, + 0AF8C47B26A894890052FBFF /* ChatMessageReadReceipt.swift */, + 0AF8C47C26A894890052FBFF /* CreateChatThreadRequest.swift */, + 0AF8C47D26A894890052FBFF /* CreateChatThreadResult.swift */, + 0AF8C47E26A894890052FBFF /* ChatParticipant.swift */, ); path = Models; sourceTree = ""; }; - D16C802B25BA0A0F00C42803 /* Models */ = { + 0AF8C47F26A894890052FBFF /* Token */ = { isa = PBXGroup; children = ( - D16C802C25BA0A2400C42803 /* ChatMessage.swift */, - D16C803225BA0AE400C42803 /* ChatThreadProperties.swift */, - D16C803625BA0AFE00C42803 /* ChatParticipant.swift */, - D16C803A25BA0B0E00C42803 /* ChatMessageReadReceipt.swift */, - D16C803E25BA0B5200C42803 /* ChatMessageContent.swift */, - D16C804225BA402100C42803 /* CreateChatThreadRequest.swift */, - D16C804625BA406D00C42803 /* CreateChatThreadResult.swift */, + 0AF8C48026A894890052FBFF /* TokenCredentialAdapter.swift */, ); - path = Models; + path = Token; + sourceTree = ""; + }; + 0ECA8CD52581838E006760F7 /* Mocks */ = { + isa = PBXGroup; + children = ( + 0ECA8D2E25889619006760F7 /* ListReadReceiptResponse.json */, + 0ECA8D28258892CD006760F7 /* AddParticipantResponse.json */, + 0ECA8D2225888DD8006760F7 /* ListParticipantsResponse.json */, + 0ECA8D1C258887D3006760F7 /* ListMessagesResponse.json */, + 0ECA8D1625888667006760F7 /* GetMessageResponse.json */, + 0ECA8D0E25888515006760F7 /* NoContent.json */, + 0ECA8D0F25888515006760F7 /* SendMessageResponse.json */, + 0ECA8CF02582A633006760F7 /* ListThreadsResponse.json */, + 0ECA8CEA2582A52D006760F7 /* UnauthorizedError.json */, + 0ECA8CDE258188D0006760F7 /* GetThreadResponse.json */, + D1BA104525807B0B00CA7130 /* CreateThreadResponse.json */, + ); + path = Mocks; + sourceTree = ""; + }; + A4D0748296D3AEEA8C0DAB94 /* Pods */ = { + isa = PBXGroup; + children = ( + 9FE998BEC9685C476F2AFD1C /* Pods-AzureCommunicationChat.debug.xcconfig */, + 04B336EEF1E42CCE389E4935 /* Pods-AzureCommunicationChat.release.xcconfig */, + 2CB55B558C70B4045A54487D /* Pods-AzureCommunicationChatTests.debug.xcconfig */, + 8E5206D2E09378DA0F9FD0E4 /* Pods-AzureCommunicationChatTests.release.xcconfig */, + 81ACD2D328DC5DE8F0F90C92 /* Pods-AzureCommunicationChatUnitTests.debug.xcconfig */, + FCF18D210ADF02D5CBA71786 /* Pods-AzureCommunicationChatUnitTests.release.xcconfig */, + ); + name = Pods; + path = ../../../Pods; sourceTree = ""; }; D1B7EAFA257F03A1004F384A /* Tests */ = { isa = PBXGroup; children = ( + 0A9207EC26839B3100469608 /* Recordings */, D1CD93AB258D6C0300409613 /* Util */, D1B7EAFC257F03A1004F384A /* Info.plist */, + 0AE5BA06267D25AD006B93B7 /* TestSettings.swift */, 8840448725D5DD7900A194DC /* IdentifierSerializerTests.swift */, 0ECA8CD1258181A5006760F7 /* ChatClientUnitTests.swift */, 0ECA8D08258432DC006760F7 /* ChatThreadClientUnitTests.swift */, D1CD93A1258D6BC700409613 /* ChatClientTests.swift */, D1CD93A7258D6BDC00409613 /* ChatThreadClientTests.swift */, + 0A1E7593267003A000054F60 /* ChatClientDVRTests.swift */, ); path = Tests; sourceTree = ""; @@ -555,14 +579,15 @@ OBJ_7 /* Source */ = { isa = PBXGroup; children = ( - 889FF7C82605161A00722630 /* Token */, - 8840445625D5C65700A194DC /* Serializer */, - D1565C70256DB74900AF45F8 /* ChatClient.swift */, - D1565C73256DB76C00AF45F8 /* ChatThreadClient.swift */, - D16C802B25BA0A0F00C42803 /* Models */, - D104589925EEA47800B3EB6D /* Signaling */, - D15E98C925B7C80C00E63DB2 /* Generated */, - 0A10411225D306B3008E472E /* Supporting Files */, + 0AF8C43626A894890052FBFF /* ChatClient.swift */, + 0AF8C43526A894890052FBFF /* ChatThreadClient.swift */, + 0AF8C43726A894890052FBFF /* Custom.swift */, + 0AF8C43C26A894890052FBFF /* Generated */, + 0AF8C47726A894890052FBFF /* Models */, + 0AF8C43826A894890052FBFF /* Serializer */, + 0AF8C46F26A894890052FBFF /* Signaling */, + 0AF8C43A26A894890052FBFF /* Supporting Files */, + 0AF8C47F26A894890052FBFF /* Token */, ); path = Source; sourceTree = SOURCE_ROOT; @@ -578,7 +603,6 @@ OBJ_120 /* Sources */, OBJ_161 /* Frameworks */, 0ADDCFDA258D2AA900BD5E58 /* Format and Lint */, - 88F361182630EB7200A895D1 /* Embed Frameworks */, ); buildRules = ( ); @@ -640,6 +664,9 @@ LastUpgradeCheck = 9999; ORGANIZATIONNAME = "Azure SDK Team"; TargetAttributes = { + "AzureCommunicationChat::AzureCommunicationChat" = { + LastSwiftMigration = 1250; + }; D147E62725CE242C001CFB5D = { CreatedOnToolsVersion = 12.4; }; @@ -691,6 +718,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0A6A5455268BAC57001006AF /* test_CreateThread_WithoutParticipants.json in Resources */, D1CD93CC258D6E9E00409613 /* deleteThread.json in Resources */, D1CD93EC258D6F1300409613 /* updateTopic.json in Resources */, D1CD93C4258D6E7300409613 /* createThread.json in Resources */, @@ -705,6 +733,7 @@ D1CD93E0258D6EEA00409613 /* sendReadReceipt.json in Resources */, D1CD93E8258D6F0600409613 /* updateMessage.json in Resources */, D1CD93BE258D6E6200409613 /* addParticipants.json in Resources */, + 0A6A5457268BAC5D001006AF /* test_ListThreads_ReturnsChatThreadItems.json in Resources */, D10C3BD425A660AF00A181E3 /* listMessages.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -840,6 +869,7 @@ D147E64025CE244F001CFB5D /* ChatThreadClientUnitTests.swift in Sources */, D1AEA09C2608EE3700849D5C /* Util.swift in Sources */, D187D9B126151DB900C233B7 /* IdentifierSerializerTests.swift in Sources */, + 0A1982DC2682A2DB00B7F3A2 /* TestSettings.swift in Sources */, D147E63925CE244A001CFB5D /* ChatClientUnitTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -849,7 +879,9 @@ buildActionMask = 2147483647; files = ( D1CD93A8258D6BDC00409613 /* ChatThreadClientTests.swift in Sources */, + 0A1E7594267003A000054F60 /* ChatClientDVRTests.swift in Sources */, D1CD93AD258D6C2500409613 /* Util.swift in Sources */, + 0AE5BA07267D25AD006B93B7 /* TestSettings.swift in Sources */, D1CD93A2258D6BC700409613 /* ChatClientTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -858,70 +890,71 @@ isa = PBXSourcesBuildPhase; buildActionMask = 0; files = ( - 0EDC08932640892B004CA84B /* CreateChatThreadOptions.swift in Sources */, - 0EDC08952640892B004CA84B /* UpdateChatMessageOptions.swift in Sources */, - D197C5DF260E82F80049718B /* TokenCredentialAdapter.swift in Sources */, - D1565C71256DB74900AF45F8 /* ChatClient.swift in Sources */, - 0EDC089D2640892B004CA84B /* ListChatThreadsOptions.swift in Sources */, - 0EDC08A02640892B004CA84B /* RemoveChatParticipantOptions.swift in Sources */, - D1565C74256DB76C00AF45F8 /* ChatThreadClient.swift in Sources */, - D10458A725EEA47800B3EB6D /* CommunicationSignalingClient.swift in Sources */, - D10458A825EEA47800B3EB6D /* TrouterEventUtil.swift in Sources */, - D17C7B5E25FBF4D5007AD39B /* ChatParticipantInternal.swift in Sources */, - D1CF1A882697C95500F7EB1A /* UpdateChatMessageRequest.swift in Sources */, - 0EDC089C2640892B004CA84B /* DeleteChatThreadOptions.swift in Sources */, - D15E991925B7C80C00E63DB2 /* Enumerations.swift in Sources */, - D1F16FA92697B200005606C3 /* CommunicationIdentifierModelInternal.swift in Sources */, - D16C803325BA0AE400C42803 /* ChatThreadProperties.swift in Sources */, - D16C804725BA406D00C42803 /* CreateChatThreadResult.swift in Sources */, - 0EDC08962640892B004CA84B /* SendChatMessageOptions.swift in Sources */, - D15E992225B7C80C00E63DB2 /* SendChatMessageResult.swift in Sources */, - 88D37B9025D60CCD004F3699 /* CommunicationUserIdentifierModel.swift in Sources */, - 0EDC089E2640892B004CA84B /* AddChatParticipantsOptions.swift in Sources */, - D15E990C25B7C80C00E63DB2 /* PatchUtil.swift in Sources */, - 0EDC089F2640892B004CA84B /* DeleteChatMessageOptions.swift in Sources */, - D17C7B2F25FBF4AE007AD39B /* ChatThread.swift in Sources */, - D17C7B5A25FBF4D5007AD39B /* ChatThreadsItemCollection.swift in Sources */, - 0EDC08942640892B004CA84B /* ListChatReadReceiptsOptions.swift in Sources */, - 0EDC08972640892B004CA84B /* GetChatThreadPropertiesOptions.swift in Sources */, - D15E991825B7C80C00E63DB2 /* CommunicationErrorResponse.swift in Sources */, - D17C7B6125FBF4D5007AD39B /* ChatThreadPropertiesInternal.swift in Sources */, - D17C7B6325FBF4D5007AD39B /* ChatMessageContentInternal.swift in Sources */, - D14DBCFB260EACEA005C9C43 /* TrouterNotificationPayload.swift in Sources */, - 0A68BF782658747C004A7E3D /* AzureCommunicationChatClientOptions.swift in Sources */, - D17C7B6225FBF4D5007AD39B /* ChatThreadItem.swift in Sources */, - 88D37B9125D60CCD004F3699 /* PhoneNumberIdentifierModel.swift in Sources */, - D15E991A25B7C80C00E63DB2 /* AddChatParticipantsResult.swift in Sources */, - D17C7B5D25FBF4D5007AD39B /* CreateChatThreadResultInternal.swift in Sources */, - 0E5C83242667561B00F7D58F /* TrouterEvent.swift in Sources */, - 8840449825D5FA6300A194DC /* IdentifierSerializer.swift in Sources */, - D16C803F25BA0B5200C42803 /* ChatMessageContent.swift in Sources */, - 88D37B8F25D60CCD004F3699 /* MicrosoftTeamsUserIdentifierModel.swift in Sources */, - D17C7B5F25FBF4D5007AD39B /* ChatMessageInternal.swift in Sources */, - D14DBCFF260EACED005C9C43 /* TrouterSettings.swift in Sources */, - 0A68BF762656EED6004A7E3D /* ChatError.swift in Sources */, - D15E991025B7C80C00E63DB2 /* SendChatMessageRequest.swift in Sources */, - D16C804325BA402100C42803 /* CreateChatThreadRequest.swift in Sources */, - D14DBD00260EACF0005C9C43 /* ChatEvent.swift in Sources */, - D15E991425B7C80C00E63DB2 /* ChatMessagesCollection.swift in Sources */, - D15E990D25B7C80C00E63DB2 /* Chat.swift in Sources */, - D15E992525B7C80C00E63DB2 /* ChatParticipantsCollection.swift in Sources */, - D15E992025B7C80C00E63DB2 /* SendReadReceiptRequest.swift in Sources */, - 0EDC08922640892B004CA84B /* SendTypingNotificationOptions.swift in Sources */, - 0EDC089A2640892B004CA84B /* GetChatMessageOptions.swift in Sources */, - 0EDC08A12640892B004CA84B /* SendChatReadReceiptOptions.swift in Sources */, - D17C7B5B25FBF4D5007AD39B /* CreateChatThreadRequestInternal.swift in Sources */, - 0EDC089B2640892B004CA84B /* ListChatMessagesOptions.swift in Sources */, - D15E991B25B7C80C00E63DB2 /* ChatMessageReadReceiptsCollection.swift in Sources */, - D16C802D25BA0A2400C42803 /* ChatMessage.swift in Sources */, - D16C803725BA0AFE00C42803 /* ChatParticipant.swift in Sources */, - D16C803B25BA0B0E00C42803 /* ChatMessageReadReceipt.swift in Sources */, - 0EDC08982640892B004CA84B /* ListChatParticipantsOptions.swift in Sources */, - 0A8B9FF3264C6D2C009C24B0 /* ChatClientInternal.swift in Sources */, - D1F16FA82697B200005606C3 /* AddChatParticipantsRequestInternal.swift in Sources */, - D1F16FA72697B200005606C3 /* UpdateChatThreadRequestInternal.swift in Sources */, - 0EDC08A22640892B004CA84B /* UpdateChatThreadPropertiesOptions.swift in Sources */, - D17C7B6025FBF4D5007AD39B /* ChatMessageReadReceiptInternal.swift in Sources */, + 0AF8C49126A8948A0052FBFF /* GetChatMessageOptions.swift in Sources */, + 0AF8C48C26A8948A0052FBFF /* AddChatParticipantsOptions.swift in Sources */, + 0AF8C48226A8948A0052FBFF /* ChatClient.swift in Sources */, + 0AF8C48526A8948A0052FBFF /* UpdateChatMessageOptions.swift in Sources */, + 0AF8C4BD26A8948A0052FBFF /* ChatMessageReadReceipt.swift in Sources */, + 0AF8C4A026A8948A0052FBFF /* AddChatParticipantsRequestInternal.swift in Sources */, + 0AF8C49626A8948A0052FBFF /* PatchUtil.swift in Sources */, + 0AF8C4BA26A8948A0052FBFF /* ChatThreadProperties.swift in Sources */, + 0AF8C48126A894890052FBFF /* ChatThreadClient.swift in Sources */, + 0AF8C4B526A8948A0052FBFF /* TrouterNotificationPayload.swift in Sources */, + 0AF8C4A926A8948A0052FBFF /* ChatThreadsItemCollection.swift in Sources */, + 0AF8C48426A8948A0052FBFF /* IdentifierSerializer.swift in Sources */, + 0AF8C4B226A8948A0052FBFF /* ChatThread.swift in Sources */, + 0AF8C4B326A8948A0052FBFF /* ChatClientInternal.swift in Sources */, + 0AF8C49826A8948A0052FBFF /* SendChatMessageRequest.swift in Sources */, + 0AF8C48B26A8948A0052FBFF /* SendTypingNotificationOptions.swift in Sources */, + 0AF8C4A826A8948A0052FBFF /* SendReadReceiptRequest.swift in Sources */, + 0AF8C49F26A8948A0052FBFF /* CommunicationErrorResponse.swift in Sources */, + 0AF8C49E26A8948A0052FBFF /* ChatThreadPropertiesInternal.swift in Sources */, + 0AF8C4BF26A8948A0052FBFF /* CreateChatThreadResult.swift in Sources */, + 0AF8C4C126A8948A0052FBFF /* TokenCredentialAdapter.swift in Sources */, + 0AF8C4AE26A8948A0052FBFF /* SendChatMessageResult.swift in Sources */, + 0AF8C4AB26A8948A0052FBFF /* CommunicationIdentifierModelInternal.swift in Sources */, + 0AF8C4B426A8948A0052FBFF /* CommunicationSignalingClient.swift in Sources */, + 0AF8C4B926A8948A0052FBFF /* TrouterEventUtil.swift in Sources */, + 0AF8C4B826A8948A0052FBFF /* TrouterEvent.swift in Sources */, + 0AF8C4B626A8948A0052FBFF /* TrouterSettings.swift in Sources */, + 0AF8C4AF26A8948A0052FBFF /* CreateChatThreadRequestInternal.swift in Sources */, + 0AF8C48F26A8948A0052FBFF /* DeleteChatMessageOptions.swift in Sources */, + 0AF8C49B26A8948A0052FBFF /* ChatMessagesCollection.swift in Sources */, + 0AF8C4A326A8948A0052FBFF /* AddChatParticipantsResult.swift in Sources */, + 0AF8C4A226A8948A0052FBFF /* PhoneNumberIdentifierModel.swift in Sources */, + 0AF8C49D26A8948A0052FBFF /* ChatMessageReadReceiptInternal.swift in Sources */, + 0AF8C4AD26A8948A0052FBFF /* ChatThreadItem.swift in Sources */, + 0AF8C4B126A8948A0052FBFF /* ChatMessageContentInternal.swift in Sources */, + 0AF8C49426A8948A0052FBFF /* CreateChatThreadOptions.swift in Sources */, + 0AF8C4BC26A8948A0052FBFF /* ChatMessage.swift in Sources */, + 0AF8C48E26A8948A0052FBFF /* SendChatMessageOptions.swift in Sources */, + 0AF8C49226A8948A0052FBFF /* ListChatReadReceiptsOptions.swift in Sources */, + 0AF8C4A726A8948A0052FBFF /* MicrosoftTeamsUserIdentifierModel.swift in Sources */, + 0AF8C48826A8948A0052FBFF /* AzureCommunicationChatClientOptions.swift in Sources */, + 0AF8C4AC26A8948A0052FBFF /* UpdateChatThreadRequestInternal.swift in Sources */, + 0AF8C4AA26A8948A0052FBFF /* ChatParticipantInternal.swift in Sources */, + 0AF8C49726A8948A0052FBFF /* Chat.swift in Sources */, + 0AF8C49526A8948A0052FBFF /* ListChatThreadsOptions.swift in Sources */, + 0AF8C49A26A8948A0052FBFF /* ChatError.swift in Sources */, + 0AF8C49926A8948A0052FBFF /* CommunicationUserIdentifierModel.swift in Sources */, + 0AF8C4B026A8948A0052FBFF /* ChatParticipantsCollection.swift in Sources */, + 0AF8C4C026A8948A0052FBFF /* ChatParticipant.swift in Sources */, + 0AF8C48D26A8948A0052FBFF /* GetChatThreadPropertiesOptions.swift in Sources */, + 0AF8C48626A8948A0052FBFF /* RemoveChatParticipantOptions.swift in Sources */, + 0AF8C48A26A8948A0052FBFF /* ListChatMessagesOptions.swift in Sources */, + 0AF8C4BE26A8948A0052FBFF /* CreateChatThreadRequest.swift in Sources */, + 0AF8C48926A8948A0052FBFF /* ListChatParticipantsOptions.swift in Sources */, + 0AF8C4BB26A8948A0052FBFF /* ChatMessageContent.swift in Sources */, + 0AF8C48326A8948A0052FBFF /* Custom.swift in Sources */, + 0AF8C4A626A8948A0052FBFF /* UpdateChatMessageRequest.swift in Sources */, + 0AF8C4A526A8948A0052FBFF /* CreateChatThreadResultInternal.swift in Sources */, + 0AF8C48726A8948A0052FBFF /* SendChatReadReceiptOptions.swift in Sources */, + 0AF8C49026A8948A0052FBFF /* DeleteChatThreadOptions.swift in Sources */, + 0AF8C49C26A8948A0052FBFF /* ChatMessageInternal.swift in Sources */, + 0AF8C49326A8948A0052FBFF /* UpdateChatThreadPropertiesOptions.swift in Sources */, + 0AF8C4A426A8948A0052FBFF /* ChatMessageReadReceiptsCollection.swift in Sources */, + 0AF8C4A126A8948A0052FBFF /* Enumerations.swift in Sources */, + 0AF8C4B726A8948A0052FBFF /* ChatEvent.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -945,6 +978,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 81ACD2D328DC5DE8F0F90C92 /* Pods-AzureCommunicationChatUnitTests.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; @@ -978,6 +1012,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = FCF18D210ADF02D5CBA71786 /* Pods-AzureCommunicationChatUnitTests.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; @@ -1056,6 +1091,8 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = YES; + ENABLE_TESTING_SEARCH_PATHS = YES; INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -1064,7 +1101,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = "1.0.1"; + MARKETING_VERSION = 1.0.1; NEW_SETTING = ""; PRODUCT_BUNDLE_IDENTIFIER = com.azure.communication.AzureCommunicationChat; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -1089,6 +1126,8 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_TESTABILITY = YES; + ENABLE_TESTING_SEARCH_PATHS = YES; INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; @@ -1097,7 +1136,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = "1.0.1"; + MARKETING_VERSION = 1.0.1; NEW_SETTING = ""; PRODUCT_BUNDLE_IDENTIFIER = com.azure.communication.AzureCommunicationChat; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; @@ -1146,7 +1185,6 @@ ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", diff --git a/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/xcshareddata/xcschemes/AzureCommunicationChat.xcscheme b/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/xcshareddata/xcschemes/AzureCommunicationChat.xcscheme index 29d175955..9d7efa1d6 100644 --- a/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/xcshareddata/xcschemes/AzureCommunicationChat.xcscheme +++ b/sdk/communication/AzureCommunicationChat/AzureCommunicationChat.xcodeproj/xcshareddata/xcschemes/AzureCommunicationChat.xcscheme @@ -34,23 +34,8 @@ isEnabled = "YES"> - - - - - - diff --git a/sdk/communication/AzureCommunicationChat/Package.swift b/sdk/communication/AzureCommunicationChat/Package.swift index 5defef8e2..a9ed37dc7 100644 --- a/sdk/communication/AzureCommunicationChat/Package.swift +++ b/sdk/communication/AzureCommunicationChat/Package.swift @@ -70,6 +70,7 @@ let package = Package( dependencies: [ "AzureCommunicationCommon", "AzureCommunicationChat", + "AzureTest", .product(name: "OHHTTPStubsSwift", package: "OHHTTPStubs") ], path: "Tests", diff --git a/sdk/communication/AzureCommunicationChat/Source/ChatThreadClient.swift b/sdk/communication/AzureCommunicationChat/Source/ChatThreadClient.swift index d611beb10..dd684ab2c 100644 --- a/sdk/communication/AzureCommunicationChat/Source/ChatThreadClient.swift +++ b/sdk/communication/AzureCommunicationChat/Source/ChatThreadClient.swift @@ -418,7 +418,10 @@ public class ChatThreadClient { do { participantsInternal = try convert(participants: participants) } catch { - completionHandler(.failure(AzureError.client("Failed to convert participants to ChatParticipantInternal")), nil) + completionHandler( + .failure(AzureError.client("Failed to convert participants to ChatParticipantInternal")), + nil + ) return } diff --git a/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/ChatEvent.swift b/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/ChatEvent.swift index e705ae202..bec6c5478 100644 --- a/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/ChatEvent.swift +++ b/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/ChatEvent.swift @@ -41,7 +41,7 @@ public struct SignalingChatParticipant { public let shareHistoryTime: Iso8601Date? // MARK: Initializers - + /// Initialize a SignalingChatParticipant /// - Parameters: /// - id: The identifier of the participant. @@ -57,12 +57,12 @@ public struct SignalingChatParticipant { /// ChatThreadProperties for real-time notification events. public struct SignalingChatThreadProperties { // MARK: Properties - + /// Thread topic. public let topic: String // MARK: Initializers - + /// Initialize a SignalingChatThreadProperties /// - Parameter topic: Thread topic. init(topic: String) { @@ -73,7 +73,7 @@ public struct SignalingChatThreadProperties { /// BaseChatEvent for real-time notifications. public class BaseChatEvent { // MARK: Properties - + /// Chat thread id. public var threadId: String /// Sender identifier. @@ -82,9 +82,9 @@ public class BaseChatEvent { public var senderDisplayName: String? /// Recipient identifier. public var recipient: CommunicationIdentifier? - + // MARK: Initializers - + /// Initialize a BaseChatEvent /// - Parameters: /// - threadId: ChatThread id. @@ -107,14 +107,14 @@ public class BaseChatEvent { /// BaseChatThreadEvent for real-time notifications. public class BaseChatThreadEvent { // MARK: Properties - + /// Chat thread id. public var threadId: String /// Version of the thread. public var version: String // MARK: Initializers - + /// Initialize a BaseChatThreadEvent /// - Parameters: /// - threadId: ChatThread id. @@ -128,7 +128,7 @@ public class BaseChatThreadEvent { /// BaseChatMessageEvent for real-time notifications. public class BaseChatMessageEvent: BaseChatEvent { // MARK: Properties - + /// The id of the message. This id is server generated. public var id: String /// The timestamp when the message arrived at the server. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. @@ -137,9 +137,9 @@ public class BaseChatMessageEvent: BaseChatEvent { public var version: String /// The message type. public var type: ChatMessageType - + // MARK: Initializers - + /// Initialize a BaseChatMessageEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -171,12 +171,12 @@ public class BaseChatMessageEvent: BaseChatEvent { /// ChatMessageReceivedEvent for real-time notifications. public class ChatMessageReceivedEvent: BaseChatMessageEvent { // MARK: Properties - + /// The content of the message. public var message: String - + // MARK: Initializers - + /// Initialize a ChatMessageReceivedEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -211,7 +211,7 @@ public class ChatMessageReceivedEvent: BaseChatMessageEvent { type: type ) } - + /// Initialize a ChatMessageReceivedEvent from a TrouterRequest /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -241,14 +241,14 @@ public class ChatMessageReceivedEvent: BaseChatMessageEvent { /// ChatMessageEditedEvent for real-time notifications. public class ChatMessageEditedEvent: BaseChatMessageEvent { // MARK: Properties - + /// The message content. public var message: String /// The timestamp when the message was edited. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var editedOn: Iso8601Date? - + // MARK: Initializers - + /// Initialize a ChatMessageEditedEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -286,7 +286,7 @@ public class ChatMessageEditedEvent: BaseChatMessageEvent { type: type ) } - + /// Initialize a ChatMessageEditedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -315,12 +315,12 @@ public class ChatMessageEditedEvent: BaseChatMessageEvent { /// ChatMessageDeletedEvent for real-time notifications. public class ChatMessageDeletedEvent: BaseChatMessageEvent { // MARK: Properties - + /// The timestamp when the message was deleted. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var deletedOn: Iso8601Date? - + // MARK: Initializers - + /// Initialize a ChatMessageDeletedEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -355,7 +355,7 @@ public class ChatMessageDeletedEvent: BaseChatMessageEvent { type: type ) } - + /// Initialize a ChatMessageDeletedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -383,15 +383,15 @@ public class ChatMessageDeletedEvent: BaseChatMessageEvent { /// TypingIndicatorReceivedEvent for real-time notifications. public class TypingIndicatorReceivedEvent: BaseChatEvent { // MARK: Properties - - /// TODO + + // TODO: public var version: String - + /// The timestamp when the indicator was received. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var receivedOn: Iso8601Date? - + // MARK: Initializers - + /// Initialize a TypingIndicatorReceivedEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -410,7 +410,7 @@ public class TypingIndicatorReceivedEvent: BaseChatEvent { self.receivedOn = receivedOn super.init(threadId: threadId, sender: sender, recipient: recipient) } - + /// Initialize a TypingIndicatorReceivedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -435,14 +435,14 @@ public class TypingIndicatorReceivedEvent: BaseChatEvent { /// ReadReceiptReceivedEvent for real-time notifications. public class ReadReceiptReceivedEvent: BaseChatEvent { // MARK: Properties - + /// Id of the chat message that has been read. This id is generated by the server. public var chatMessageId: String /// The time at which the message was read. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var readOn: Iso8601Date? - + // MARK: Initializers - + /// Initialize a ReadReceiptReceivedEvent. /// - Parameters: /// - threadId: Chat thread id, @@ -461,7 +461,7 @@ public class ReadReceiptReceivedEvent: BaseChatEvent { self.readOn = readOn super.init(threadId: threadId, sender: sender, recipient: recipient) } - + /// Initialize a ReadReceiptReceivedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -495,21 +495,21 @@ public class ReadReceiptReceivedEvent: BaseChatEvent { /// ChatThreadCreatedEvent for real-time notifications. public class ChatThreadCreatedEvent: BaseChatThreadEvent { // MARK: Properties - + /// The timestamp when the thread was created. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var createdOn: Iso8601Date? - + /// ChatThread properties, contains the thread topic. public var properties: SignalingChatThreadProperties? - + /// List of participants currently in the thread. public var participants: [SignalingChatParticipant]? - + /// The participant that created the thread. public var createdBy: SignalingChatParticipant? - + // MARK: Initializers - + /// Initialize a ChatThreadCreatedEvent. /// - Parameters: /// - threadId: Chat thread id, @@ -532,7 +532,7 @@ public class ChatThreadCreatedEvent: BaseChatThreadEvent { self.createdBy = createdBy super.init(threadId: threadId, version: version) } - + /// Initialize a ChatThreadCreatedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -591,16 +591,16 @@ public class ChatThreadCreatedEvent: BaseChatThreadEvent { /// ChatThreadPropertiesUpdatedEvent for real-time notifications. public class ChatThreadPropertiesUpdatedEvent: BaseChatThreadEvent { // MARK: Properties - + /// The chat thread properties, includes the thread topic. public var properties: SignalingChatThreadProperties? /// The timestamp when the thread was updated. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var updatedOn: Iso8601Date? /// The participant that updated the thread. public var updatedBy: SignalingChatParticipant? - + // MARK: Initializers - + /// Initialize a ChatThreadPropertiesUpdatedEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -620,7 +620,7 @@ public class ChatThreadPropertiesUpdatedEvent: BaseChatThreadEvent { self.updatedBy = updatedBy super.init(threadId: threadId, version: version) } - + /// Initialize a ChatThreadPropertiesUpdatedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -664,14 +664,14 @@ public class ChatThreadPropertiesUpdatedEvent: BaseChatThreadEvent { /// ChatThreadDeletedEvent for real-time notifications. public class ChatThreadDeletedEvent: BaseChatThreadEvent { // MARK: Properties - + /// The timestamp when the thread was deleted. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var deletedOn: Iso8601Date? /// The participant that deleted the chat thread. public var deletedBy: SignalingChatParticipant? - + // MARK: Initializers - + /// Initialize a ChatThreadDeletedEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -688,7 +688,7 @@ public class ChatThreadDeletedEvent: BaseChatThreadEvent { self.deletedBy = deletedBy super.init(threadId: threadId, version: version) } - + /// Initialize a ChatThreadDeletedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -722,16 +722,16 @@ public class ChatThreadDeletedEvent: BaseChatThreadEvent { /// ParticipantsAddedEvent for real-time notifications. public class ParticipantsAddedEvent: BaseChatThreadEvent { // MARK: Properties - + /// The timestamp when the participant(s) were added. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var addedOn: Iso8601Date? /// The participants that were added. public var participantsAdded: [SignalingChatParticipant]? /// The participant that added the new participant(s). public var addedBy: SignalingChatParticipant? - + // MARK: Initializers - + /// Initialize a ParticipantsAddedEvent. /// - Parameters: /// - threadId: Chat thread id. @@ -751,7 +751,7 @@ public class ParticipantsAddedEvent: BaseChatThreadEvent { self.addedBy = addedBy super.init(threadId: threadId, version: version) } - + /// Initialize a ParticipantsAddedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { @@ -805,16 +805,16 @@ public class ParticipantsAddedEvent: BaseChatThreadEvent { /// ParticipantsRemovedEvent for real-time notifications. public class ParticipantsRemovedEvent: BaseChatThreadEvent { // MARK: Properties - + /// The timestamp when the participant(s) were removed. The timestamp is in RFC3339 format: `yyyy-MM-ddTHH:mm:ssZ`. public var removedOn: Iso8601Date? - /// TODO: Should this be singular? + // TODO: Should this be singular? public var participantsRemoved: [SignalingChatParticipant]? /// The participant that initiated the removal. public var removedBy: SignalingChatParticipant? - + // MARK: Initializers - + /// Initialize a ParticipantsRemovedEvent /// - Parameters: /// - threadId: Chat thread id. @@ -834,7 +834,7 @@ public class ParticipantsRemovedEvent: BaseChatThreadEvent { self.removedBy = removedBy super.init(threadId: threadId, version: version) } - + /// Initialize a ParticipantsRemovedEvent from a TrouterRequest. /// - Parameter request: The TrouterRequest. init(from request: TrouterRequest) throws { diff --git a/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEvent.swift b/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEvent.swift index 4a3acbbc2..0e35a44c0 100644 --- a/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEvent.swift +++ b/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEvent.swift @@ -42,7 +42,7 @@ public enum TrouterEvent { case chatThreadDeleted(ChatThreadDeletedEvent) case participantsAdded(ParticipantsAddedEvent) case participantsRemoved(ParticipantsRemovedEvent) - + /// Initialize a TrouterEvent given the ChatEventId and the TrouterRequest that contains the event data. /// - Parameters: /// - chatEventId: The ChatEventId. diff --git a/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEventUtil.swift b/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEventUtil.swift index a1e620c4c..ccc84f91e 100644 --- a/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEventUtil.swift +++ b/sdk/communication/AzureCommunicationChat/Source/Signaling/Events/TrouterEventUtil.swift @@ -90,7 +90,7 @@ internal enum TrouterEventUtil { return UnknownIdentifier(id) } } - + /// Convert an Int to an ISO 8601 Date. /// - Parameter unixTime: The date time. /// - Returns: The ISO 8601 formatted timestamp. @@ -107,7 +107,10 @@ internal enum TrouterEventUtil { /// - chatEventId: The ChatEventId, determines the type of ChatEvent that should be created. /// - request: The request payload. /// - Returns: A TrouterEvent. - internal static func create(chatEvent chatEventId: ChatEventId, from request: TrouterRequest) throws -> TrouterEvent { + internal static func create( + chatEvent chatEventId: ChatEventId, + from request: TrouterRequest + ) throws -> TrouterEvent { return try TrouterEvent(chatEventId: chatEventId, from: request) } } diff --git a/sdk/communication/AzureCommunicationChat/Tests/ChatClientDVRTests.swift b/sdk/communication/AzureCommunicationChat/Tests/ChatClientDVRTests.swift new file mode 100644 index 000000000..2b370f251 --- /dev/null +++ b/sdk/communication/AzureCommunicationChat/Tests/ChatClientDVRTests.swift @@ -0,0 +1,103 @@ +// -------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The MIT License (MIT) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the ""Software""), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// -------------------------------------------------------------------------- + +import AzureCommunicationChat +import AzureCommunicationCommon +import AzureCore +import AzureTest +import DVR +import XCTest + +class ChatClientDVRTests: RecordableXCTestCase { + /// ChatClient initialized in setup. + private var chatClient: ChatClient! + + override func setUpTestWithError() throws { + let endpoint = settings?.endpoint ?? "https://endpoint" + let token = settings?.token ?? generateFakeToken() + let credential = try CommunicationTokenCredential(token: token) + let options = AzureCommunicationChatClientOptions(transportOptions: transportOptions) + chatClient = try ChatClient(endpoint: endpoint, credential: credential, withOptions: options) + } + + func test_CreateThread_WithoutParticipants() { + let thread = CreateChatThreadRequest( + topic: "Test topic" + ) + + let expectation = self.expectation(description: "Create thread") + + chatClient.create(thread: thread) { result, httpResponse in + switch result { + case let .success(response): + let chatThread = response.chatThread + XCTAssertNotNil(response.chatThread) + XCTAssertEqual(chatThread?.topic, thread.topic) + XCTAssertNotNil(httpResponse?.httpRequest?.headers["repeatability-request-id"]) + XCTAssertNil(response.invalidParticipants) + case let .failure(error): + XCTFail("Create thread failed with error: \(error)") + } + expectation.fulfill() + } + + waitForExpectations(timeout: 10.0) { error in + if let error = error { + XCTFail("Create thread timed out: \(error)") + } + } + } + + func test_ListThreads_ReturnsChatThreadItems() { + let expectation = self.expectation(description: "List threads") + let thread = CreateChatThreadRequest( + topic: "Test list threads" + ) + + // Create a thread + chatClient.create(thread: thread) { _, _ in + // List threads + self.chatClient.listThreads { result, _ in + switch result { + case let .success(listThreadsResult): + let threads = listThreadsResult.items + XCTAssertTrue(threads!.count > 0) + + case let .failure(error): + XCTFail("List threads failed: \(error)") + } + + expectation.fulfill() + } + } + + waitForExpectations(timeout: 10.0) { error in + if let error = error { + XCTFail("List threads timed out: \(error)") + } + } + } +} diff --git a/sdk/communication/AzureCommunicationChat/Tests/ChatClientTests.swift b/sdk/communication/AzureCommunicationChat/Tests/ChatClientTests.swift index b93654cfd..485cd3809 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/ChatClientTests.swift +++ b/sdk/communication/AzureCommunicationChat/Tests/ChatClientTests.swift @@ -27,16 +27,19 @@ import AzureCommunicationChat import AzureCommunicationCommon import AzureCore +import AzureTest import XCTest class ChatClientTests: XCTestCase { /// ChatClient initialized in setup. private var chatClient: ChatClient! /// Test mode. - private var mode = getEnvironmentVariable(withKey: "TEST_MODE", default: "playback") + private var mode = environmentVariable(forKey: "TEST_MODE", default: "playback") + + private var settings = TestSettings.loadFromPlist() override class func setUp() { - let mode = getEnvironmentVariable(withKey: "TEST_MODE", default: "playback") + let mode = environmentVariable(forKey: "TEST_MODE", default: "playback") if mode == "playback" { // Register stubs for playback mode Recorder.registerStubs() @@ -44,8 +47,8 @@ class ChatClientTests: XCTestCase { } override func setUpWithError() throws { - let endpoint = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_ENDPOINT", default: "https://endpoint") - let token = generateToken() + let endpoint = settings?.endpoint ?? "https://endpoint" + let token = settings?.token ?? generateFakeToken() let credential = try CommunicationTokenCredential(token: token) let options = AzureCommunicationChatClientOptions() @@ -87,7 +90,7 @@ class ChatClientTests: XCTestCase { } func test_CreateThread_WithParticipants() { - let userId = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_USER_ID_2", default: "id2") + let userId = settings?.user2 ?? "id2" let thread = CreateChatThreadRequest( topic: "Test topic", participants: [ diff --git a/sdk/communication/AzureCommunicationChat/Tests/ChatClientUnitTests.swift b/sdk/communication/AzureCommunicationChat/Tests/ChatClientUnitTests.swift index 58137344a..c463d384a 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/ChatClientUnitTests.swift +++ b/sdk/communication/AzureCommunicationChat/Tests/ChatClientUnitTests.swift @@ -27,6 +27,7 @@ import AzureCommunicationChat import AzureCommunicationCommon import AzureCore +import AzureTest import OHHTTPStubs.Swift import XCTest @@ -38,8 +39,9 @@ class ChatClientUnitTests: XCTestCase { private let topic = "test topic" override func setUpWithError() throws { - let endpoint = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_ENDPOINT", default: "https://endpoint") - let token = generateToken() + let settings = TestSettings.loadFromPlist() + let endpoint = settings?.endpoint ?? "https://endpoint" + let token = settings?.endpoint ?? generateFakeToken() let credential = try CommunicationTokenCredential(token: token) let options = AzureCommunicationChatClientOptions() diff --git a/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientTests.swift b/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientTests.swift index d48c7844d..ed9180976 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientTests.swift +++ b/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientTests.swift @@ -27,6 +27,7 @@ import AzureCommunicationChat import AzureCommunicationCommon import AzureCore +import AzureTest import XCTest // swiftlint:disable type_body_length @@ -38,10 +39,12 @@ class ChatThreadClientTests: XCTestCase { /// ChatThreadClient initialized in setup. private var chatThreadClient: ChatThreadClient! /// Test mode. - private var mode = getEnvironmentVariable(withKey: "TEST_MODE", default: "playback") + private var mode = environmentVariable(forKey: "TEST_MODE", default: "playback") + + private let settings = TestSettings.loadFromPlist() override class func setUp() { - let mode = getEnvironmentVariable(withKey: "TEST_MODE", default: "playback") + let mode = environmentVariable(forKey: "TEST_MODE", default: "playback") if mode == "playback" { // Register stubs for playback mode Recorder.registerStubs() @@ -50,8 +53,8 @@ class ChatThreadClientTests: XCTestCase { override func setUpWithError() throws { // Initialize the chatClient - let endpoint = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_ENDPOINT", default: "https://endpoint") - let token = generateToken() + let endpoint = settings?.endpoint ?? "https://endpoint" + let token = settings?.token ?? generateFakeToken() let credential = try CommunicationTokenCredential(token: token) let options = AzureCommunicationChatClientOptions() @@ -513,7 +516,7 @@ class ChatThreadClientTests: XCTestCase { } func test_Participant() { - let user2 = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_USER_ID_2", default: "id2") + let user2 = settings?.user2 ?? "id2" let newParticipant = ChatParticipant( id: CommunicationUserIdentifier(user2), displayName: "User 2", @@ -546,7 +549,7 @@ class ChatThreadClientTests: XCTestCase { } func test_RemoveParticipant() { - let user2 = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_USER_ID_2", default: "id2") + let user2 = settings?.user2 ?? "id2" let removedParticipant = ChatParticipant( id: CommunicationUserIdentifier(user2), displayName: "User 2", @@ -589,7 +592,7 @@ class ChatThreadClientTests: XCTestCase { } func test_ListParticipants_ReturnsParticipants() { - let user2 = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_USER_ID_2", default: "id2") + let user2 = settings?.user2 ?? "id2" let anotherParticipant = ChatParticipant( id: CommunicationUserIdentifier(user2), displayName: "User 2", diff --git a/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientUnitTests.swift b/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientUnitTests.swift index 35ff9853e..5c85a0518 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientUnitTests.swift +++ b/sdk/communication/AzureCommunicationChat/Tests/ChatThreadClientUnitTests.swift @@ -41,9 +41,11 @@ class ChatThreadClientUnitTests: XCTestCase { private let topic = "test topic" private let messageId = "test_message_id" + private let settings = TestSettings.loadFromPlist() + override func setUpWithError() throws { - let endpoint = getEnvironmentVariable(withKey: "AZURE_COMMUNICATION_ENDPOINT", default: "https://endpoint") - let token = generateToken() + let endpoint = settings?.endpoint ?? "https://endpoint" + let token = settings?.token ?? generateFakeToken() let credential = try CommunicationTokenCredential(token: token) let options = AzureCommunicationChatClientOptions() chatClient = try ChatClient(endpoint: endpoint, credential: credential, withOptions: options) diff --git a/sdk/communication/AzureCommunicationChat/Tests/Recordings/test_CreateThread_WithoutParticipants.json b/sdk/communication/AzureCommunicationChat/Tests/Recordings/test_CreateThread_WithoutParticipants.json new file mode 100644 index 000000000..fcd33105c --- /dev/null +++ b/sdk/communication/AzureCommunicationChat/Tests/Recordings/test_CreateThread_WithoutParticipants.json @@ -0,0 +1,50 @@ +{ + "name" : "test_CreateThread_WithoutParticipants", + "interactions" : [ + { + "response" : { + "url" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads?api-version=2021-03-07", + "status" : 201, + "body" : { + "chatThread" : { + "id" : "19:D7MnexkF_gYg_ZGChK4WrOc2e8W6-cdmITRKL98hqvc1@thread.v2", + "createdOn" : "2021-07-27T17:49:01Z", + "topic" : "Test topic", + "createdByCommunicationIdentifier" : { + "rawId" : "8:acs:a1378887-0817-41e2-bbe5-00e88cde2b95_0000000b-88dc-23a3-54b7-a43a0d0089eb", + "communicationUser" : { + "id" : "8:acs:a1378887-0817-41e2-bbe5-00e88cde2b95_0000000b-88dc-23a3-54b7-a43a0d0089eb" + } + } + } + }, + "headers" : { + "x-azure-ref" : "0DUcAYQAAAABvlBAOwukiQqytqVSzbSyqV1NURURHRTA4MTIAOWZjN2I1MTktYThjYy00Zjg5LTkzNWUtYzkxNDhhZTA5ZTgx", + "Location" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads\/19%3AD7MnexkF_gYg_ZGChK4WrOc2e8W6-cdmITRKL98hqvc1@thread.v2", + "Strict-Transport-Security" : "max-age=2592000", + "api-supported-versions" : "2020-09-21-preview2, 2020-11-01-preview3, 2021-01-27-preview4, 2021-03-01-preview5, 2021-03-07, 2021-04-05-preview6", + "x-processing-time" : "694ms", + "Content-Type" : "application\/json; charset=utf-8", + "Date" : "Tue, 27 Jul 2021 17:49:01 GMT", + "x-cache" : "CONFIG_NOCACHE", + "ms-cv" : "Aswkf5bFeEawmHyh2XSdzA.0" + } + }, + "request" : { + "headers" : { + "Date" : "Tue, 27 Jul 2021 17:49:00 GMT", + "Content-Type" : "application\/json", + "Accept" : "application\/json", + "repeatability-request-id" : "8FAED159-D56E-4E03-9CCB-13E81F3F7F16", + "User-Agent" : "azsdk-ios-AzureCommunicationChat\/1.0.1 (MacBookPro17,1 - 20.5.0; en_US)" + }, + "method" : "POST", + "body" : { + "topic" : "Test topic" + }, + "url" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads?" + }, + "recorded_at" : 1627408142.3476319 + } + ] +} diff --git a/sdk/communication/AzureCommunicationChat/Tests/Recordings/test_ListThreads_ReturnsChatThreadItems.json b/sdk/communication/AzureCommunicationChat/Tests/Recordings/test_ListThreads_ReturnsChatThreadItems.json new file mode 100644 index 000000000..cf1a346e6 --- /dev/null +++ b/sdk/communication/AzureCommunicationChat/Tests/Recordings/test_ListThreads_ReturnsChatThreadItems.json @@ -0,0 +1,90 @@ +{ + "interactions" : [ + { + "response" : { + "headers" : { + "x-cache" : "CONFIG_NOCACHE", + "ms-cv" : "A6UOAQ+cQkeJrKOd0b8OWQ.0", + "x-azure-ref" : "0DkcAYQAAAADld4hGauyjQ7YwtjbQCHqEV1NURURHRTA4MTIAOWZjN2I1MTktYThjYy00Zjg5LTkzNWUtYzkxNDhhZTA5ZTgx", + "Strict-Transport-Security" : "max-age=2592000", + "Location" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads\/19%3AHq0Y5IhupxpnYgC94SZu8Sfur9E_4uT79N5Q1mXn2Pc1@thread.v2", + "Content-Type" : "application\/json; charset=utf-8", + "x-processing-time" : "452ms", + "api-supported-versions" : "2020-09-21-preview2, 2020-11-01-preview3, 2021-01-27-preview4, 2021-03-01-preview5, 2021-03-07, 2021-04-05-preview6", + "Date" : "Tue, 27 Jul 2021 17:49:01 GMT" + }, + "status" : 201, + "body" : { + "chatThread" : { + "id" : "19:Hq0Y5IhupxpnYgC94SZu8Sfur9E_4uT79N5Q1mXn2Pc1@thread.v2", + "createdOn" : "2021-07-27T17:49:02Z", + "topic" : "Test list threads", + "createdByCommunicationIdentifier" : { + "rawId" : "8:acs:a1378887-0817-41e2-bbe5-00e88cde2b95_0000000b-88dc-23a3-54b7-a43a0d0089eb", + "communicationUser" : { + "id" : "8:acs:a1378887-0817-41e2-bbe5-00e88cde2b95_0000000b-88dc-23a3-54b7-a43a0d0089eb" + } + } + } + }, + "url" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads?api-version=2021-03-07" + }, + "recorded_at" : 1627408142.9120879, + "request" : { + "headers" : { + "Date" : "Tue, 27 Jul 2021 17:49:02 GMT", + "Content-Type" : "application\/json", + "Accept" : "application\/json", + "repeatability-request-id" : "33E231B9-06AA-44B9-9A33-4941ADC9A72D", + "User-Agent" : "azsdk-ios-AzureCommunicationChat\/1.0.1 (MacBookPro17,1 - 20.5.0; en_US)" + }, + "method" : "POST", + "url" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads?", + "body" : { + "topic" : "Test list threads" + } + } + }, + { + "recorded_at" : 1627408143.5284441, + "request" : { + "url" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads?", + "method" : "GET", + "headers" : { + "User-Agent" : "azsdk-ios-AzureCommunicationChat\/1.0.1 (MacBookPro17,1 - 20.5.0; en_US)", + "Accept" : "application\/json", + "Date" : "Tue, 27 Jul 2021 17:49:02 GMT" + } + }, + "response" : { + "body" : { + "value" : [ + { + "id" : "19:Hq0Y5IhupxpnYgC94SZu8Sfur9E_4uT79N5Q1mXn2Pc1@thread.v2", + "topic" : "Test list threads", + "lastMessageReceivedOn" : "2021-07-27T17:49:02Z" + }, + { + "id" : "19:D7MnexkF_gYg_ZGChK4WrOc2e8W6-cdmITRKL98hqvc1@thread.v2", + "topic" : "Test topic", + "lastMessageReceivedOn" : "2021-07-27T17:49:02Z" + } + ] + }, + "headers" : { + "Strict-Transport-Security" : "max-age=2592000", + "x-azure-ref" : "0DkcAYQAAAABJLicotwRmQ5NfBat7lMLfV1NURURHRTA4MTIAOWZjN2I1MTktYThjYy00Zjg5LTkzNWUtYzkxNDhhZTA5ZTgx", + "api-supported-versions" : "2020-09-21-preview2, 2020-11-01-preview3, 2021-01-27-preview4, 2021-03-01-preview5, 2021-03-07, 2021-04-05-preview6", + "x-cache" : "CONFIG_NOCACHE", + "x-processing-time" : "103ms", + "ms-cv" : "yxibK0+Sq0KNol4QRc1\/\/A.0", + "Content-Type" : "application\/json; charset=utf-8", + "Date" : "Tue, 27 Jul 2021 17:49:02 GMT" + }, + "url" : "https:\/\/acs-pqi6zjd34tl36.communication.azure.com\/chat\/threads?api-version=2021-03-07", + "status" : 200 + } + } + ], + "name" : "test_ListThreads_ReturnsChatThreadItems" +} diff --git a/sdk/communication/AzureCommunicationChat/Tests/TestSettings.swift b/sdk/communication/AzureCommunicationChat/Tests/TestSettings.swift new file mode 100644 index 000000000..f0af6acee --- /dev/null +++ b/sdk/communication/AzureCommunicationChat/Tests/TestSettings.swift @@ -0,0 +1,35 @@ +// -------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The MIT License (MIT) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the ""Software""), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// -------------------------------------------------------------------------- + +import AzureTest +import Foundation + +class TestSettings: TestSettingsProtocol { + var endpoint: String? + var user1: String? + var user2: String? + var token: String? +} diff --git a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/createThread.json b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/createThread.json index 0520430cd..4f929aa92 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/createThread.json +++ b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/createThread.json @@ -1 +1 @@ -{"chatThread":{"id":"sanitized","topic":"Test topic","createdOn":"2021-03-24T17:15:23Z","createdByCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}}} +{"chatThread":{"id":"sanitized","topic":"Test topic","createdOn":"2021-07-27T17:49:35Z","createdByCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}}} \ No newline at end of file diff --git a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/getThread.json b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/getThread.json index d68732f36..36d9fb7af 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/getThread.json +++ b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/getThread.json @@ -1 +1 @@ -{"id":"sanitized","topic":"Test topic","createdOn":"2021-03-24T17:15:03Z","createdByCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}} +{"id":"sanitized","topic":"Test topic","createdOn":"2021-07-27T17:49:11Z","createdByCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}} \ No newline at end of file diff --git a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listMessages.json b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listMessages.json index 066408c8d..44726d584 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listMessages.json +++ b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listMessages.json @@ -1 +1 @@ -{"value":[{"id":"sanitized","type":"html","sequenceId":"4","version":"1616606107950","content":{"message":"
Test html message
"},"senderDisplayName":"","createdOn":"2021-03-24T17:15:07Z","senderCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},{"id":"sanitized","type":"text","sequenceId":"3","version":"1616606107684","content":{"message":"Test text message"},"senderDisplayName":"","createdOn":"2021-03-24T17:15:07Z","senderCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},{"id":"sanitized","type":"topicUpdated","sequenceId":"2","version":"1616606107083","content":{"topic":"Test list messages","initiatorCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},"createdOn":"2021-03-24T17:15:07Z"},{"id":"sanitized","type":"participantAdded","sequenceId":"1","version":"1616606106993","content":{"participants":[{"communicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}},"shareHistoryTime":"1970-01-01T00:00:00Z"}],"initiatorCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},"createdOn":"2021-03-24T17:15:06Z"}]} +{"value":[{"id":"sanitized","type":"html","sequenceId":"4","version":"1627408158421","content":{"message":"
Test html message
"},"senderDisplayName":"","createdOn":"2021-07-27T17:49:18Z","senderCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},{"id":"sanitized","type":"text","sequenceId":"3","version":"1627408157774","content":{"message":"Test text message"},"senderDisplayName":"","createdOn":"2021-07-27T17:49:17Z","senderCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},{"id":"sanitized","type":"topicUpdated","sequenceId":"2","version":"1627408157359","content":{"topic":"Test list messages","initiatorCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},"createdOn":"2021-07-27T17:49:17Z"},{"id":"sanitized","type":"participantAdded","sequenceId":"1","version":"1627408157334","content":{"participants":[{"communicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}},"shareHistoryTime":"1970-01-01T00:00:00Z"}],"initiatorCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}}},"createdOn":"2021-07-27T17:49:17Z"}]} \ No newline at end of file diff --git a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listReadReceipts.json b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listReadReceipts.json index 1541e9d93..34cd2f650 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listReadReceipts.json +++ b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listReadReceipts.json @@ -1 +1 @@ -{"value":[{"senderCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}},"chatMessageId":"sanitized","readOn":"2021-03-24T17:15:10Z"}]} +{"value":[{"senderCommunicationIdentifier":{"rawId":"sanitized","communicationUser":{"id":"sanitized"}},"chatMessageId":"sanitized","readOn":"2021-07-27T17:49:22Z"}]} \ No newline at end of file diff --git a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listThreads.json b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listThreads.json index 415610825..a20f3c8a6 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listThreads.json +++ b/sdk/communication/AzureCommunicationChat/Tests/Util/Recordings/listThreads.json @@ -1 +1 @@ -{"value":[{"id":"sanitized","topic":"Test list threads","lastMessageReceivedOn":"2021-03-24T17:15:00Z"},{"id":"sanitized","topic":"Test topic","deletedOn":"2021-03-24T17:14:59Z","lastMessageReceivedOn":"2021-03-24T17:14:59Z"},{"id":"sanitized","topic":"Test topic","lastMessageReceivedOn":"2021-03-24T17:14:59Z"},{"id":"sanitized","topic":"Test topic","lastMessageReceivedOn":"2021-03-24T17:14:58Z"},{"id":"sanitized","topic":"Test topic","lastMessageReceivedOn":"2021-03-24T17:14:57Z"}]} +{"value":[{"id":"sanitized","topic":"Test list threads"},{"id":"sanitized","topic":"Test topic","lastMessageReceivedOn":"2021-07-27T17:49:07Z"},{"id":"sanitized","topic":"Test topic","deletedOn":"2021-07-27T17:49:07Z","lastMessageReceivedOn":"2021-07-27T17:49:07Z"},{"id":"sanitized","topic":"Test topic","lastMessageReceivedOn":"2021-07-27T17:49:06Z"},{"id":"sanitized","topic":"Test topic","lastMessageReceivedOn":"2021-07-27T17:49:05Z"},{"id":"sanitized","topic":"Test list threads","lastMessageReceivedOn":"2021-07-27T17:49:02Z"},{"id":"sanitized","topic":"Test topic","lastMessageReceivedOn":"2021-07-27T17:49:02Z"}]} \ No newline at end of file diff --git a/sdk/communication/AzureCommunicationChat/Tests/Util/Util.swift b/sdk/communication/AzureCommunicationChat/Tests/Util/Util.swift index 89304bd30..3d7b413c3 100644 --- a/sdk/communication/AzureCommunicationChat/Tests/Util/Util.swift +++ b/sdk/communication/AzureCommunicationChat/Tests/Util/Util.swift @@ -203,22 +203,10 @@ enum Recording: String, CaseIterable { case listReadReceipts } -/// Returns a value from an environment variable or a default. Empty string is treated the same as nil. -func getEnvironmentVariable(withKey key: String, default defVal: String) -> String { - var value = ProcessInfo.processInfo.environment[key] - if value == "" || value == nil { - value = defVal - } - return value! -} - /// Returns the token from an environment variable or fake value. -func generateToken() -> String { - var token = ProcessInfo.processInfo.environment["AZURE_COMMUNICATION_TOKEN"] - if token == "" || token == nil { - let fakeValue = "{\"iss\":\"ACS\",\"iat\": 1608152725,\"exp\": 1739688725,\"aud\": \"\",\"sub\": \"\"}" - .base64EncodedString() - token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." + fakeValue + ".EMS0ExXqRuobm34WKJE8mAfZ7KppU5kEHl0OFdyree8" - } - return token! +func generateFakeToken() -> String { + let fakeValue = "{\"iss\":\"ACS\",\"iat\": 1608152725,\"exp\": 1739688725,\"aud\": \"\",\"sub\": \"\"}" + .base64EncodedString() + let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." + fakeValue + ".EMS0ExXqRuobm34WKJE8mAfZ7KppU5kEHl0OFdyree8" + return token } diff --git a/sdk/communication/test-resources-post.ps1 b/sdk/communication/test-resources-post.ps1 new file mode 100644 index 000000000..f44702f9f --- /dev/null +++ b/sdk/communication/test-resources-post.ps1 @@ -0,0 +1,9 @@ +#!/usr/bin/env pwsh + +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +$acsConnString = $DeploymentOutputs['azure_communication_cs'] + +pip3 install azure.communication.administration --user +python3 eng/scripts/prepare_chat_tests.py $acsConnString diff --git a/sdk/communication/test-resources.bicep b/sdk/communication/test-resources.bicep new file mode 100644 index 000000000..5414b56a9 --- /dev/null +++ b/sdk/communication/test-resources.bicep @@ -0,0 +1,13 @@ +param acsName string = 'acs-${uniqueString(resourceGroup().id)}' +param location string = 'Global' +param dataLocation string = 'United States' + +resource acs 'Microsoft.Communication/communicationServices@2020-08-20' = { + name: acsName + location: location + properties: { + dataLocation: dataLocation + } +} + +output azure_communication_cs string = listKeys(acsName, '2020-08-20').primaryConnectionString diff --git a/sdk/core/AzureCore/Source/Pipeline/PipelineResponse.swift b/sdk/core/AzureCore/Source/Pipeline/PipelineResponse.swift index 03faa94e0..b51c2acec 100644 --- a/sdk/core/AzureCore/Source/Pipeline/PipelineResponse.swift +++ b/sdk/core/AzureCore/Source/Pipeline/PipelineResponse.swift @@ -37,11 +37,11 @@ public final class PipelineResponse: Copyable, PipelineContextSupporting { // MARK: Initializers - convenience init(request: HTTPRequest, response: HTTPResponse, logger: ClientLogger) { + public convenience init(request: HTTPRequest, response: HTTPResponse, logger: ClientLogger) { self.init(request: request, response: response, logger: logger, context: nil) } - init(request: HTTPRequest, response: HTTPResponse?, logger: ClientLogger, context: PipelineContext?) { + public init(request: HTTPRequest, response: HTTPResponse?, logger: ClientLogger, context: PipelineContext?) { self.httpRequest = request self.httpResponse = response self.logger = logger diff --git a/sdk/template/AzureTemplate/AzureTemplate.xcodeproj/project.pbxproj b/sdk/template/AzureTemplate/AzureTemplate.xcodeproj/project.pbxproj index 435f61bcb..45205dcc2 100644 --- a/sdk/template/AzureTemplate/AzureTemplate.xcodeproj/project.pbxproj +++ b/sdk/template/AzureTemplate/AzureTemplate.xcodeproj/project.pbxproj @@ -8,33 +8,18 @@ /* Begin PBXBuildFile section */ 484989A4FFC276765F44332C /* Pods_AzureTemplate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB86CA07730585EB71E6DAAB /* Pods_AzureTemplate.framework */; }; - 51AE71F813F4FD05E356901F /* Pods_AzureTemplateTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6CAE391786B5810053CD6AC /* Pods_AzureTemplateTests.framework */; }; OBJ_148 /* Dummy.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_8 /* Dummy.swift */; }; - OBJ_168 /* AzureTemplateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_10 /* AzureTemplateTests.swift */; }; - OBJ_170 /* AzureTemplate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "AzureTemplate::AzureTemplate::Product" /* AzureTemplate.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 0A8BA042264D9C31009C24B0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = OBJ_1 /* Project object */; - proxyType = 1; - remoteGlobalIDString = "AzureTemplate::AzureTemplate"; - remoteInfo = AzureTemplate; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXFileReference section */ 0AFBCA01264D9E43000068AC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 71345128887FD96FD181BD43 /* Pods-AzureTemplateTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTemplateTests.debug.xcconfig"; path = "Target Support Files/Pods-AzureTemplateTests/Pods-AzureTemplateTests.debug.xcconfig"; sourceTree = ""; }; 8027F54D3C8788C2E4FD3E77 /* Pods-AzureTemplateTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTemplateTests.release.xcconfig"; path = "Target Support Files/Pods-AzureTemplateTests/Pods-AzureTemplateTests.release.xcconfig"; sourceTree = ""; }; 82BF435984ABC2B788F58A71 /* Pods-AzureTemplate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTemplate.debug.xcconfig"; path = "Target Support Files/Pods-AzureTemplate/Pods-AzureTemplate.debug.xcconfig"; sourceTree = ""; }; "AzureTemplate::AzureTemplate::Product" /* AzureTemplate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureTemplate.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - "AzureTemplate::AzureTemplateTests::Product" /* AzureTemplateTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; path = AzureTemplateTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; D4B8CCFB68C753349CEBA4B0 /* Pods-AzureTemplate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTemplate.release.xcconfig"; path = "Target Support Files/Pods-AzureTemplate/Pods-AzureTemplate.release.xcconfig"; sourceTree = ""; }; D6CAE391786B5810053CD6AC /* Pods_AzureTemplateTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureTemplateTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EB86CA07730585EB71E6DAAB /* Pods_AzureTemplate.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureTemplate.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - OBJ_10 /* AzureTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzureTemplateTests.swift; sourceTree = ""; }; OBJ_13 /* Package.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; name = Package.swift; path = "/Users/travisprescott/repos/azure-sdk-for-ios/sdk/template/AzureTemplate/.build/checkouts/SwiftPM-AzureCore/Package.swift"; sourceTree = ""; }; OBJ_14 /* AzureTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzureTask.swift; sourceTree = ""; }; OBJ_15 /* ClientLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientLogger.swift; sourceTree = ""; }; @@ -104,15 +89,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - OBJ_169 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 0; - files = ( - OBJ_170 /* AzureTemplate.framework in Frameworks */, - 51AE71F813F4FD05E356901F /* Pods_AzureTemplateTests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -237,7 +213,6 @@ children = ( OBJ_6 /* Package.swift */, OBJ_7 /* Source */, - OBJ_9 /* Tests */, OBJ_11 /* Dependencies */, OBJ_72 /* Products */, OBJ_76 /* AzureTemplate.podspec.json */, @@ -291,19 +266,10 @@ isa = PBXGroup; children = ( "AzureTemplate::AzureTemplate::Product" /* AzureTemplate.framework */, - "AzureTemplate::AzureTemplateTests::Product" /* AzureTemplateTests.xctest */, ); name = Products; sourceTree = BUILT_PRODUCTS_DIR; }; - OBJ_9 /* Tests */ = { - isa = PBXGroup; - children = ( - OBJ_10 /* AzureTemplateTests.swift */, - ); - path = Tests; - sourceTree = SOURCE_ROOT; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -324,24 +290,6 @@ productReference = "AzureTemplate::AzureTemplate::Product" /* AzureTemplate.framework */; productType = "com.apple.product-type.framework"; }; - "AzureTemplate::AzureTemplateTests" /* AzureTemplateTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = OBJ_164 /* Build configuration list for PBXNativeTarget "AzureTemplateTests" */; - buildPhases = ( - DB7D859F486601093F4C6838 /* [CP] Check Pods Manifest.lock */, - OBJ_167 /* Sources */, - OBJ_169 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - OBJ_172 /* PBXTargetDependency */, - ); - name = AzureTemplateTests; - productName = AzureTemplateTests; - productReference = "AzureTemplate::AzureTemplateTests::Product" /* AzureTemplateTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -364,7 +312,6 @@ projectRoot = ""; targets = ( "AzureTemplate::AzureTemplate" /* AzureTemplate */, - "AzureTemplate::AzureTemplateTests" /* AzureTemplateTests */, ); }; /* End PBXProject section */ @@ -392,28 +339,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - DB7D859F486601093F4C6838 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-AzureTemplateTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -425,24 +350,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - OBJ_167 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 0; - files = ( - OBJ_168 /* AzureTemplateTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - OBJ_172 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = "AzureTemplate::AzureTemplate" /* AzureTemplate */; - targetProxy = 0A8BA042264D9C31009C24B0 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ OBJ_145 /* Debug */ = { isa = XCBuildConfiguration; @@ -506,60 +415,6 @@ }; name = Release; }; - OBJ_165 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 71345128887FD96FD181BD43 /* Pods-AzureTemplateTests.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.15; - OTHER_CFLAGS = "$(inherited)"; - OTHER_LDFLAGS = "$(inherited)"; - OTHER_SWIFT_FLAGS = "$(inherited)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; - SWIFT_VERSION = 5.0; - TARGET_NAME = AzureTemplateTests; - TVOS_DEPLOYMENT_TARGET = 12.0; - WATCHOS_DEPLOYMENT_TARGET = 7.0; - }; - name = Debug; - }; - OBJ_166 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8027F54D3C8788C2E4FD3E77 /* Pods-AzureTemplateTests.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - ); - HEADER_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = "$(SRCROOT)/Source/Supporting Files/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @loader_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.15; - OTHER_CFLAGS = "$(inherited)"; - OTHER_LDFLAGS = "$(inherited)"; - OTHER_SWIFT_FLAGS = "$(inherited)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited)"; - SWIFT_VERSION = 5.0; - TARGET_NAME = AzureTemplateTests; - TVOS_DEPLOYMENT_TARGET = 12.0; - WATCHOS_DEPLOYMENT_TARGET = 7.0; - }; - name = Release; - }; OBJ_3 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -625,15 +480,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - OBJ_164 /* Build configuration list for PBXNativeTarget "AzureTemplateTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - OBJ_165 /* Debug */, - OBJ_166 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; OBJ_2 /* Build configuration list for PBXProject "AzureTemplate" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/sdk/template/AzureTemplate/Package.swift b/sdk/template/AzureTemplate/Package.swift index 40100eb30..1a404982a 100644 --- a/sdk/template/AzureTemplate/Package.swift +++ b/sdk/template/AzureTemplate/Package.swift @@ -38,7 +38,7 @@ let package = Package( .library(name: "AzureTemplate", targets: ["AzureTemplate"]) ], dependencies: [ - .package(name: "AzureCore", url: "https://github.com/Azure/SwiftPM-AzureCore.git", from: "1.0.0-beta.12"), + .package(name: "AzureCore", url: "https://github.com/Azure/SwiftPM-AzureCore.git", from: "1.0.0-beta.12") ], targets: [ // Build targets diff --git a/sdk/template/AzureTemplate/Source/Dummy.swift b/sdk/template/AzureTemplate/Source/Dummy.swift index ee0820571..b24b04b36 100644 --- a/sdk/template/AzureTemplate/Source/Dummy.swift +++ b/sdk/template/AzureTemplate/Source/Dummy.swift @@ -27,4 +27,3 @@ import Foundation // Does nothing - diff --git a/sdk/test/.gitignore b/sdk/test/.gitignore new file mode 100644 index 000000000..bb460e7be --- /dev/null +++ b/sdk/test/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +/.build +/Packages +/*.xcodeproj +xcuserdata/ +DerivedData/ +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata diff --git a/sdk/test/AzureTest/AzureTest.xcodeproj/AzureTestTests_Info.plist b/sdk/test/AzureTest/AzureTest.xcodeproj/AzureTestTests_Info.plist new file mode 100644 index 000000000..7c23420d0 --- /dev/null +++ b/sdk/test/AzureTest/AzureTest.xcodeproj/AzureTestTests_Info.plist @@ -0,0 +1,25 @@ + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/sdk/test/AzureTest/AzureTest.xcodeproj/AzureTest_Info.plist b/sdk/test/AzureTest/AzureTest.xcodeproj/AzureTest_Info.plist new file mode 100644 index 000000000..57ada9f9d --- /dev/null +++ b/sdk/test/AzureTest/AzureTest.xcodeproj/AzureTest_Info.plist @@ -0,0 +1,25 @@ + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/sdk/test/AzureTest/AzureTest.xcodeproj/project.pbxproj b/sdk/test/AzureTest/AzureTest.xcodeproj/project.pbxproj new file mode 100644 index 000000000..d9f205730 --- /dev/null +++ b/sdk/test/AzureTest/AzureTest.xcodeproj/project.pbxproj @@ -0,0 +1,673 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0A9229F926B0704400D4B387 /* DVRSessionTransport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9229E026AF288D00D4B387 /* DVRSessionTransport.swift */; }; + 0A9229FA26B0704800D4B387 /* TestSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9229E126AF288D00D4B387 /* TestSettings.swift */; }; + 0A9229FB26B0704B00D4B387 /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9229E226AF288D00D4B387 /* Util.swift */; }; + 0A9229FC26B0704E00D4B387 /* SubscriptionIdFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9229E326AF288D00D4B387 /* SubscriptionIdFilter.swift */; }; + 0A9229FD26B0705000D4B387 /* RecordableXCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A9229E426AF288D00D4B387 /* RecordableXCTestCase.swift */; }; + 0A9229FF26B070B500D4B387 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A9229FE26B070B500D4B387 /* XCTest.framework */; }; + 0A922A0B26B0780400D4B387 /* AzureCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A922A0A26B0780400D4B387 /* AzureCore.framework */; }; + 31CAC0AC268A5D7E0084F817 /* AzureTestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31CAC0AB268A5D7E0084F817 /* AzureTestTests.swift */; }; + 31CAC0B6268A60080084F817 /* TestData.json in Resources */ = {isa = PBXBuildFile; fileRef = 31CAC0B5268A60070084F817 /* TestData.json */; }; + 4B4694B556C92673B62DBD56 /* Pods_AzureTestTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A926CB03D0FC387E9DFF6F62 /* Pods_AzureTestTests.framework */; }; + B706C03719DA5D1E3DCAF13C /* Pods_AzureTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 63223FEC2B266A9E151BF760 /* Pods_AzureTest.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0A9229F026B0702300D4B387 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0A1E75A22673D48100054F60 /* AzureIdentity.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureIdentity.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A2097BB266FDE0200FE2272 /* AzureCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A2097C2266FE16200FE2272 /* AzureIdentity.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureIdentity.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A9229E026AF288D00D4B387 /* DVRSessionTransport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DVRSessionTransport.swift; sourceTree = ""; }; + 0A9229E126AF288D00D4B387 /* TestSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestSettings.swift; sourceTree = ""; }; + 0A9229E226AF288D00D4B387 /* Util.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = ""; }; + 0A9229E326AF288D00D4B387 /* SubscriptionIdFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionIdFilter.swift; sourceTree = ""; }; + 0A9229E426AF288D00D4B387 /* RecordableXCTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordableXCTestCase.swift; sourceTree = ""; }; + 0A9229F226B0702300D4B387 /* libAzureTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAzureTest.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A9229FE26B070B500D4B387 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 0A922A0026B070E300D4B387 /* AzureCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A922A0226B0710800D4B387 /* AzureCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A922A0A26B0780400D4B387 /* AzureCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AzureCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 31CAC0A9268A5D7E0084F817 /* AzureTestTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AzureTestTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 31CAC0AB268A5D7E0084F817 /* AzureTestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AzureTestTests.swift; sourceTree = ""; }; + 31CAC0AD268A5D7E0084F817 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 31CAC0B5268A60070084F817 /* TestData.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = TestData.json; path = "../../../../../../../../../Users/jairmyree/Desktop/azure-sdk-for-ios/sdk/test/AzureTest/AzureTestTests/Resources/TestData.json"; sourceTree = SDKROOT; }; + 63223FEC2B266A9E151BF760 /* Pods_AzureTest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureTest.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7FFEFE60028E7EF3807647F9 /* Pods-AzureTestTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTestTests.debug.xcconfig"; path = "Target Support Files/Pods-AzureTestTests/Pods-AzureTestTests.debug.xcconfig"; sourceTree = ""; }; + 96F3D908C250C6C135FCD9DC /* Pods-AzureTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTest.debug.xcconfig"; path = "Target Support Files/Pods-AzureTest/Pods-AzureTest.debug.xcconfig"; sourceTree = ""; }; + A926CB03D0FC387E9DFF6F62 /* Pods_AzureTestTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AzureTestTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ADCC08EA457E7D6F9AD12244 /* Pods-AzureTestTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTestTests.release.xcconfig"; path = "Target Support Files/Pods-AzureTestTests/Pods-AzureTestTests.release.xcconfig"; sourceTree = ""; }; + E4CDDDCAAD0879F79B1E8F6A /* Pods-AzureTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AzureTest.release.xcconfig"; path = "Target Support Files/Pods-AzureTest/Pods-AzureTest.release.xcconfig"; sourceTree = ""; }; + OBJ_16 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0A9229EF26B0702300D4B387 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A922A0B26B0780400D4B387 /* AzureCore.framework in Frameworks */, + 0A9229FF26B070B500D4B387 /* XCTest.framework in Frameworks */, + B706C03719DA5D1E3DCAF13C /* Pods_AzureTest.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 31CAC0A6268A5D7E0084F817 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B4694B556C92673B62DBD56 /* Pods_AzureTestTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0A9229DF26AF288D00D4B387 /* Source */ = { + isa = PBXGroup; + children = ( + 0A9229E026AF288D00D4B387 /* DVRSessionTransport.swift */, + 0A9229E126AF288D00D4B387 /* TestSettings.swift */, + 0A9229E226AF288D00D4B387 /* Util.swift */, + 0A9229E326AF288D00D4B387 /* SubscriptionIdFilter.swift */, + 0A9229E426AF288D00D4B387 /* RecordableXCTestCase.swift */, + ); + path = Source; + sourceTree = ""; + }; + 21E91398ED202E8262E7364B /* Pods */ = { + isa = PBXGroup; + children = ( + 96F3D908C250C6C135FCD9DC /* Pods-AzureTest.debug.xcconfig */, + E4CDDDCAAD0879F79B1E8F6A /* Pods-AzureTest.release.xcconfig */, + 7FFEFE60028E7EF3807647F9 /* Pods-AzureTestTests.debug.xcconfig */, + ADCC08EA457E7D6F9AD12244 /* Pods-AzureTestTests.release.xcconfig */, + ); + name = Pods; + path = ../../../Pods; + sourceTree = ""; + }; + 31CAC0AA268A5D7E0084F817 /* Tests */ = { + isa = PBXGroup; + children = ( + 31CAC0B4268A5FD00084F817 /* Resources */, + 31CAC0AB268A5D7E0084F817 /* AzureTestTests.swift */, + 31CAC0AD268A5D7E0084F817 /* Info.plist */, + ); + path = Tests; + sourceTree = ""; + }; + 31CAC0B4268A5FD00084F817 /* Resources */ = { + isa = PBXGroup; + children = ( + 31CAC0B5268A60070084F817 /* TestData.json */, + ); + path = Resources; + sourceTree = ""; + }; + 931914D81AEE8242AC264A8F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 0A922A0A26B0780400D4B387 /* AzureCore.framework */, + 0A922A0226B0710800D4B387 /* AzureCore.framework */, + 0A922A0026B070E300D4B387 /* AzureCore.framework */, + 0A9229FE26B070B500D4B387 /* XCTest.framework */, + 63223FEC2B266A9E151BF760 /* Pods_AzureTest.framework */, + 0A1E75A22673D48100054F60 /* AzureIdentity.framework */, + 0A2097C2266FE16200FE2272 /* AzureIdentity.framework */, + 0A2097BB266FDE0200FE2272 /* AzureCore.framework */, + A926CB03D0FC387E9DFF6F62 /* Pods_AzureTestTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + OBJ_13 /* Products */ = { + isa = PBXGroup; + children = ( + 31CAC0A9268A5D7E0084F817 /* AzureTestTests.xctest */, + 0A9229F226B0702300D4B387 /* libAzureTest.a */, + ); + name = Products; + sourceTree = BUILT_PRODUCTS_DIR; + }; + OBJ_5 = { + isa = PBXGroup; + children = ( + 0A9229DF26AF288D00D4B387 /* Source */, + 31CAC0AA268A5D7E0084F817 /* Tests */, + OBJ_13 /* Products */, + OBJ_16 /* README.md */, + 21E91398ED202E8262E7364B /* Pods */, + 931914D81AEE8242AC264A8F /* Frameworks */, + ); + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0A9229F126B0702300D4B387 /* AzureTest */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0A9229F826B0702300D4B387 /* Build configuration list for PBXNativeTarget "AzureTest" */; + buildPhases = ( + D556A51346D47C1433719BFA /* [CP] Check Pods Manifest.lock */, + 0A9229EE26B0702300D4B387 /* Sources */, + 0A9229EF26B0702300D4B387 /* Frameworks */, + 0A9229F026B0702300D4B387 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AzureTest; + productName = AzureTestStatic; + productReference = 0A9229F226B0702300D4B387 /* libAzureTest.a */; + productType = "com.apple.product-type.library.static"; + }; + 31CAC0A8268A5D7E0084F817 /* AzureTestTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 31CAC0B1268A5D7E0084F817 /* Build configuration list for PBXNativeTarget "AzureTestTests" */; + buildPhases = ( + EE05FED80E6CDEB857E5534D /* [CP] Check Pods Manifest.lock */, + 31CAC0A5268A5D7E0084F817 /* Sources */, + 31CAC0A6268A5D7E0084F817 /* Frameworks */, + 31CAC0A7268A5D7E0084F817 /* Resources */, + 36AAC72EFA4D6D37A8B8C40C /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = AzureTestTests; + productName = AzureTestTests; + productReference = 31CAC0A9268A5D7E0084F817 /* AzureTestTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + OBJ_1 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftMigration = 9999; + LastSwiftUpdateCheck = 1250; + LastUpgradeCheck = 9999; + TargetAttributes = { + 0A9229F126B0702300D4B387 = { + CreatedOnToolsVersion = 12.5.1; + DevelopmentTeam = UBF8T346G9; + ProvisioningStyle = Automatic; + }; + 31CAC0A8268A5D7E0084F817 = { + CreatedOnToolsVersion = 12.5.1; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = OBJ_2 /* Build configuration list for PBXProject "AzureTest" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = OBJ_5; + productRefGroup = OBJ_13 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0A9229F126B0702300D4B387 /* AzureTest */, + 31CAC0A8268A5D7E0084F817 /* AzureTestTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 31CAC0A7268A5D7E0084F817 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 31CAC0B6268A60080084F817 /* TestData.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 36AAC72EFA4D6D37A8B8C40C /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-AzureTestTests/Pods-AzureTestTests-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/DVR/DVR.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DVR.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AzureTestTests/Pods-AzureTestTests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + D556A51346D47C1433719BFA /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-AzureTest-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + EE05FED80E6CDEB857E5534D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-AzureTestTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0A9229EE26B0702300D4B387 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A9229FA26B0704800D4B387 /* TestSettings.swift in Sources */, + 0A9229FD26B0705000D4B387 /* RecordableXCTestCase.swift in Sources */, + 0A9229FC26B0704E00D4B387 /* SubscriptionIdFilter.swift in Sources */, + 0A9229FB26B0704B00D4B387 /* Util.swift in Sources */, + 0A9229F926B0704400D4B387 /* DVRSessionTransport.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 31CAC0A5268A5D7E0084F817 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 31CAC0AC268A5D7E0084F817 /* AzureTestTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 0A9229F626B0702300D4B387 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 96F3D908C250C6C135FCD9DC /* Pods-AzureTest.debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = UBF8T346G9; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 0A9229F726B0702300D4B387 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4CDDDCAAD0879F79B1E8F6A /* Pods-AzureTest.release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = UBF8T346G9; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + OTHER_LDFLAGS = "$(inherited)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 31CAC0B2268A5D7E0084F817 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7FFEFE60028E7EF3807647F9 /* Pods-AzureTestTests.debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = AzureTestTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 11.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = Azure.AzureTestTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 31CAC0B3268A5D7E0084F817 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ADCC08EA457E7D6F9AD12244 /* Pods-AzureTestTests.release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = "$(inherited)"; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = AzureTestTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 11.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = Azure.AzureTestTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + OBJ_3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = YES; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "SWIFT_PACKAGE=1", + "DEBUG=1", + ); + MACOSX_DEPLOYMENT_TARGET = 10.10; + MARKETING_VERSION = 1.0.0; + ONLY_ACTIVE_ARCH = YES; + OTHER_SWIFT_FLAGS = "$(inherited) -DXcode"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "$(AVAILABLE_PLATFORMS)"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SWIFT_PACKAGE DEBUG"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + OBJ_4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_OPTIMIZATION_LEVEL = s; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "SWIFT_PACKAGE=1", + ); + MACOSX_DEPLOYMENT_TARGET = 10.10; + MARKETING_VERSION = 1.0.0; + OTHER_SWIFT_FLAGS = "$(inherited) -DXcode"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SUPPORTED_PLATFORMS = "$(AVAILABLE_PLATFORMS)"; + SUPPORTS_MACCATALYST = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) SWIFT_PACKAGE"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + USE_HEADERMAP = NO; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0A9229F826B0702300D4B387 /* Build configuration list for PBXNativeTarget "AzureTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0A9229F626B0702300D4B387 /* Debug */, + 0A9229F726B0702300D4B387 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 31CAC0B1268A5D7E0084F817 /* Build configuration list for PBXNativeTarget "AzureTestTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 31CAC0B2268A5D7E0084F817 /* Debug */, + 31CAC0B3268A5D7E0084F817 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + OBJ_2 /* Build configuration list for PBXProject "AzureTest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + OBJ_3 /* Debug */, + OBJ_4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = OBJ_1 /* Project object */; +} diff --git a/sdk/test/AzureTest/AzureTest.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/sdk/test/AzureTest/AzureTest.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..a72dc2b4c --- /dev/null +++ b/sdk/test/AzureTest/AzureTest.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded + + + \ No newline at end of file diff --git a/sdk/test/AzureTest/AzureTest.xcodeproj/xcshareddata/xcschemes/AzureTest.xcscheme b/sdk/test/AzureTest/AzureTest.xcodeproj/xcshareddata/xcschemes/AzureTest.xcscheme new file mode 100644 index 000000000..f9c82f95c --- /dev/null +++ b/sdk/test/AzureTest/AzureTest.xcodeproj/xcshareddata/xcschemes/AzureTest.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sdk/test/AzureTest/README.md b/sdk/test/AzureTest/README.md new file mode 100644 index 000000000..2ad24ec93 --- /dev/null +++ b/sdk/test/AzureTest/README.md @@ -0,0 +1,42 @@ +# Azure Test client library for iOS + +This package contains the a library for testing Azure services for iOS. + +[Source code](https://github.com/Azure/azure-sdk-for-ios/tree/main/sdk/test/AzureTest) + +## Getting started + +### Prerequisites +* The client library is written in modern Swift 5. Due to this, Xcode 10.2 or higher is required to use this library. + +## Key concepts + +## Examples + +## Troubleshooting + +If you run into issues while using this library, please feel free to +[file an issue](https://github.com/Azure/azure-sdk-for-ios/issues/new). + +## Next steps + +More sample code should go here, along with links out to the appropriate example tests. + +## Contributing + +This project welcomes contributions and suggestions. All code contributions should be made in the [Azure SDK for iOS] +(https://github.com/Azure/azure-sdk-for-ios) repository. + +Most contributions require you to agree to a Contributor License +Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For +details, visit https://cla.microsoft.com. + +When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate +the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to +do this once across all repositories using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact +[opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-ios%2Fsdk%rtest%2FAzureTest%2FREADME.png) diff --git a/sdk/test/AzureTest/Source/DVRSessionTransport.swift b/sdk/test/AzureTest/Source/DVRSessionTransport.swift new file mode 100644 index 000000000..9497a43c9 --- /dev/null +++ b/sdk/test/AzureTest/Source/DVRSessionTransport.swift @@ -0,0 +1,174 @@ +// -------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The MIT License (MIT) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the ""Software""), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// -------------------------------------------------------------------------- + +import AzureCore +import DVR +import Foundation +import os + +public class DVRSessionTransport: TransportStage { + // MARK: Properties + + public var session: Session? + + // DVR cassette name to search + private var cassetteName: String + + private var _next: PipelineStage? + public var next: PipelineStage? { + get { + return _next + } + + // swiftlint:disable:next unused_setter_value + set { + _next = nil + } + } + + // MARK: Initializers + + public init(cassetteName: String) { + self.cassetteName = cassetteName + } + + // MARK: HTTPTransportStage Methods + + public func open() { + guard session == nil else { return } + let sdkPath = environmentVariable(forKey: "SDK_REPO_ROOT", default: "~") + guard let outputDirectory = URL(string: sdkPath)? + .appendingPathComponent("sdk/communication/AzureCommunicationChat/Tests/Recordings").absoluteString else { + fatalError("SDK Path Invalid") + } + let replacements: [String: Filter.FilterBehavior] = [ + "authorization": .remove, + "client-request-id": .remove, + "retry-after": .remove, + "x-ms-client-request-id": .remove, + "x-ms-correlation-request-id": .remove, + "x-ms-ratelimit-remaining-subscription-reads": .remove, + "x-ms-request-id": .remove, + "x-ms-routing-request-id": .remove, + "x-ms-gateway-service-instanceid": .remove, + "x-ms-ratelimit-remaining-tenant-reads": .remove, + "x-ms-served-by": .remove, + "x-ms-authorization-auxiliary": .remove, + "operation-location": .remove, + "azure-asyncoperation": .remove, + "www-authenticate": .remove, + "access_token": .remove + ] + + session = Session(outputDirectory: outputDirectory, cassetteName: cassetteName) + let defaultFilter = Filter() + defaultFilter.filterHeaders = replacements + let subscriptionIdFilter = SubscriptionIDFilter() + session?.filters = [ + defaultFilter, + subscriptionIdFilter + ] + if environmentVariable(forKey: "TEST_MODE", default: "playback") == "record" { + session?.recordMode = .all + session?.recordingEnabled = true + session?.beginRecording() + } else { // when live DVR isn't used, so anything else is treated as playback + session?.recordMode = .none + session?.recordingEnabled = false + } + } + + public func close() { + session?.endRecording { + self.session = nil + } + } + + // MARK: PipelineStage Methods + + public func process( + request pipelineRequest: PipelineRequest, + completionHandler: @escaping PipelineStageResultHandler + ) { + open() + guard let session = self.session else { + pipelineRequest.logger.error("Invalid session.") + return + } + var urlRequest = URLRequest(url: pipelineRequest.httpRequest.url) + urlRequest.httpMethod = pipelineRequest.httpRequest.httpMethod.rawValue + urlRequest.allHTTPHeaderFields = pipelineRequest.httpRequest.headers + urlRequest.httpBody = pipelineRequest.httpRequest.data + + // need immutable copies to pass into the closure. At this point, these can't change + // anyways. + let httpRequest = pipelineRequest.httpRequest + let responseContext = pipelineRequest.context + let logger = pipelineRequest.logger + + if let cancellationToken = pipelineRequest.context?.value(forKey: .cancellationToken) as? CancellationToken { + cancellationToken.start() + if cancellationToken.isCanceled { + completionHandler(.failure(AzureError.client("Request canceled.")), nil) + return + } + } + + session.dataTask(with: urlRequest) { data, response, error in + if let cancellationToken = pipelineRequest.context? + .value(forKey: .cancellationToken) as? CancellationToken { + if cancellationToken.isCanceled { + completionHandler(.failure(AzureError.client("Request canceled.")), nil) + return + } + } + let rawResponse = response as? HTTPURLResponse + let httpResponse = URLHTTPResponse(request: httpRequest, response: rawResponse) + httpResponse.data = data + + // check for invalid status codes + let statusCode = httpResponse.statusCode ?? -1 + let allowedStatusCodes = responseContext?.value(forKey: .allowedStatusCodes) as? [Int] ?? [200] + if !allowedStatusCodes.contains(statusCode) { + // do not add the inner error, as it may require decoding from XML. + let error = AzureError.service("Service returned invalid status code [\(statusCode)].", nil) + completionHandler(.failure(error), httpResponse) + } + + let pipelineResponse = PipelineResponse( + request: httpRequest, + response: httpResponse, + logger: logger, + context: responseContext + ) + if let error = error { + completionHandler(.failure(AzureError.service("Service error.", error)), httpResponse) + } else { + completionHandler(.success(pipelineResponse), httpResponse) + } + }.resume() + } +} diff --git a/sdk/test/AzureTest/Source/RecordableXCTestCase.swift b/sdk/test/AzureTest/Source/RecordableXCTestCase.swift new file mode 100644 index 000000000..ee44ee140 --- /dev/null +++ b/sdk/test/AzureTest/Source/RecordableXCTestCase.swift @@ -0,0 +1,65 @@ +// -------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The MIT License (MIT) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the ""Software""), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// -------------------------------------------------------------------------- + +import AzureCore +import XCTest + +open class RecordableXCTestCase: XCTestCase { + public let settings = { + SettingsType.loadFromPlist() + }() + + public var transportOptions: TransportOptions { + return TransportOptions(transport: transport) + } + + private var transport: TransportStage! + + private var mode = environmentVariable(forKey: "TEST_MODE", default: "playback") + + override public final func setUp() {} + + override public final func setUpWithError() throws { + let fullname = name + var testName = fullname.split(separator: " ")[1] + testName.removeLast() + transport = mode != "live" ? DVRSessionTransport(cassetteName: String(testName)) : URLSessionTransport() + try setUpTestWithError() + transport?.open() + } + + /// Method which the test author can override to configure setup + open func setUpTestWithError() throws {} + + override public final func tearDownWithError() throws {} + + override public final func tearDown() { + transport?.close() + } + + /// Method which the test author can override to configure setup + open func tearDownTestWithError() throws {} +} diff --git a/sdk/test/AzureTest/Source/SubscriptionIdFilter.swift b/sdk/test/AzureTest/Source/SubscriptionIdFilter.swift new file mode 100644 index 000000000..3a76bc55a --- /dev/null +++ b/sdk/test/AzureTest/Source/SubscriptionIdFilter.swift @@ -0,0 +1,123 @@ +// -------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The MIT License (MIT) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the ""Software""), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// -------------------------------------------------------------------------- + +import DVR +import Foundation + +public class SubscriptionIDFilter: Filter { + override public init() { + super.init() + let standardHeaderScrubbing: [String: FilterBehavior] = [ + "location": .closure(scrubSubscriptionIDClosure) + ] + filterHeaders = standardHeaderScrubbing + beforeRecordRequest = scrubSubscriptionIDs + beforeRecordResponse = scrubSubscriptionIDs + } + + // swiftlint:disable:next force_try + static let subscriptionIDRegex = try! NSRegularExpression( + pattern: "(/(subscriptions))/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", + options: .caseInsensitive + ) + // swiftlint:disable:next force_try + static let graphSubscriptionIDRegex = try! NSRegularExpression( + pattern: "(https://(graph.windows.net))/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", + options: .caseInsensitive + ) + + static var subcriptionIDReplacement = "00000000-0000-0000-0000-000000000000" + + /// Wraps `ScrubSubscriptionId` in a function to be passed as closure within initializer + func scrubSubscriptionIDClosure(key _: String, val: String?) -> (String?) { + guard let val = val else { return nil } + return scrubSubscriptionId(from: val) + } + + /// Returns the original string with subscription ID info (if any) replaced. + func scrubSubscriptionId(from string: String) -> String { + var editedString = string + editedString.replaceAllMatches( + usingRegex: SubscriptionIDFilter.subscriptionIDRegex, + withReplacement: "$1/\(SubscriptionIDFilter.subcriptionIDReplacement)" + ) + editedString.replaceAllMatches( + usingRegex: SubscriptionIDFilter.graphSubscriptionIDRegex, + withReplacement: "$1/\(SubscriptionIDFilter.subcriptionIDReplacement)" + ) + + return editedString + } + + func scrubSubscriptionIDs(from request: URLRequest) -> URLRequest { + var cleanRequest = request + + let dirtyHeaders = request.allHTTPHeaderFields ?? [:] + let cleanHeaders = dirtyHeaders.mapValues { val in + scrubSubscriptionId(from: val) + } + + cleanRequest.allHTTPHeaderFields = cleanHeaders.isEmpty ? nil : cleanHeaders + cleanRequest.url = nil + if let url = request.url { + cleanRequest.url = URL(string: scrubSubscriptionId(from: url.absoluteString)) + } + + cleanRequest.mainDocumentURL = nil + if let docUrl = request.url { + cleanRequest.url = URL(string: scrubSubscriptionId(from: docUrl.absoluteString)) + } + + cleanRequest.httpBody = nil + if let httpBodyStringRep = String(data: request.httpBody, encoding: .utf8) { + cleanRequest.httpBody = scrubSubscriptionId(from: httpBodyStringRep).data(using: .utf8) + } + + return cleanRequest + } + + /// This function relies on Filter within DVR to scrub the URLResponse and is only responsible for scrubbing the optional Data. The URLResponse is passed as a parameter and within the return type so that this function can be used as Filter's beforeRecordResponse function + func scrubSubscriptionIDs(from response: Foundation.URLResponse, data: Data?) -> (Foundation.URLResponse, Data?) { + guard let dataStringRep = String(data: data, encoding: .utf8) else { return (response, data) } + return (response, scrubSubscriptionId(from: dataStringRep).data(using: .utf8)) + } +} + +extension String { + mutating func replaceAllMatches( + usingRegex: NSRegularExpression, + withReplacement: String, + matchingOptions: NSRegularExpression.MatchingOptions = [] + ) { + let range = NSRange(location: 0, length: utf8.count) + self = usingRegex.stringByReplacingMatches( + in: self, + options: matchingOptions, + range: range, + withTemplate: withReplacement + ) + } +} diff --git a/sdk/template/AzureTemplate/Tests/AzureTemplateTests.swift b/sdk/test/AzureTest/Source/TestSettings.swift similarity index 63% rename from sdk/template/AzureTemplate/Tests/AzureTemplateTests.swift rename to sdk/test/AzureTest/Source/TestSettings.swift index 24eb5be29..bee4493e3 100644 --- a/sdk/template/AzureTemplate/Tests/AzureTemplateTests.swift +++ b/sdk/test/AzureTest/Source/TestSettings.swift @@ -24,28 +24,20 @@ // // -------------------------------------------------------------------------- -import XCTest +import Foundation -class AzureTemplateTests: XCTestCase { - - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. - } - - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. - } - - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } +public protocol TestSettingsProtocol: AnyObject, Codable { + static func loadFromPlist() -> Self? +} - func testPerformanceExample() throws { - // This is an example of a performance test case. - measure { - // Put the code you want to measure the time of here. +public extension TestSettingsProtocol { + static func loadFromPlist() -> Self? { + if let path = Bundle(for: self).path(forResource: "test-settings", ofType: "plist"), + let xml = FileManager.default.contents(atPath: path), + let settings = try? PropertyListDecoder().decode(Self.self, from: xml) { + return settings + } else { + return nil } } - } diff --git a/sdk/test/AzureTest/Source/Util.swift b/sdk/test/AzureTest/Source/Util.swift new file mode 100644 index 000000000..85daa5428 --- /dev/null +++ b/sdk/test/AzureTest/Source/Util.swift @@ -0,0 +1,36 @@ +// -------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The MIT License (MIT) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the ""Software""), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// -------------------------------------------------------------------------- + +import Foundation + +/// Returns a value from an environment variable or a default. Empty string is treated the same as nil. +public func environmentVariable(forKey key: String, default defVal: String) -> String { + var value = ProcessInfo.processInfo.environment[key] + if value == "" || value == nil { + value = defVal + } + return value! +} diff --git a/sdk/test/AzureTest/Tests/AzureTestTests.swift b/sdk/test/AzureTest/Tests/AzureTestTests.swift new file mode 100644 index 000000000..0818a322d --- /dev/null +++ b/sdk/test/AzureTest/Tests/AzureTestTests.swift @@ -0,0 +1,93 @@ +// -------------------------------------------------------------------------- +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// The MIT License (MIT) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the ""Software""), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// +// -------------------------------------------------------------------------- + +@testable import AzureTest +import DVR +import Foundation +import XCTest + +// swiftlint:disable force_try force_cast line_length +class AzureTestTests: XCTestCase { + var fakeData: Data! + + var fakeRequest: URLRequest! + + var fakeResponse: URLResponse! + + var fakeResponseData: Data! + + let insertedGUID = "72f988bf-86f1-41af-91ab-2d7cd011db47" + + override func setUpWithError() throws { + let testBundle = Bundle(for: type(of: self)) + let path = testBundle.path(forResource: "TestData", ofType: "json") + fakeData = try! Data(contentsOf: URL(fileURLWithPath: path!)) + } + + func test_scrubbingRequest_removeSubscriptionIDs() throws { + let dirtyURLString = + "https://management.azure.com/subscriptions/\(insertedGUID)/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz?api-version=2019-09-01" + + let cleanedURLString = SubscriptionIDFilter().scrubSubscriptionId(from: dirtyURLString) + let shouldPass = !cleanedURLString.contains(regex: insertedGUID) + XCTAssert(shouldPass) + } + + func test_scrubbingResponse_removeSubscriptionIDs() throws { + let dirtyHeaders = + [ + "location": "[\"https://management.azure.com/subscriptions/\(insertedGUID)/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01\"]" + ] + + let dirtyBody = """ + "string": "{\"id\":\"/subscriptions/\(insertedGUID)/providers/Microsoft.KeyVault/locations/eastus/deletedVaults/myValtZikfikxz\",\"name\":\"myValtZikfikxz\",\"type\":\"Microsoft.KeyVault/deletedVaults\",\"properties\":{\"vaultId\":\"/subscriptions/72f988bf-86f1-41af-91ab-2d7cd011db47/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz\",\"location\":\"eastus\",\"tags\":{},\"deletionDate\":\"2021-04-19T05:32:42Z\",\"scheduledPurgeDate\":\"2021-07-18T05:32:42Z\"}}" + """ + + let cleanLocation = SubscriptionIDFilter().scrubSubscriptionId(from: dirtyHeaders["location"]!) + let cleanBody = SubscriptionIDFilter().scrubSubscriptionId(from: dirtyBody) + + let shouldPass = !cleanLocation.contains(regex: insertedGUID) && !cleanBody.contains(regex: insertedGUID) + + XCTAssert(shouldPass) + } +} + +private extension String { + func dictionaryFromString() -> [String: Any] { + let data = self.data(using: .utf8) + return try! JSONSerialization.jsonObject(with: data!, options: []) as! [String: Any] + } + + func contains( + regex pattern: String, + regexOptions: NSRegularExpression.Options = [], + matchingOptions: NSRegularExpression.MatchingOptions = [] + ) -> Bool { + let regularExpression = try! NSRegularExpression(pattern: pattern, options: regexOptions) + let range = NSRange(location: 0, length: utf8.count) + return regularExpression.numberOfMatches(in: self, options: matchingOptions, range: range) > 0 + } +} diff --git a/sdk/test/AzureTest/Tests/Info.plist b/sdk/test/AzureTest/Tests/Info.plist new file mode 100644 index 000000000..64d65ca49 --- /dev/null +++ b/sdk/test/AzureTest/Tests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/sdk/test/AzureTest/Tests/Resources/TestData.json b/sdk/test/AzureTest/Tests/Resources/TestData.json new file mode 100644 index 000000000..8f8f3952a --- /dev/null +++ b/sdk/test/AzureTest/Tests/Resources/TestData.json @@ -0,0 +1,1627 @@ +{ + "interactions": [ + { + "request": { + "body": "{\"location\": \"eastus\", \"properties\": {\"tenantId\": \"72f988bf-86f1-41af-91ab-2d7cd011db47\", \"sku\": {\"family\": \"A\", \"name\": \"standard\"}, \"accessPolicies\": [{\"tenantId\": \"72f988bf-86f1-41af-91ab-2d7cd011db47\", \"objectId\": \"00000000-0000-0000-0000-000000000000\", \"permissions\": {\"keys\": [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\", \"sign\", \"verify\", \"get\", \"list\", \"create\", \"update\", \"import\", \"delete\", \"backup\", \"restore\", \"recover\", \"purge\"], \"secrets\": [\"get\", \"list\", \"set\", \"delete\", \"backup\", \"restore\", \"recover\", \"purge\"], \"certificates\": [\"get\", \"list\", \"delete\", \"create\", \"import\", \"update\", \"managecontacts\", \"getissuers\", \"listissuers\", \"setissuers\", \"deleteissuers\", \"manageissuers\", \"recover\", \"purge\"]}}], \"enabledForDeployment\": true, \"enabledForDiskEncryption\": true, \"enabledForTemplateDeployment\": true}}", + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "823" + ], + "Content-Type": [ + "application/json" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "PUT", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz\",\"name\":\"myValtZikfikxz\",\"type\":\"Microsoft.KeyVault/vaults\",\"location\":\"eastus\",\"tags\":{},\"properties\":{\"sku\":{\"family\":\"A\",\"name\":\"standard\"},\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"accessPolicies\":[{\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"objectId\":\"00000000-0000-0000-0000-000000000000\",\"permissions\":{\"keys\":[\"encrypt\",\"decrypt\",\"wrapKey\",\"unwrapKey\",\"sign\",\"verify\",\"get\",\"list\",\"create\",\"update\",\"import\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"secrets\":[\"get\",\"list\",\"set\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"certificates\":[\"get\",\"list\",\"delete\",\"create\",\"import\",\"update\",\"managecontacts\",\"getissuers\",\"listissuers\",\"setissuers\",\"deleteissuers\",\"manageissuers\",\"recover\",\"purge\"]}}],\"enabledForDeployment\":true,\"enabledForDiskEncryption\":true,\"enabledForTemplateDeployment\":true,\"enableSoftDelete\":true,\"vaultUri\":\"https://myValtZikfikxz.vault.azure.net\",\"provisioningState\":\"RegisteringDns\"}}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "1149" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:10 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz\",\"name\":\"myValtZikfikxz\",\"type\":\"Microsoft.KeyVault/vaults\",\"location\":\"eastus\",\"tags\":{},\"properties\":{\"sku\":{\"family\":\"A\",\"name\":\"standard\"},\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"accessPolicies\":[{\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"objectId\":\"00000000-0000-0000-0000-000000000000\",\"permissions\":{\"keys\":[\"encrypt\",\"decrypt\",\"wrapKey\",\"unwrapKey\",\"sign\",\"verify\",\"get\",\"list\",\"create\",\"update\",\"import\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"secrets\":[\"get\",\"list\",\"set\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"certificates\":[\"get\",\"list\",\"delete\",\"create\",\"import\",\"update\",\"managecontacts\",\"getissuers\",\"listissuers\",\"setissuers\",\"deleteissuers\",\"manageissuers\",\"recover\",\"purge\"]}}],\"enabledForDeployment\":true,\"enabledForDiskEncryption\":true,\"enabledForTemplateDeployment\":true,\"enableSoftDelete\":true,\"vaultUri\":\"https://myvaltzikfikxz.vault.azure.net/\",\"provisioningState\":\"Succeeded\"}}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "1145" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:40 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": "{\"properties\": {\"accessPolicies\": [{\"tenantId\": \"72f988bf-86f1-41af-91ab-2d7cd011db47\", \"objectId\": \"00000000-0000-0000-0000-000000000000\", \"permissions\": {\"keys\": [\"encrypt\"], \"secrets\": [\"get\"], \"certificates\": [\"get\"]}}]}}", + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "225" + ], + "Content-Type": [ + "application/json" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "PUT", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz/accessPolicies/add?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz/accessPolicies/\",\"type\":\"Microsoft.KeyVault/vaults/accessPolicies\",\"properties\":{\"accessPolicies\":[{\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"objectId\":\"00000000-0000-0000-0000-000000000000\",\"permissions\":{\"keys\":[\"encrypt\",\"decrypt\",\"wrapKey\",\"unwrapKey\",\"sign\",\"verify\",\"get\",\"list\",\"create\",\"update\",\"import\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"secrets\":[\"get\",\"list\",\"set\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"certificates\":[\"get\",\"list\",\"delete\",\"create\",\"import\",\"update\",\"managecontacts\",\"getissuers\",\"listissuers\",\"setissuers\",\"deleteissuers\",\"manageissuers\",\"recover\",\"purge\"]}}]}}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "828" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:40 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1198" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz\",\"name\":\"myValtZikfikxz\",\"type\":\"Microsoft.KeyVault/vaults\",\"location\":\"eastus\",\"tags\":{},\"properties\":{\"sku\":{\"family\":\"A\",\"name\":\"standard\"},\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"accessPolicies\":[{\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"objectId\":\"00000000-0000-0000-0000-000000000000\",\"permissions\":{\"keys\":[\"encrypt\",\"decrypt\",\"wrapKey\",\"unwrapKey\",\"sign\",\"verify\",\"get\",\"list\",\"create\",\"update\",\"import\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"secrets\":[\"get\",\"list\",\"set\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"certificates\":[\"get\",\"list\",\"delete\",\"create\",\"import\",\"update\",\"managecontacts\",\"getissuers\",\"listissuers\",\"setissuers\",\"deleteissuers\",\"manageissuers\",\"recover\",\"purge\"]}}],\"enabledForDeployment\":true,\"enabledForDiskEncryption\":true,\"enabledForTemplateDeployment\":true,\"enableSoftDelete\":true,\"vaultUri\":\"https://myvaltzikfikxz.vault.azure.net/\",\"provisioningState\":\"Succeeded\"}}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "1145" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:40 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": "{}", + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "2" + ], + "Content-Type": [ + "application/json" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "PATCH", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz\",\"name\":\"myValtZikfikxz\",\"type\":\"Microsoft.KeyVault/vaults\",\"location\":\"eastus\",\"tags\":{},\"properties\":{\"sku\":{\"family\":\"A\",\"name\":\"standard\"},\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"accessPolicies\":[{\"tenantId\":\"72f988bf-86f1-41af-91ab-2d7cd011db47\",\"objectId\":\"00000000-0000-0000-0000-000000000000\",\"permissions\":{\"keys\":[\"encrypt\",\"decrypt\",\"wrapKey\",\"unwrapKey\",\"sign\",\"verify\",\"get\",\"list\",\"create\",\"update\",\"import\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"secrets\":[\"get\",\"list\",\"set\",\"delete\",\"backup\",\"restore\",\"recover\",\"purge\"],\"certificates\":[\"get\",\"list\",\"delete\",\"create\",\"import\",\"update\",\"managecontacts\",\"getissuers\",\"listissuers\",\"setissuers\",\"deleteissuers\",\"manageissuers\",\"recover\",\"purge\"]}}],\"enabledForDeployment\":true,\"enabledForDiskEncryption\":true,\"enabledForTemplateDeployment\":true,\"enableSoftDelete\":true,\"vaultUri\":\"https://myvaltzikfikxz.vault.azure.net/\",\"provisioningState\":\"Succeeded\"}}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "1145" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:41 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1197" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": "{\"name\": \"sample-vault\", \"type\": \"Microsoft.KeyVault/vaults\"}", + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "61" + ], + "Content-Type": [ + "application/json" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "POST", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/checkNameAvailability?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"nameAvailable\":false,\"reason\":\"AlreadyExists\",\"message\":\"The vault name 'sample-vault' is already in use. Vault names are globaly unique so it is possible that the name is already taken. If you are sure that the vault name was not taken then it is possible that a vault with the same name was recently deleted but not purged after being placed in a recoverable state. If the vault is in a recoverable state then the vault will need to be purged before reusing the name. For more information on soft delete and purging a vault follow this link https://go.microsoft.com/fwlink/?linkid=2147740.\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "595" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:41 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "DELETE", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "0" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:42 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-ms-ratelimit-remaining-subscription-deletes": [ + "14998" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/deletedVaults/myValtZikfikxz?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"id\":\"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/deletedVaults/myValtZikfikxz\",\"name\":\"myValtZikfikxz\",\"type\":\"Microsoft.KeyVault/deletedVaults\",\"properties\":{\"vaultId\":\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rgname/providers/Microsoft.KeyVault/vaults/myValtZikfikxz\",\"location\":\"eastus\",\"tags\":{},\"deletionDate\":\"2021-04-19T05:32:42Z\",\"scheduledPurgeDate\":\"2021-07-18T05:32:42Z\"}}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "539" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:42 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "application/json" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "Content-Length": [ + "0" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "POST", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/deletedVaults/myValtZikfikxz/purge?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "0" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:42 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-ms-ratelimit-remaining-subscription-writes": [ + "1199" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:47 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:52 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:32:57 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:02 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:07 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:12 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:18 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:23 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:28 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:33 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:38 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"status\":\"NotStarted\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "64" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:43 GMT" + ], + "expires": [ + "-1" + ], + "location": [ + "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 202, + "message": "Accepted" + } + } + }, + { + "request": { + "body": null, + "headers": { + "Accept": [ + "*/*" + ], + "Accept-Encoding": [ + "gzip, deflate" + ], + "Connection": [ + "keep-alive" + ], + "User-Agent": [ + "azsdk-python-azure-mgmt-keyvault/9.0.0 Python/3.8.9 (Linux-5.4.0-1043-azure-x86_64-with-glibc2.2.5) VSTS_0fb41ef4-5012-48a9-bf39-4ee3de03ee35_build_2384_0" + ] + }, + "method": "GET", + "uri": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.KeyVault/locations/eastus/operationResults/VVR8MDYzNzU0NDA3MTY0MzE2NTczMnwwNjZENTEwRTA4N0U0MTY5ODc1MDhDRDY3QUJDMzdGOQ?api-version=2019-09-01" + }, + "response": { + "body": { + "string": "{\"createdDateTime\":\"2021-04-19 05:32:43Z\",\"lastActionDateTime\":\"2021-04-19 05:33:46Z\",\"status\":\"Succeeded\"}" + }, + "headers": { + "cache-control": [ + "no-cache" + ], + "content-length": [ + "107" + ], + "content-type": [ + "application/json; charset=utf-8" + ], + "date": [ + "Mon, 19 Apr 2021 05:33:48 GMT" + ], + "expires": [ + "-1" + ], + "pragma": [ + "no-cache" + ], + "server": [ + "Microsoft-IIS/10.0" + ], + "strict-transport-security": [ + "max-age=31536000; includeSubDomains" + ], + "transfer-encoding": [ + "chunked" + ], + "vary": [ + "Accept-Encoding" + ], + "x-aspnet-version": [ + "4.0.30319" + ], + "x-content-type-options": [ + "nosniff" + ], + "x-ms-keyvault-service-version": [ + "1.1.292.0" + ], + "x-powered-by": [ + "ASP.NET" + ] + }, + "status": { + "code": 200, + "message": "OK" + } + } + } + ], + "version": 1 +}