diff --git a/crates/tui/src/tui/ui.rs b/crates/tui/src/tui/ui.rs index 20f62652..8ce5e01d 100644 --- a/crates/tui/src/tui/ui.rs +++ b/crates/tui/src/tui/ui.rs @@ -8393,10 +8393,7 @@ fn release_has_uploaded_asset(json: &serde_json::Value, required: &str) -> bool }; assets.iter().any(|asset| { asset.get("name").and_then(serde_json::Value::as_str) == Some(required) - && matches!( - asset.get("state").and_then(serde_json::Value::as_str), - None | Some("uploaded") - ) + && asset.get("state").and_then(serde_json::Value::as_str) == Some("uploaded") }) } diff --git a/crates/tui/src/tui/ui/tests.rs b/crates/tui/src/tui/ui/tests.rs index d70bb848..466bffce 100644 --- a/crates/tui/src/tui/ui/tests.rs +++ b/crates/tui/src/tui/ui/tests.rs @@ -2470,6 +2470,23 @@ fn version_hint_requires_complete_release_assets() { version_hint_from_release_json(&missing_manifest, "0.8.46").is_none(), "do not advertise a release before checksums are uploaded" ); + + let mut pending_asset = complete_release_json("v0.8.47"); + pending_asset["assets"].as_array_mut().expect("assets")[0]["state"] = serde_json::json!("open"); + assert!( + version_hint_from_release_json(&pending_asset, "0.8.46").is_none(), + "do not advertise a release before every asset is uploaded" + ); + + let mut missing_state = complete_release_json("v0.8.47"); + missing_state["assets"].as_array_mut().expect("assets")[0] + .as_object_mut() + .expect("asset object") + .remove("state"); + assert!( + version_hint_from_release_json(&missing_state, "0.8.46").is_none(), + "do not accept malformed asset state as uploaded" + ); } #[test]