Skip to content
This repository was archived by the owner on Feb 5, 2025. It is now read-only.

Commit 87942d9

Browse files
authored
Replace GIDGoogleUser with SocialService.User in .google (#764)
2 parents 0f9c85e + 53669e0 commit 87942d9

File tree

8 files changed

+81
-21
lines changed

8 files changed

+81
-21
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ _None._
3535
### Breaking Changes
3636

3737
- `SocialService` `apple` associated type is now `User` instead of `AppleUser`. [#763]
38+
- `SocialService` `google` associated type is now `User` instead of `GIDGoogleUser`. [#764]
3839

3940
### New Features
4041

WordPressAuthenticator.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
3F86A84229D28473005D20C0 /* SocialUserCreating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F86A84129D28473005D20C0 /* SocialUserCreating.swift */; };
3838
3F86A84629D2A306005D20C0 /* WordPressAuthenticatorDelegateSpy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F86A84529D2A306005D20C0 /* WordPressAuthenticatorDelegateSpy.swift */; };
3939
3F86A84829D2A42D005D20C0 /* WordPressAuthenticator+TestsUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F86A84729D2A42D005D20C0 /* WordPressAuthenticator+TestsUtils.swift */; };
40+
3F86A84A29D2A982005D20C0 /* LoginViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F86A84929D2A982005D20C0 /* LoginViewControllerTests.swift */; };
41+
3F86A84E29D3B53D005D20C0 /* SocialServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F86A84D29D3B53D005D20C0 /* SocialServiceTests.swift */; };
4042
3F879FD5293A3AB6005C2B48 /* OAuthTokenRequestBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F879FD4293A3AB6005C2B48 /* OAuthTokenRequestBody.swift */; };
4143
3F879FD7293A44F2005C2B48 /* OAuthTokenRequestBodyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F879FD6293A44F2005C2B48 /* OAuthTokenRequestBodyTests.swift */; };
4244
3F879FD9293A48B2005C2B48 /* OAuthTokenResponseBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F879FD8293A48B2005C2B48 /* OAuthTokenResponseBody.swift */; };
@@ -292,6 +294,8 @@
292294
3F86A84129D28473005D20C0 /* SocialUserCreating.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialUserCreating.swift; sourceTree = "<group>"; };
293295
3F86A84529D2A306005D20C0 /* WordPressAuthenticatorDelegateSpy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordPressAuthenticatorDelegateSpy.swift; sourceTree = "<group>"; };
294296
3F86A84729D2A42D005D20C0 /* WordPressAuthenticator+TestsUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WordPressAuthenticator+TestsUtils.swift"; sourceTree = "<group>"; };
297+
3F86A84929D2A982005D20C0 /* LoginViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewControllerTests.swift; sourceTree = "<group>"; };
298+
3F86A84D29D3B53D005D20C0 /* SocialServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialServiceTests.swift; sourceTree = "<group>"; };
295299
3F879FD4293A3AB6005C2B48 /* OAuthTokenRequestBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OAuthTokenRequestBody.swift; sourceTree = "<group>"; };
296300
3F879FD6293A44F2005C2B48 /* OAuthTokenRequestBodyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OAuthTokenRequestBodyTests.swift; sourceTree = "<group>"; };
297301
3F879FD8293A48B2005C2B48 /* OAuthTokenResponseBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OAuthTokenResponseBody.swift; sourceTree = "<group>"; };
@@ -557,6 +561,7 @@
557561
isa = PBXGroup;
558562
children = (
559563
3F86A83D29D280D7005D20C0 /* AppleAuthenticatorTests.swift */,
564+
3F86A84929D2A982005D20C0 /* LoginViewControllerTests.swift */,
560565
);
561566
path = SingIn;
562567
sourceTree = "<group>";
@@ -714,6 +719,7 @@
714719
isa = PBXGroup;
715720
children = (
716721
B501C040208FC52500D1E58F /* LoginFacadeTests.m */,
722+
3F86A84D29D3B53D005D20C0 /* SocialServiceTests.swift */,
717723
);
718724
path = Services;
719725
sourceTree = "<group>";
@@ -1546,6 +1552,7 @@
15461552
buildActionMask = 2147483647;
15471553
files = (
15481554
3F4E64782990BBD4000DB555 /* IDTokenTests.swift in Sources */,
1555+
3F86A84E29D3B53D005D20C0 /* SocialServiceTests.swift in Sources */,
15491556
3F879FDB293A49AA005C2B48 /* NewGoogleAuthenticatorTests.swift in Sources */,
15501557
F18DF0E5252500A600D83AFE /* WordPressAuthenticatorTests-Bridging-Header.h in Sources */,
15511558
3FE8071529364C410088420C /* Result+ConvenienceInitTests.swift in Sources */,
@@ -1569,6 +1576,7 @@
15691576
3FEC44F9293A0F2900EBDECF /* ProofKeyForCodeExchangeTests.swift in Sources */,
15701577
3F107B0529A87AF0009B3658 /* CodeVerifier+Fixture.swift in Sources */,
15711578
CE16177821B70C1A00B82A47 /* WordPressAuthenticatorDisplayTextTests.swift in Sources */,
1579+
3F86A84A29D2A982005D20C0 /* LoginViewControllerTests.swift in Sources */,
15721580
3F86A84829D2A42D005D20C0 /* WordPressAuthenticator+TestsUtils.swift in Sources */,
15731581
3F879FF4293A7F46005C2B48 /* GoogleOAuthTokenGetterTests.swift in Sources */,
15741582
B501C048208FC79C00D1E58F /* LoginFacadeTests.m in Sources */,

WordPressAuthenticator/Model/LoginFields.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public class LoginFieldsMeta: NSObject {
152152

153153
@objc public var socialServiceIDToken: String?
154154

155-
var googleUser: GIDGoogleUser?
155+
var googleUser: SocialService.User?
156156

157157
var appleUser: SocialService.User?
158158

@@ -165,7 +165,7 @@ public class LoginFieldsMeta: NSObject {
165165
requiredMultifactor: Bool = false,
166166
socialService: SocialServiceName? = nil,
167167
socialServiceIDToken: String? = nil,
168-
googleUser: GIDGoogleUser? = nil,
168+
googleUser: SocialService.User? = nil,
169169
appleUser: SocialService.User? = nil) {
170170
self.emailMagicLinkSource = emailMagicLinkSource
171171
self.jetpackLogin = jetpackLogin

WordPressAuthenticator/Services/SocialService.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,16 @@ public enum SocialService {
99
public let fullName: String
1010
}
1111

12+
public var user: User {
13+
switch self {
14+
case .google(let user): return user
15+
case .apple(let user): return user
16+
}
17+
}
18+
1219
/// Google's Signup Linked Account
1320
///
14-
case google(user: GIDGoogleUser)
21+
case google(user: User)
1522

1623
/// Apple's Signup Linked Account
1724
///

WordPressAuthenticator/Signin/LoginViewController.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ open class LoginViewController: NUXViewController, LoginFacadeDelegate {
132132
fatalError()
133133
}
134134

135-
let service = loginFields.meta.googleUser.flatMap {
136-
return SocialService.google(user: $0)
135+
let service: SocialService? = loginFields.meta.googleUser.map {
136+
SocialService.google(user: $0)
137137
}
138138

139139
authenticationDelegate.presentSignupEpilogue(in: navigationController, for: credentials, service: service)
@@ -422,15 +422,6 @@ extension LoginViewController {
422422
loginFacade.loginToWordPressDotCom(withSocialIDToken: token, service: SocialServiceName.apple.rawValue)
423423
}
424424

425-
/// Updates the LoginFields structure, with the specified Google User + Token + Email.
426-
///
427-
func updateLoginFields(googleUser: GIDGoogleUser, googleToken: String, googleEmail: String) {
428-
loginFields.emailAddress = googleEmail
429-
loginFields.username = googleEmail
430-
loginFields.meta.socialServiceIDToken = googleToken
431-
loginFields.meta.googleUser = googleUser
432-
}
433-
434425
// Used by SIWA when logging with with a passwordless, 2FA account.
435426
//
436427
func socialNeedsMultifactorCode(forUserID userID: Int, andNonceInfo nonceInfo: SocialLogin2FANonceInfo) {

WordPressAuthenticator/Unified Auth/GoogleAuthenticator.swift

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class GoogleAuthenticator: NSObject {
145145
loginFields: loginFields
146146
)
147147

148-
didSignIn(token: token.token.rawValue, email: token.email)
148+
didSignIn(token: token.token.rawValue, email: token.email, fullName: token.name)
149149
} catch {
150150
failedToSignIn(error: error)
151151
}
@@ -216,15 +216,13 @@ private extension GoogleAuthenticator {
216216
// Get account information
217217
guard let user = user,
218218
let token = user.authentication.idToken,
219-
let email = user.profile?.email else {
219+
let email = user.profile?.email,
220+
let fullName = user.profile?.name else {
220221
failedToSignIn(error: error)
221222
return
222223
}
223224

224-
// Set `googleUser` here, `didSignIn(token:, email:)` will do the rest.
225-
loginFields.meta.googleUser = user
226-
227-
didSignIn(token: token, email: email)
225+
didSignIn(token: token, email: email, fullName: fullName)
228226
}
229227

230228
private func failedToSignIn(error: Error?) {
@@ -251,11 +249,12 @@ private extension GoogleAuthenticator {
251249
delegate?.googleAuthCancelled()
252250
}
253251

254-
private func didSignIn(token: String, email: String) {
252+
private func didSignIn(token: String, email: String, fullName: String) {
255253
// Save account information to pass back to delegate later.
256254
loginFields.emailAddress = email
257255
loginFields.username = email
258256
loginFields.meta.socialServiceIDToken = token
257+
loginFields.meta.googleUser = SocialService.User(email: email, fullName: fullName)
259258

260259
guard authConfig.enableUnifiedAuth else {
261260
// Initiate separate WP login / signup paths.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@testable import WordPressAuthenticator
2+
import XCTest
3+
4+
class SocialServiceTests: XCTestCase {
5+
6+
func testSocialServiceUserApple() throws {
7+
let socialService = SocialService.apple(user: .init(email: "[email protected]", fullName: "Full Name"))
8+
9+
XCTAssertEqual(socialService.user.fullName, "Full Name")
10+
XCTAssertEqual(socialService.user.email, "[email protected]")
11+
}
12+
13+
func testSocialServiceUserGoogle() throws {
14+
let socialService = SocialService.google(user: .init(email: "[email protected]", fullName: "Name Full"))
15+
16+
XCTAssertEqual(socialService.user.fullName, "Name Full")
17+
XCTAssertEqual(socialService.user.email, "[email protected]")
18+
}
19+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@testable import WordPressAuthenticator
2+
import XCTest
3+
4+
class LoginViewControllerTests: XCTestCase {
5+
6+
// showSignupEpilogue with loginFields.meta.appleUser set will pass SocialService.apple to
7+
// the delegate
8+
func testShowingSignupEpilogueWithGoogleUser() throws {
9+
WordPressAuthenticator.initializeForTesting()
10+
let delegateSpy = WordPressAuthenticatorDelegateSpy()
11+
WordPressAuthenticator.shared.delegate = delegateSpy
12+
13+
// This might be unnecessary because delegateSpy should be deallocated once the test method finished.
14+
// Leaving it here, just in case.
15+
addTeardownBlock {
16+
WordPressAuthenticator.shared.delegate = nil
17+
}
18+
19+
let sut = LoginViewController()
20+
// We need to embed the SUT in a navigation controller because it expects its
21+
// navigationController property to not be nil.
22+
_ = UINavigationController(rootViewController: sut)
23+
24+
sut.loginFields.meta.googleUser = SocialService.User(email: "[email protected]", fullName: "Full Name")
25+
26+
sut.showSignupEpilogue(for: AuthenticatorCredentials())
27+
28+
let socialService = try XCTUnwrap(delegateSpy.socialService)
29+
guard case .google(let user) = socialService else {
30+
return XCTFail("Expected Google social service, got \(socialService) instead")
31+
}
32+
XCTAssertEqual(user.fullName, "Full Name")
33+
XCTAssertEqual(user.email, "[email protected]")
34+
}
35+
}

0 commit comments

Comments
 (0)