@@ -117,5 +117,73 @@ void main() {
117117 expect (httpService.isCompleted);
118118 });
119119 });
120+
121+ test ('does not updateSignUp when values are unchanged' , () async {
122+ await runWithLogging (() async {
123+ expect (auth.user, null );
124+
125+ // 1) Create initial sign up with emailCode and an email address
126+ httpService.expect (
127+ 'POST /v1/client/sign_ups strategy=email_code&email_address=$emailAddress ' ,
128+ 200 ,
129+ '{"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}}',
130+ );
131+
132+ // Initial create
133+ Client client = await auth.attemptSignUp (
134+ strategy: Strategy .emailCode,
135+ emailAddress: emailAddress,
136+ );
137+ expect (client.signUp? .status, Status .missingRequirements);
138+
139+ // 2) Call attemptSignUp again with the same email
140+ // No HTTP expectation should be queued for this invocation.
141+ client = await auth.attemptSignUp (
142+ strategy: Strategy .emailCode,
143+ emailAddress: emailAddress, // unchanged
144+ );
145+
146+ // State should remain in missing requirements; no extra PATCH occurred.
147+ expect (client.signUp? .status, Status .missingRequirements);
148+ });
149+ });
150+
151+ test ('updates SignUp when provided value changes' , () async {
152+ await runWithLogging (() async {
153+ expect (auth.user, null );
154+
155+ final firstEmail
= '$username [email protected] ' ;
156+ final secondEmail
= '$username [email protected] ' ;
157+
158+ // 1) Create initial sign up with first email
159+ httpService.expect (
160+ 'POST /v1/client/sign_ups strategy=email_code&email_address=$firstEmail ' ,
161+ 200 ,
162+ '{"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}}',
163+ );
164+
165+ Client client = await auth.attemptSignUp (
166+ strategy: Strategy .emailCode,
167+ emailAddress: firstEmail,
168+ );
169+ expect (client.signUp? .status, Status .missingRequirements);
170+
171+ // 2) Provide a different email -> should PATCH
172+ httpService.expect (
173+ 'PATCH /v1/client/sign_ups/SIGN_UP_ATTEMPT_ID strategy=email_code&email_address=$secondEmail ' ,
174+ 200 ,
175+ '{"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}}',
176+ );
177+
178+ client = await auth.attemptSignUp (
179+ strategy: Strategy .emailCode,
180+ emailAddress: secondEmail,
181+ );
182+
183+ // Still in missing requirements, but email reflected the change via PATCH
184+ expect (client.signUp? .status, Status .missingRequirements);
185+ expect (client.signUp? .emailAddress, secondEmail);
186+ });
187+ });
120188 });
121189}
0 commit comments