fix: keep pull request filters session-local

This commit is contained in:
Valdemar Lorenzen
2026-10-21 13:56:24 +02:00
parent fbcb519e13
commit ea7c240eb6
9 changed files with 86 additions and 53 deletions
+29 -29
View File
@@ -3838,7 +3838,7 @@ fn async_responses_edit_only_current_bound_working_after_and_refresh_projection(
}
#[test]
fn applied_pull_request_preferences_survive_startup_without_config() {
fn applied_pull_request_filters_survive_picker_reopen_but_not_restart() {
use crate::pull_requests::ReviewFilter;
let fixture = Fixture::new();
let path = fixture.0.join("state/pull_requests.json");
@@ -3864,13 +3864,31 @@ fn applied_pull_request_preferences_survive_startup_without_config() {
session.handle(Input::Char(' '));
assert!(!path.exists());
session.handle(Input::Enter);
assert!(path.exists());
assert!(!path.exists());
assert!(!session.editor.pull_request_preferences_changed);
assert_eq!(
session.editor.pull_request_preferences.filters,
[ReviewFilter::Other]
);
session.handle(Input::Escape);
session.editor.execute("pull_requests");
assert!(session.editor.take_diff_request().is_some());
session.handle(Input::Ctrl('f'));
session.handle(Input::Enter);
assert_eq!(
session.editor.pull_request_preferences.filters,
[ReviewFilter::Other]
);
// A sort edit still persists, without carrying the active filter to disk.
session.handle(Input::Ctrl('s'));
session.handle(Input::Char('1'));
session.handle(Input::Enter);
assert!(path.exists());
let reopened =
EditorSession::open_with_preferences_path(None, vec![], None, Some(Ok(path))).unwrap();
assert_eq!(
reopened.editor.pull_request_preferences.filters,
[ReviewFilter::Other]
crate::pull_requests::Preferences::default().filters
);
assert_eq!(reopened.editor.pull_request_configured, [false, false]);
}
@@ -3897,7 +3915,7 @@ fn configured_pull_request_sections_replace_only_their_persisted_section() {
"config.pull_request_sort = {}",
Preferences {
sort: Default::default(),
filters: preferences.filters.clone(),
filters: Preferences::default().filters,
},
[true, false],
),
@@ -3920,7 +3938,7 @@ fn configured_pull_request_sections_replace_only_their_persisted_section() {
},
)]
.into(),
filters: preferences.filters.clone(),
filters: Preferences::default().filters,
},
[true, false],
),
@@ -3952,19 +3970,10 @@ fn corrupt_pull_request_storage_warns_and_apply_remains_session_only() {
assert!(session.editor.message().contains("session-only"));
session.editor.execute("pull_requests");
assert!(session.editor.take_diff_request().is_some());
session.handle(Input::Ctrl('f'));
for input in [
Input::Char(' '),
Input::Down,
Input::Char(' '),
Input::Down,
Input::Char(' '),
Input::Enter,
] {
session.handle(input);
}
session.handle(Input::Ctrl('s'));
session.handle(Input::Char('1'));
session.handle(Input::Enter);
assert!(session.editor.message().contains("preserved"));
assert!(session.editor.pull_request_preferences.filters.is_empty());
assert_eq!(fs::read_to_string(path).unwrap(), "preserve invalid bytes");
}
@@ -3978,19 +3987,10 @@ fn failed_pull_request_save_keeps_applied_session_preferences_and_reports_failur
fs::write(&parent, "do not replace").unwrap();
session.editor.execute("pull_requests");
assert!(session.editor.take_diff_request().is_some());
session.handle(Input::Ctrl('f'));
for input in [
Input::Char(' '),
Input::Down,
Input::Char(' '),
Input::Down,
Input::Char(' '),
Input::Enter,
] {
session.handle(input);
}
session.handle(Input::Ctrl('s'));
session.handle(Input::Char('1'));
session.handle(Input::Enter);
assert!(session.editor.message().contains("session-only"));
assert!(session.editor.pull_request_preferences.filters.is_empty());
assert!(!session.editor.pull_request_preferences_changed);
assert_eq!(fs::read_to_string(parent).unwrap(), "do not replace");
}