@@ -179,6 +179,56 @@ def test_put_memory_rejects_missing_required_field_when_complete_onboarding(monk
179179 mock_persist .assert_not_called ()
180180
181181
182+ def test_put_memory_allows_missing_background_when_complete_onboarding (monkeypatch ):
183+ monkeypatch .setenv ("AUTH_REQUIRED" , "true" )
184+ event = {
185+ "httpMethod" : "PUT" ,
186+ "path" : "/memory" ,
187+ "headers" : {"Authorization" : "Bearer test-token" },
188+ "body" : json .dumps (
189+ {
190+ "first_name" : "Jane" ,
191+ "last_name" : "Doe" ,
192+ "nickname" : "J" ,
193+ "onboarding_goals" : ["curiosity" ],
194+ "discovery_source" : "search" ,
195+ "user_role" : "engineer" ,
196+ "complete_onboarding" : True ,
197+ }
198+ ),
199+ }
200+
201+ with patch ("lambda_handler._verify_firebase_token" ) as mock_verify , patch (
202+ "lambda_handler._persist_user_profile"
203+ ) as mock_persist , patch ("lambda_handler._load_saved_user_profile" ) as mock_load :
204+ mock_verify .return_value = {"uid" : "user-1" , "email" : "jane@example.com" }
205+ mock_load .side_effect = [
206+ {},
207+ {
208+ "first_name" : "Jane" ,
209+ "last_name" : "Doe" ,
210+ "nickname" : "J" ,
211+ "preferred_name" : "J" ,
212+ "onboarding_goals" : ["curiosity" ],
213+ "discovery_source" : "search" ,
214+ "user_role" : "engineer" ,
215+ "onboarding_version" : "v1" ,
216+ "onboarding_completed_at" : "2026-03-05T12:00:00" ,
217+ },
218+ ]
219+ response = handler (event , None )
220+
221+ assert response ["statusCode" ] == 200
222+ body = json .loads (response ["body" ])
223+ assert body ["success" ] is True
224+ assert body ["memory" ]["onboarding_version" ] == "v1"
225+ assert "onboarding_completed_at" in body ["memory" ]
226+
227+ mock_persist .assert_called_once ()
228+ persisted_payload = mock_persist .call_args .args [1 ]
229+ assert "background_level" not in persisted_payload
230+
231+
182232def test_put_memory_rejects_invalid_discovery_source (monkeypatch ):
183233 monkeypatch .setenv ("AUTH_REQUIRED" , "true" )
184234 event = {
0 commit comments