@@ -349,6 +349,73 @@ class ParseUserCombineTests: XCTestCase { // swiftlint:disable:this type_body_le
349349 wait ( for: [ expectation1] , timeout: 20.0 )
350350 }
351351
352+ func testBecomeTypeMethod( ) async throws {
353+ try await login ( )
354+ MockURLProtocol . removeAll ( )
355+
356+ let user = try await User . current ( )
357+ XCTAssertNotNil ( user. objectId)
358+
359+ var serverResponse = LoginSignupResponse ( )
360+ serverResponse. createdAt = user. createdAt
361+ serverResponse. updatedAt = user. updatedAt? . addingTimeInterval ( + 300 )
362+ serverResponse. sessionToken = " newValue "
363+ serverResponse. username = " stop "
364+
365+ var subscriptions = Set < AnyCancellable > ( )
366+ MockURLProtocol . mockRequests { _ in
367+ do {
368+ let encoded = try serverResponse. getEncoder ( ) . encode ( serverResponse, skipKeys: . none)
369+ return MockURLResponse ( data: encoded, statusCode: 200 )
370+ } catch {
371+ return nil
372+ }
373+ }
374+
375+ let expectation1 = XCTestExpectation ( description: " Become user1 " )
376+ let expectation2 = XCTestExpectation ( description: " Become user2 " )
377+ let publisher = User . becomePublisher ( sessionToken: serverResponse. sessionToken)
378+ . sink ( receiveCompletion: { result in
379+
380+ if case let . failure( error) = result {
381+ XCTFail ( error. localizedDescription)
382+ expectation2. fulfill ( )
383+ }
384+ expectation1. fulfill ( )
385+
386+ } , receiveValue: { signedUp in
387+ XCTAssertNotNil ( signedUp)
388+ XCTAssertNotNil ( signedUp. createdAt)
389+ XCTAssertNotNil ( signedUp. updatedAt)
390+ XCTAssertNotNil ( signedUp. email)
391+ XCTAssertNotNil ( signedUp. username)
392+ XCTAssertNil ( signedUp. password)
393+ XCTAssertNotNil ( signedUp. objectId)
394+ XCTAssertNotNil ( signedUp. customKey)
395+ XCTAssertNil ( signedUp. ACL)
396+
397+ Task {
398+ do {
399+ let userFromKeychain = try await BaseParseUser . current ( )
400+ XCTAssertNotNil ( userFromKeychain. createdAt)
401+ XCTAssertNotNil ( userFromKeychain. updatedAt)
402+ XCTAssertNotNil ( userFromKeychain. email)
403+ XCTAssertNotNil ( userFromKeychain. username)
404+ XCTAssertNil ( userFromKeychain. password)
405+ XCTAssertNotNil ( userFromKeychain. objectId)
406+ XCTAssertNil ( userFromKeychain. ACL)
407+ } catch {
408+ XCTFail ( error. localizedDescription)
409+ }
410+ DispatchQueue . main. async {
411+ expectation2. fulfill ( )
412+ }
413+ }
414+ } )
415+ publisher. store ( in: & subscriptions)
416+ wait ( for: [ expectation1] , timeout: 20.0 )
417+ }
418+
352419 func testLogout( ) async throws {
353420 try await login ( )
354421 MockURLProtocol . removeAll ( )
0 commit comments