@@ -634,6 +634,82 @@ final class AppStoreServerAPIClientTests: XCTestCase {
634634 XCTAssertEqual ( AppStoreServerAPIClient . ConfigurationError. invalidEnvironment, e as! AppStoreServerAPIClient . ConfigurationError )
635635 }
636636 }
637+
638+ public func testSetAppAccountToken( ) async throws {
639+ let client = try getAppStoreServerAPIClient ( " " ) { request, body in
640+ XCTAssertEqual ( . PUT, request. method)
641+ XCTAssertEqual ( " https://local-testing-base-url/inApps/v1/transactions/49571273/appAccountToken " , request. url)
642+ XCTAssertEqual ( [ " application/json " ] , request. headers [ " Content-Type " ] )
643+ let decodedJson = try ! JSONSerialization . jsonObject ( with: body!) as! [ String : Any ]
644+ XCTAssertEqual ( " 7389A31A-FB6D-4569-A2A6-DB7D85D84813 " , decodedJson [ " appAccountToken " ] as! String )
645+ }
646+
647+ let updateAppAccountTokenRequest = UpdateAppAccountTokenRequest (
648+ appAccountToken: UUID ( uuidString: " 7389a31a-fb6d-4569-a2a6-db7d85d84813 " ) !
649+ )
650+ TestingUtility . confirmCodableInternallyConsistent ( updateAppAccountTokenRequest)
651+
652+ let response = await client. setAppAccountToken ( originalTransactionId: " 49571273 " , updateAppAccountTokenRequest: updateAppAccountTokenRequest)
653+ guard case . success( _) = response else {
654+ XCTAssertTrue ( false )
655+ return
656+ }
657+ }
658+
659+
660+ public func testInvalidAppAccountTokenUUIDError( ) async throws {
661+ let body = TestingUtility . readFile ( " resources/models/invalidAppAccountTokenUUIDError.json " )
662+ let client = try getAppStoreServerAPIClient ( body, . badRequest, nil )
663+ let updateAppAccountTokenRequest = UpdateAppAccountTokenRequest (
664+ appAccountToken: UUID ( uuidString: " 7389a31a-fb6d-4569-a2a6-db7d85d84813 " ) !
665+ )
666+ let result = await client. setAppAccountToken ( originalTransactionId: " 1234 " , updateAppAccountTokenRequest: updateAppAccountTokenRequest)
667+ guard case . failure( let statusCode, let rawApiError, let apiError, let errorMessage, let causedBy) = result else {
668+ XCTAssertTrue ( false )
669+ return
670+ }
671+ XCTAssertEqual ( 400 , statusCode)
672+ XCTAssertNotNil ( apiError)
673+ XCTAssertEqual ( 4000183 , rawApiError)
674+ XCTAssertEqual ( " Invalid request. The app account token field must be a valid UUID. " , errorMessage)
675+ XCTAssertNil ( causedBy)
676+ }
677+
678+ public func testFamilySharedTransactionNotSupportedError( ) async throws {
679+ let body = TestingUtility . readFile ( " resources/models/familyTransactionNotSupportedError.json " )
680+ let client = try getAppStoreServerAPIClient ( body, . badRequest, nil )
681+ let updateAppAccountTokenRequest = UpdateAppAccountTokenRequest (
682+ appAccountToken: UUID ( uuidString: " 7389a31a-fb6d-4569-a2a6-db7d85d84813 " ) !
683+ )
684+ let result = await client. setAppAccountToken ( originalTransactionId: " 1234 " , updateAppAccountTokenRequest: updateAppAccountTokenRequest)
685+ guard case . failure( let statusCode, let rawApiError, let apiError, let errorMessage, let causedBy) = result else {
686+ XCTAssertTrue ( false )
687+ return
688+ }
689+ XCTAssertEqual ( 400 , statusCode)
690+ XCTAssertNotNil ( apiError)
691+ XCTAssertEqual ( 4000185 , rawApiError)
692+ XCTAssertEqual ( " Invalid request. Family Sharing transactions aren't supported by this endpoint. " , errorMessage)
693+ XCTAssertNil ( causedBy)
694+ }
695+
696+ public func testTransactionIdNotOriginalTransactionIdError( ) async throws {
697+ let body = TestingUtility . readFile ( " resources/models/transactionIdNotOriginalTransactionId.json " )
698+ let client = try getAppStoreServerAPIClient ( body, . badRequest, nil )
699+ let updateAppAccountTokenRequest = UpdateAppAccountTokenRequest (
700+ appAccountToken: UUID ( uuidString: " 7389a31a-fb6d-4569-a2a6-db7d85d84813 " ) !
701+ )
702+ let result = await client. setAppAccountToken ( originalTransactionId: " 1234 " , updateAppAccountTokenRequest: updateAppAccountTokenRequest)
703+ guard case . failure( let statusCode, let rawApiError, let apiError, let errorMessage, let causedBy) = result else {
704+ XCTAssertTrue ( false )
705+ return
706+ }
707+ XCTAssertEqual ( 400 , statusCode)
708+ XCTAssertNotNil ( apiError)
709+ XCTAssertEqual ( 4000187 , rawApiError)
710+ XCTAssertEqual ( " Invalid request. The transaction ID provided is not an original transaction ID. " , errorMessage)
711+ XCTAssertNil ( causedBy)
712+ }
637713
638714 public func getClientWithBody( _ path: String , _ requestVerifier: @escaping RequestVerifier ) throws -> AppStoreServerAPIClient {
639715 let body = TestingUtility . readFile ( path)
0 commit comments