@@ -360,6 +360,27 @@ def test_dev_build_ahead_of_release_reports_newer_noop(
360360 assert "Already on latest release or newer: 0.7.7.dev0" in strip_ansi (result .output )
361361 assert mock_run .call_count == 0
362362
363+ def test_unparseable_current_version_does_not_false_noop (
364+ self , uv_tool_argv0 , clean_environ
365+ ):
366+ with patch ("specify_cli.urllib.request.urlopen" ) as mock_urlopen , patch (
367+ "specify_cli.subprocess.run"
368+ ) as mock_run , patch (
369+ "specify_cli.shutil.which" , return_value = "/usr/bin/uv"
370+ ), patch ("specify_cli._get_installed_version" , return_value = "release-main" ):
371+ mock_urlopen .return_value = _mock_urlopen_response ({"tag_name" : "v0.7.6" })
372+ mock_run .side_effect = [
373+ _completed_process (0 ),
374+ _completed_process (0 , stdout = "specify 0.7.6\n " ),
375+ ]
376+ result = runner .invoke (app , ["self" , "upgrade" ])
377+
378+ assert result .exit_code == 0
379+ out = strip_ansi (result .output )
380+ assert "Already on latest release" not in out
381+ assert "Upgrading specify-cli release-main → v0.7.6 via uv tool:" in out
382+ assert mock_run .call_count == 2
383+
363384 def test_pinned_older_tag_still_runs_installer (
364385 self , uv_tool_argv0 , clean_environ
365386 ):
0 commit comments