11import XCTest
2+ @testable import WordPressKit
23@testable import WooCommerce
34
45final 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