Fixed a small bug with sorting the main library table. On refreshes it would reset the data and because of stable sorts, the data would change. Fixed by pre-sorting everything by ID as it is naturally when coming from Radarr prior to any subsequent sorts.
This commit is contained in:
@@ -685,6 +685,7 @@ mod tests {
|
|||||||
app.push_navigation_stack(ActiveRadarrBlock::MoviesSortPrompt.into());
|
app.push_navigation_stack(ActiveRadarrBlock::MoviesSortPrompt.into());
|
||||||
|
|
||||||
let mut expected_vec = movies_vec();
|
let mut expected_vec = movies_vec();
|
||||||
|
expected_vec.sort_by(|a, b| a.id.cmp(&b.id));
|
||||||
expected_vec.reverse();
|
expected_vec.reverse();
|
||||||
|
|
||||||
LibraryHandler::with(
|
LibraryHandler::with(
|
||||||
@@ -1299,6 +1300,7 @@ mod tests {
|
|||||||
fn movies_vec() -> Vec<Movie> {
|
fn movies_vec() -> Vec<Movie> {
|
||||||
vec![
|
vec![
|
||||||
Movie {
|
Movie {
|
||||||
|
id: 3,
|
||||||
title: "test 1".into(),
|
title: "test 1".into(),
|
||||||
original_language: Language {
|
original_language: Language {
|
||||||
name: "English".to_owned(),
|
name: "English".to_owned(),
|
||||||
@@ -1314,6 +1316,7 @@ mod tests {
|
|||||||
..Movie::default()
|
..Movie::default()
|
||||||
},
|
},
|
||||||
Movie {
|
Movie {
|
||||||
|
id: 2,
|
||||||
title: "test 2".into(),
|
title: "test 2".into(),
|
||||||
original_language: Language {
|
original_language: Language {
|
||||||
name: "Chinese".to_owned(),
|
name: "Chinese".to_owned(),
|
||||||
@@ -1329,6 +1332,7 @@ mod tests {
|
|||||||
..Movie::default()
|
..Movie::default()
|
||||||
},
|
},
|
||||||
Movie {
|
Movie {
|
||||||
|
id: 1,
|
||||||
title: "test 3".into(),
|
title: "test 3".into(),
|
||||||
original_language: Language {
|
original_language: Language {
|
||||||
name: "Japanese".to_owned(),
|
name: "Japanese".to_owned(),
|
||||||
@@ -1350,10 +1354,10 @@ mod tests {
|
|||||||
vec![SortOption {
|
vec![SortOption {
|
||||||
name: "Test 1",
|
name: "Test 1",
|
||||||
cmp_fn: Some(|a, b| {
|
cmp_fn: Some(|a, b| {
|
||||||
a.title
|
b.title
|
||||||
.text
|
.text
|
||||||
.to_lowercase()
|
.to_lowercase()
|
||||||
.cmp(&b.title.text.to_lowercase())
|
.cmp(&a.title.text.to_lowercase())
|
||||||
}),
|
}),
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -267,6 +267,13 @@ impl<'a, 'b> KeyEventHandler<'a, 'b, ActiveRadarrBlock> for LibraryHandler<'a, '
|
|||||||
self.app.pop_navigation_stack();
|
self.app.pop_navigation_stack();
|
||||||
}
|
}
|
||||||
ActiveRadarrBlock::MoviesSortPrompt => {
|
ActiveRadarrBlock::MoviesSortPrompt => {
|
||||||
|
self
|
||||||
|
.app
|
||||||
|
.data
|
||||||
|
.radarr_data
|
||||||
|
.movies
|
||||||
|
.items
|
||||||
|
.sort_by(|a, b| a.id.cmp(&b.id));
|
||||||
self.app.data.radarr_data.movies.apply_sorting();
|
self.app.data.radarr_data.movies.apply_sorting();
|
||||||
|
|
||||||
self.app.pop_navigation_stack();
|
self.app.pop_navigation_stack();
|
||||||
|
|||||||
@@ -1190,7 +1190,8 @@ impl<'a, 'b> Network<'a, 'b> {
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
self
|
self
|
||||||
.handle_request::<(), Vec<Movie>>(request_props, |movie_vec, mut app| {
|
.handle_request::<(), Vec<Movie>>(request_props, |mut movie_vec, mut app| {
|
||||||
|
movie_vec.sort_by(|a, b| a.id.cmp(&b.id));
|
||||||
app.data.radarr_data.movies.set_items(movie_vec);
|
app.data.radarr_data.movies.set_items(movie_vec);
|
||||||
app.data.radarr_data.movies.apply_sorting_toggle(false);
|
app.data.radarr_data.movies.apply_sorting_toggle(false);
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ mod test {
|
|||||||
Quality, QualityWrapper, Rating, RatingsList,
|
Quality, QualityWrapper, Rating, RatingsList,
|
||||||
};
|
};
|
||||||
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
|
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
|
||||||
|
use crate::models::stateful_table::SortOption;
|
||||||
use crate::models::HorizontallyScrollableText;
|
use crate::models::HorizontallyScrollableText;
|
||||||
use crate::App;
|
use crate::App;
|
||||||
|
|
||||||
@@ -293,15 +294,49 @@ mod test {
|
|||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_handle_get_movies_event() {
|
async fn test_handle_get_movies_event() {
|
||||||
|
let mut movie_1: Value = serde_json::from_str(MOVIE_JSON).unwrap();
|
||||||
|
let mut movie_2: Value = serde_json::from_str(MOVIE_JSON).unwrap();
|
||||||
|
*movie_1.get_mut("id").unwrap() = json!(1);
|
||||||
|
*movie_1.get_mut("title").unwrap() = json!("z test");
|
||||||
|
*movie_2.get_mut("id").unwrap() = json!(2);
|
||||||
|
*movie_2.get_mut("title").unwrap() = json!("A test");
|
||||||
|
let expected_movies = vec![
|
||||||
|
Movie {
|
||||||
|
id: 2,
|
||||||
|
title: "A test".into(),
|
||||||
|
..movie()
|
||||||
|
},
|
||||||
|
Movie {
|
||||||
|
id: 1,
|
||||||
|
title: "z test".into(),
|
||||||
|
..movie()
|
||||||
|
},
|
||||||
|
];
|
||||||
let (async_server, app_arc, _server) = mock_radarr_api(
|
let (async_server, app_arc, _server) = mock_radarr_api(
|
||||||
RequestMethod::Get,
|
RequestMethod::Get,
|
||||||
None,
|
None,
|
||||||
Some(serde_json::from_str(format!("[ {MOVIE_JSON} ]").as_str()).unwrap()),
|
Some(json!([movie_1, movie_2])),
|
||||||
None,
|
None,
|
||||||
RadarrEvent::GetMovies.resource(),
|
RadarrEvent::GetMovies.resource(),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
app_arc.lock().await.data.radarr_data.movies.sort_asc = true;
|
app_arc.lock().await.data.radarr_data.movies.sort_asc = true;
|
||||||
|
let title_sort_option = SortOption {
|
||||||
|
name: "Title",
|
||||||
|
cmp_fn: Some(|a: &Movie, b: &Movie| {
|
||||||
|
a.title
|
||||||
|
.text
|
||||||
|
.to_lowercase()
|
||||||
|
.cmp(&b.title.text.to_lowercase())
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
app_arc
|
||||||
|
.lock()
|
||||||
|
.await
|
||||||
|
.data
|
||||||
|
.radarr_data
|
||||||
|
.movies
|
||||||
|
.sorting(vec![title_sort_option]);
|
||||||
let mut network = Network::new(&app_arc, CancellationToken::new());
|
let mut network = Network::new(&app_arc, CancellationToken::new());
|
||||||
|
|
||||||
network.handle_radarr_event(RadarrEvent::GetMovies).await;
|
network.handle_radarr_event(RadarrEvent::GetMovies).await;
|
||||||
@@ -309,7 +344,7 @@ mod test {
|
|||||||
async_server.assert_async().await;
|
async_server.assert_async().await;
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
app_arc.lock().await.data.radarr_data.movies.items,
|
app_arc.lock().await.data.radarr_data.movies.items,
|
||||||
vec![movie()]
|
expected_movies
|
||||||
);
|
);
|
||||||
assert!(app_arc.lock().await.data.radarr_data.movies.sort_asc);
|
assert!(app_arc.lock().await.data.radarr_data.movies.sort_asc);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user