@@ -229,5 +229,73 @@ void main() {
229229 expect (httpService.isCompleted, true );
230230 });
231231 });
232+
233+ test ('does not updateSignUp when values are unchanged' , () async {
234+ await runWithLogging (() async {
235+ expect (auth.user, null );
236+
237+ // 1) Create initial sign up with emailCode and an email address
238+ httpService.expect (
239+ 'POST /v1/client/sign_ups strategy=email_code&email_address=$emailAddress ' ,
240+ 200 ,
241+ '{"response":{"object":"sign_up_attempt","id":"SIGN_UP_ATTEMPT_ID","status":"missing_requirements","required_fields":["password"],"optional_fields":["oauth_github","oauth_google","email_address","phone_number","username","last_name","first_name","oauth_apple"],"missing_fields":["password"],"unverified_fields":["email_address"],"verifications":{"email_address":null,"phone_number":null,"web3_wallet":null,"external_account":null},"username":null,"email_address":"$emailAddress","phone_number":null,"web3_wallet":null,"password_enabled":false,"first_name":null,"last_name":null,"unsafe_metadata":{},"public_metadata":{},"custom_action":false,"external_id":null,"created_session_id":null,"created_user_id":null,"abandon_at":1732107014735,"legal_accepted_at":null},"client":{"object":"client","id":"CLIENT_ID","sessions":[],"sign_in":null,"sign_up":{"object":"sign_up_attempt","id":"SIGN_UP_ATTEMPT_ID","status":"missing_requirements","required_fields":["password"],"optional_fields":["phone_number","username","first_name","last_name","oauth_github","oauth_google","oauth_apple","email_address"],"missing_fields":["password"],"unverified_fields":["email_address"],"verifications":{"email_address":null,"phone_number":null,"web3_wallet":null,"external_account":null},"username":null,"email_address":"$emailAddress","phone_number":null,"web3_wallet":null,"password_enabled":false,"first_name":null,"last_name":null,"unsafe_metadata":{},"public_metadata":{},"custom_action":false,"external_id":null,"created_session_id":null,"created_user_id":null,"abandon_at":1732107014735,"legal_accepted_at":null},"last_active_session_id":null,"cookie_expires_at":null,"created_at":1732020614717,"updated_at":1732020614748}}',
242+ );
243+
244+ // Initial create
245+ Client client = await auth.attemptSignUp (
246+ strategy: Strategy .emailCode,
247+ emailAddress: emailAddress,
248+ );
249+ expect (client.signUp? .status, Status .missingRequirements);
250+
251+ // 2) Call attemptSignUp again with the same email
252+ // No HTTP expectation should be queued for this invocation.
253+ client = await auth.attemptSignUp (
254+ strategy: Strategy .emailCode,
255+ emailAddress: emailAddress, // unchanged
256+ );
257+
258+ // State should remain in missing requirements; no extra PATCH occurred.
259+ expect (client.signUp? .status, Status .missingRequirements);
260+ });
261+ });
262+
263+ test ('updates SignUp when provided value changes' , () async {
264+ await runWithLogging (() async {
265+ expect (auth.user, null );
266+
267+ final firstEmail
= '$username [email protected] ' ;
268+ final secondEmail
= '$username [email protected] ' ;
269+
270+ // 1) Create initial sign up with first email
271+ httpService.expect (
272+ 'POST /v1/client/sign_ups strategy=email_code&email_address=$firstEmail ' ,
273+ 200 ,
274+ '{"response":{"object":"sign_up_attempt","id":"SIGN_UP_ATTEMPT_ID","status":"missing_requirements","required_fields":["password"],"optional_fields":["oauth_github","oauth_google","email_address","phone_number","username","last_name","first_name","oauth_apple"],"missing_fields":["password"],"unverified_fields":["email_address"],"verifications":{"email_address":null,"phone_number":null,"web3_wallet":null,"external_account":null},"username":null,"email_address":"$firstEmail","phone_number":null,"web3_wallet":null,"password_enabled":false,"first_name":null,"last_name":null,"unsafe_metadata":{},"public_metadata":{},"custom_action":false,"external_id":null,"created_session_id":null,"created_user_id":null,"abandon_at":1732107014735,"legal_accepted_at":null},"client":{"object":"client","id":"CLIENT_ID","sessions":[],"sign_in":null,"sign_up":{"object":"sign_up_attempt","id":"SIGN_UP_ATTEMPT_ID","status":"missing_requirements","required_fields":["password"],"optional_fields":["phone_number","username","first_name","last_name","oauth_github","oauth_google","oauth_apple","email_address"],"missing_fields":["password"],"unverified_fields":["email_address"],"verifications":{"email_address":null,"phone_number":null,"web3_wallet":null,"external_account":null},"username":null,"email_address":"$firstEmail","phone_number":null,"web3_wallet":null,"password_enabled":false,"first_name":null,"last_name":null,"unsafe_metadata":{},"public_metadata":{},"custom_action":false,"external_id":null,"created_session_id":null,"created_user_id":null,"abandon_at":1732107014735,"legal_accepted_at":null},"last_active_session_id":null,"cookie_expires_at":null,"created_at":1732020614717,"updated_at":1732020614748}}',
275+ );
276+
277+ Client client = await auth.attemptSignUp (
278+ strategy: Strategy .emailCode,
279+ emailAddress: firstEmail,
280+ );
281+ expect (client.signUp? .status, Status .missingRequirements);
282+
283+ // 2) Provide a different email -> should PATCH
284+ httpService.expect (
285+ 'PATCH /v1/client/sign_ups/SIGN_UP_ATTEMPT_ID strategy=email_code&email_address=$secondEmail ' ,
286+ 200 ,
287+ '{"response":{"object":"sign_up_attempt","id":"SIGN_UP_ATTEMPT_ID","status":"missing_requirements","required_fields":["password"],"optional_fields":["oauth_github","oauth_google","email_address","phone_number","username","last_name","first_name","oauth_apple"],"missing_fields":["password"],"unverified_fields":["email_address"],"verifications":{"email_address":null,"phone_number":null,"web3_wallet":null,"external_account":null},"username":null,"email_address":"$secondEmail","phone_number":null,"web3_wallet":null,"password_enabled":false,"first_name":null,"last_name":null,"unsafe_metadata":{},"public_metadata":{},"custom_action":false,"external_id":null,"created_session_id":null,"created_user_id":null,"abandon_at":1732107014735,"legal_accepted_at":null},"client":{"object":"client","id":"CLIENT_ID","sessions":[],"sign_in":null,"sign_up":{"object":"sign_up_attempt","id":"SIGN_UP_ATTEMPT_ID","status":"missing_requirements","required_fields":["password"],"optional_fields":["phone_number","username","first_name","last_name","oauth_github","oauth_google","oauth_apple","email_address"],"missing_fields":["password"],"unverified_fields":["email_address"],"verifications":{"email_address":null,"phone_number":null,"web3_wallet":null,"external_account":null},"username":null,"email_address":"$secondEmail","phone_number":null,"web3_wallet":null,"password_enabled":false,"first_name":null,"last_name":null,"unsafe_metadata":{},"public_metadata":{},"custom_action":false,"external_id":null,"created_session_id":null,"created_user_id":null,"abandon_at":1732107014735,"legal_accepted_at":null},"last_active_session_id":null,"cookie_expires_at":null,"created_at":1732020614717,"updated_at":1732020614748}}',
288+ );
289+
290+ client = await auth.attemptSignUp (
291+ strategy: Strategy .emailCode,
292+ emailAddress: secondEmail,
293+ );
294+
295+ // Still in missing requirements, but email reflected the change via PATCH
296+ expect (client.signUp? .status, Status .missingRequirements);
297+ expect (client.signUp? .emailAddress, secondEmail);
298+ });
299+ });
232300 });
233301}
0 commit comments