diff --git a/src/app/mod.rs b/src/app/mod.rs index 36b00033..11a034f9 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -1383,6 +1383,23 @@ mod tests { let _ = std::fs::remove_dir_all(path.parent().unwrap()); } + #[test] + fn startup_does_not_restore_update_available_from_older_saved_notes() { + let _guard = config_env_lock().lock().unwrap(); + let path = temp_config_path("startup-stale-update-notes"); + std::env::set_var(crate::config::CONFIG_PATH_ENV_VAR, &path); + + crate::release_notes::save_pending("0.4.9", "### Changed\n- One").unwrap(); + + let app = test_app(); + + assert_eq!(app.state.update_available, None); + assert!(app.state.latest_release_notes_available); + + std::env::remove_var(crate::config::CONFIG_PATH_ENV_VAR); + let _ = std::fs::remove_dir_all(path.parent().unwrap()); + } + #[test] fn reload_keybinds_updates_live_state() { let _guard = config_env_lock().lock().unwrap(); diff --git a/src/release_notes.rs b/src/release_notes.rs index 7d83dd15..dd09aaf8 100644 --- a/src/release_notes.rs +++ b/src/release_notes.rs @@ -100,8 +100,16 @@ fn release_notes_from_stored( return None; } + let preview = match ( + crate::update::Version::parse(&stored.version), + crate::update::Version::parse(current_version), + ) { + (Some(stored_version), Some(current_version)) => stored_version > current_version, + _ => false, + }; + Some(ReleaseNotes { - preview: stored.version != current_version, + preview, version: stored.version, body, }) @@ -213,6 +221,24 @@ mod tests { clear_pending_at(&path).unwrap(); } + #[test] + fn load_latest_does_not_mark_older_saved_version_as_preview() { + let path = std::env::temp_dir().join(format!( + "herdr-release-notes-{}-{}.json", + std::process::id(), + "stale" + )); + let _ = clear_pending_at(&path); + save_pending_to_path(&path, "0.3.0", "### Changed\n- One").unwrap(); + + let notes = load_latest_from_path(&path, "0.3.1").expect("latest notes"); + assert_eq!(notes.version, "0.3.0"); + assert_eq!(notes.body, "### Changed\n- One"); + assert!(!notes.preview); + + clear_pending_at(&path).unwrap(); + } + #[test] fn marking_current_version_seen_preserves_latest_notes_without_startup_modal() { let path = std::env::temp_dir().join(format!(