Skip to content

Commit 25f2815

Browse files
Add and update tests
1 parent c558367 commit 25f2815

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

WooCommerce/WooCommerceTests/Mocks/MockWordPressComAccountService.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ final class MockWordPressComAccountService: WordPressComAccountServiceProtocol {
1717
failure(passwordlessAccountCheckError)
1818
}
1919

20-
func requestAuthenticationLink(for email: String, jetpackLogin: Bool, success: @escaping () -> Void, failure: @escaping (Error) -> Void) {
20+
func requestAuthenticationLink(for email: String,
21+
jetpackLogin: Bool,
22+
createAccountIfNotFound: Bool,
23+
success: @escaping () -> Void,
24+
failure: @escaping (Error) -> Void) {
2125
triggeredRequestAuthenticationLink = true
2226
guard let authenticationLinkRequestError else {
2327
return success()

WooCommerce/WooCommerceTests/ViewRelated/JetpackSetup/WPComLogin/WPComEmailLoginViewModelTests.swift

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import XCTest
2+
@testable import WordPressKit
23
@testable import WooCommerce
34

45
final class WPComEmailLoginViewModelTests: XCTestCase {
@@ -8,6 +9,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
89
let siteURL = "https://example.com"
910
let viewModel = WPComEmailLoginViewModel(siteURL: siteURL,
1011
requiresConnectionOnly: false,
12+
allowAccountCreation: false,
1113
onPasswordUIRequest: { _ in },
1214
onMagicLinkUIRequest: { _ in },
1315
onError: { _ in })
@@ -24,6 +26,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
2426
let siteURL = "https://example.com"
2527
let viewModel = WPComEmailLoginViewModel(siteURL: siteURL,
2628
requiresConnectionOnly: true,
29+
allowAccountCreation: false,
2730
onPasswordUIRequest: { _ in },
2831
onMagicLinkUIRequest: { _ in },
2932
onError: { _ in })
@@ -40,6 +43,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
4043
let siteURL = "https://example.com"
4144
let viewModel = WPComEmailLoginViewModel(siteURL: siteURL,
4245
requiresConnectionOnly: false,
46+
allowAccountCreation: false,
4347
onPasswordUIRequest: { _ in },
4448
onMagicLinkUIRequest: { _ in },
4549
onError: { _ in })
@@ -56,6 +60,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
5660
let siteURL = "https://example.com"
5761
let viewModel = WPComEmailLoginViewModel(siteURL: siteURL,
5862
requiresConnectionOnly: true,
63+
allowAccountCreation: false,
5964
onPasswordUIRequest: { _ in },
6065
onMagicLinkUIRequest: { _ in },
6166
onError: { _ in })
@@ -72,6 +77,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
7277
let siteURL = "https://example.com"
7378
let viewModel = WPComEmailLoginViewModel(siteURL: siteURL,
7479
requiresConnectionOnly: true,
80+
allowAccountCreation: false,
7581
onPasswordUIRequest: { _ in },
7682
onMagicLinkUIRequest: { _ in },
7783
onError: { _ in })
@@ -92,6 +98,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
9298
mockAccountService.shouldReturnPasswordlessAccount = true
9399
let viewModel = WPComEmailLoginViewModel(siteURL: "https://example.com",
94100
requiresConnectionOnly: true,
101+
allowAccountCreation: false,
95102
accountService: mockAccountService,
96103
onPasswordUIRequest: { _ in },
97104
onMagicLinkUIRequest: { _ in },
@@ -115,6 +122,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
115122
var triggeredOnError = false
116123
let viewModel = WPComEmailLoginViewModel(siteURL: "https://example.com",
117124
requiresConnectionOnly: true,
125+
allowAccountCreation: false,
118126
accountService: mockAccountService,
119127
onPasswordUIRequest: { _ in },
120128
onMagicLinkUIRequest: { _ in },
@@ -133,6 +141,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
133141
var triggeredPasswordUIRequest = false
134142
let viewModel = WPComEmailLoginViewModel(siteURL: "https://example.com",
135143
requiresConnectionOnly: true,
144+
allowAccountCreation: false,
136145
accountService: mockAccountService,
137146
onPasswordUIRequest: { _ in triggeredPasswordUIRequest = true },
138147
onMagicLinkUIRequest: { _ in },
@@ -150,6 +159,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
150159
var triggeredOnMagicLinkUIRequest = false
151160
let viewModel = WPComEmailLoginViewModel(siteURL: "https://example.com",
152161
requiresConnectionOnly: true,
162+
allowAccountCreation: false,
153163
accountService: mockAccountService,
154164
onPasswordUIRequest: { _ in },
155165
onMagicLinkUIRequest: { _ in triggeredOnMagicLinkUIRequest = true },
@@ -168,6 +178,7 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
168178
var triggeredOnError = false
169179
let viewModel = WPComEmailLoginViewModel(siteURL: "https://example.com",
170180
requiresConnectionOnly: true,
181+
allowAccountCreation: false,
171182
accountService: mockAccountService,
172183
onPasswordUIRequest: { _ in },
173184
onMagicLinkUIRequest: { _ in },
@@ -178,4 +189,54 @@ final class WPComEmailLoginViewModelTests: XCTestCase {
178189
// Then
179190
XCTAssertTrue(triggeredOnError)
180191
}
192+
193+
func test_given_unknown_email_when_allowAccountCreation_true_then_create_account() async {
194+
// Given
195+
let mockAccountService = MockWordPressComAccountService()
196+
mockAccountService.passwordlessAccountCheckError = WordPressAPIError.endpointError(
197+
WordPressComRestApiEndpointError(
198+
code: WordPressComRestApiErrorCode.unknown,
199+
apiErrorCode: "unknown_user"
200+
)
201+
)
202+
var triggeredOnMagicLinkUIRequest = false
203+
let viewModel = WPComEmailLoginViewModel(siteURL: "https://example.com",
204+
requiresConnectionOnly: true,
205+
allowAccountCreation: true,
206+
accountService: mockAccountService,
207+
onPasswordUIRequest: { _ in },
208+
onMagicLinkUIRequest: { _ in triggeredOnMagicLinkUIRequest = true },
209+
onError: { _ in })
210+
211+
// When
212+
await viewModel.checkWordPressComAccount(email: "[email protected]")
213+
214+
// Then
215+
XCTAssertTrue(triggeredOnMagicLinkUIRequest)
216+
}
217+
218+
func test_given_unknown_email_when_allowAccountCreation_false_then_trigger_onError() async {
219+
// Given
220+
let mockAccountService = MockWordPressComAccountService()
221+
mockAccountService.passwordlessAccountCheckError = WordPressAPIError.endpointError(
222+
WordPressComRestApiEndpointError(
223+
code: WordPressComRestApiErrorCode.unknown,
224+
apiErrorCode: "unknown_user"
225+
)
226+
)
227+
var triggeredOnError = false
228+
let viewModel = WPComEmailLoginViewModel(siteURL: "https://example.com",
229+
requiresConnectionOnly: true,
230+
allowAccountCreation: false,
231+
accountService: mockAccountService,
232+
onPasswordUIRequest: { _ in },
233+
onMagicLinkUIRequest: { _ in },
234+
onError: { _ in triggeredOnError = true })
235+
236+
// When
237+
await viewModel.checkWordPressComAccount(email: "[email protected]")
238+
239+
// Then
240+
XCTAssertTrue(triggeredOnError)
241+
}
181242
}

0 commit comments

Comments
 (0)