@@ -352,6 +352,115 @@ def test_creates_app_json_rejects_invalid_directory(logged_in_cli: None) -> None
352352 assert result .stderr == ""
353353
354354
355+ @pytest .mark .respx
356+ def test_updates_app_directory_as_json (
357+ logged_in_cli : None ,
358+ respx_mock : respx .MockRouter ,
359+ ) -> None :
360+ app_id = "00000000-0000-4000-8000-000000000002"
361+ app_data = {
362+ "id" : app_id ,
363+ "team_id" : "00000000-0000-4000-8000-000000000001" ,
364+ "slug" : "api" ,
365+ "name" : "API" ,
366+ "directory" : "backend" ,
367+ }
368+ respx_mock .patch (
369+ f"/apps/{ app_id } " ,
370+ json = {"directory" : "backend" },
371+ ).mock (return_value = Response (200 , json = app_data ))
372+
373+ result = runner .invoke (
374+ app ,
375+ [
376+ "apps" ,
377+ "update" ,
378+ app_id ,
379+ "--directory" ,
380+ "backend" ,
381+ "--json" ,
382+ ],
383+ )
384+
385+ assert result .exit_code == 0
386+ assert json .loads (result .stdout ) == {"data" : {"app" : app_data }}
387+ assert result .stderr == ""
388+
389+
390+ @pytest .mark .respx
391+ def test_updates_linked_app_directory_in_human_output (
392+ logged_in_cli : None ,
393+ respx_mock : respx .MockRouter ,
394+ configured_app : ConfiguredApp ,
395+ ) -> None :
396+ app_data = {
397+ "id" : configured_app .app_id ,
398+ "team_id" : configured_app .team_id ,
399+ "slug" : "api" ,
400+ "name" : "API" ,
401+ "directory" : "src" ,
402+ }
403+ respx_mock .patch (
404+ f"/apps/{ configured_app .app_id } " ,
405+ json = {"directory" : "src" },
406+ ).mock (return_value = Response (200 , json = app_data ))
407+
408+ with changing_dir (configured_app .path ):
409+ result = runner .invoke (app , ["apps" , "update" , "--directory" , "src" ])
410+
411+ assert result .exit_code == 0
412+ assert "Updated app API" in result .output
413+ assert "Directory: src" in result .output
414+
415+
416+ def test_updates_app_json_returns_missing_required_input_without_update_flags (
417+ logged_in_cli : None ,
418+ ) -> None :
419+ result = runner .invoke (
420+ app ,
421+ [
422+ "apps" ,
423+ "update" ,
424+ "00000000-0000-4000-8000-000000000002" ,
425+ "--json" ,
426+ ],
427+ )
428+
429+ assert result .exit_code == 1
430+ assert json .loads (result .stdout ) == {
431+ "error" : {
432+ "code" : "missing_required_input" ,
433+ "message" : "No updates provided." ,
434+ "hint" : "Pass --directory to update the app directory." ,
435+ }
436+ }
437+ assert result .stderr == ""
438+
439+
440+ def test_updates_app_json_rejects_invalid_directory (logged_in_cli : None ) -> None :
441+ result = runner .invoke (
442+ app ,
443+ [
444+ "apps" ,
445+ "update" ,
446+ "00000000-0000-4000-8000-000000000002" ,
447+ "--directory" ,
448+ "/tmp/api" ,
449+ "--json" ,
450+ ],
451+ )
452+
453+ assert result .exit_code == 1
454+ assert json .loads (result .stdout ) == {
455+ "error" : {
456+ "code" : "invalid_input" ,
457+ "message" : ("Invalid app directory: must be a relative path, not absolute" ),
458+ "hint" : "Pass a relative app directory such as `src` or `backend`." ,
459+ }
460+ }
461+ assert result .stderr == ""
462+
463+
355464@pytest .mark .respx
356465def test_links_existing_app_to_path_as_json (
357466 logged_in_cli : None ,
0 commit comments