@@ -231,5 +231,73 @@ void main() {
231231 expect (httpService.isCompleted, true );
232232 });
233233 });
234+
235+ test ('does not updateSignUp when values are unchanged' , () async {
236+ await runWithLogging (() async {
237+ expect (auth.user, null );
238+
239+ // 1) Create initial sign up with emailCode and an email address
240+ httpService.expect (
241+ 'POST /v1/client/sign_ups strategy=email_code&email_address=$emailAddress ' ,
242+ 200 ,
243+ '{"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}}',
244+ );
245+
246+ // Initial create
247+ Client client = await auth.attemptSignUp (
248+ strategy: Strategy .emailCode,
249+ emailAddress: emailAddress,
250+ );
251+ expect (client.signUp? .status, Status .missingRequirements);
252+
253+ // 2) Call attemptSignUp again with the same email
254+ // No HTTP expectation should be queued for this invocation.
255+ client = await auth.attemptSignUp (
256+ strategy: Strategy .emailCode,
257+ emailAddress: emailAddress, // unchanged
258+ );
259+
260+ // State should remain in missing requirements; no extra PATCH occurred.
261+ expect (client.signUp? .status, Status .missingRequirements);
262+ });
263+ });
264+
265+ test ('updates SignUp when provided value changes' , () async {
266+ await runWithLogging (() async {
267+ expect (auth.user, null );
268+
269+ final firstEmail
= '$username [email protected] ' ;
270+ final secondEmail
= '$username [email protected] ' ;
271+
272+ // 1) Create initial sign up with first email
273+ httpService.expect (
274+ 'POST /v1/client/sign_ups strategy=email_code&email_address=$firstEmail ' ,
275+ 200 ,
276+ '{"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}}',
277+ );
278+
279+ Client client = await auth.attemptSignUp (
280+ strategy: Strategy .emailCode,
281+ emailAddress: firstEmail,
282+ );
283+ expect (client.signUp? .status, Status .missingRequirements);
284+
285+ // 2) Provide a different email -> should PATCH
286+ httpService.expect (
287+ 'PATCH /v1/client/sign_ups/SIGN_UP_ATTEMPT_ID strategy=email_code&email_address=$secondEmail ' ,
288+ 200 ,
289+ '{"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}}',
290+ );
291+
292+ client = await auth.attemptSignUp (
293+ strategy: Strategy .emailCode,
294+ emailAddress: secondEmail,
295+ );
296+
297+ // Still in missing requirements, but email reflected the change via PATCH
298+ expect (client.signUp? .status, Status .missingRequirements);
299+ expect (client.signUp? .emailAddress, secondEmail);
300+ });
301+ });
234302 });
235303}
0 commit comments