Fixed race condition bug in loading movie history when user has not yet fetched the movie details

This commit is contained in:
2023-11-25 12:40:07 -07:00
parent ba82c53942
commit d0ce98eb93
2 changed files with 64 additions and 14 deletions
+18 -14
View File
@@ -978,20 +978,24 @@ impl<'a, 'b> Network<'a, 'b> {
.await;
self
.handle_request::<(), Vec<MovieHistoryItem>>(request_props, |movie_history_vec, mut app| {
debug!("Assuming the movie_details_modal is already a Some and was created by the get_movie_details request");
let mut reversed_movie_history_vec = movie_history_vec.to_vec();
reversed_movie_history_vec.reverse();
app
.data
.radarr_data
.movie_details_modal
.as_mut()
.unwrap()
.movie_history
.set_items(reversed_movie_history_vec)
})
.await;
.handle_request::<(), Vec<MovieHistoryItem>>(request_props, |movie_history_vec, mut app| {
let mut reversed_movie_history_vec = movie_history_vec.to_vec();
reversed_movie_history_vec.reverse();
if app.data.radarr_data.movie_details_modal.is_none() {
app.data.radarr_data.movie_details_modal = Some(MovieDetailsModal::default())
}
app
.data
.radarr_data
.movie_details_modal
.as_mut()
.unwrap()
.movie_history
.set_items(reversed_movie_history_vec)
})
.await;
}
async fn get_movies(&mut self) {
+46
View File
@@ -876,6 +876,52 @@ mod test {
);
}
#[tokio::test]
async fn test_handle_get_movie_history_event_empty_movie_details_modal() {
let movie_history_item_json = json!([{
"sourceTitle": "Test",
"quality": { "quality": { "name": "HD - 1080p" }},
"languages": [ { "name": "English" } ],
"date": "2022-12-30T07:37:56Z",
"eventType": "grabbed"
}]);
let resource = format!("{}?movieId=1", RadarrEvent::GetMovieHistory.resource());
let (async_server, app_arc, _server) = mock_radarr_api(
RequestMethod::Get,
None,
Some(movie_history_item_json),
&resource,
)
.await;
app_arc
.lock()
.await
.data
.radarr_data
.movies
.set_items(vec![movie()]);
let mut network = Network::new(&app_arc, CancellationToken::new());
network
.handle_radarr_event(RadarrEvent::GetMovieHistory)
.await;
async_server.assert_async().await;
assert_eq!(
app_arc
.lock()
.await
.data
.radarr_data
.movie_details_modal
.as_ref()
.unwrap()
.movie_history
.items,
vec![movie_history_item()]
);
}
#[tokio::test]
async fn test_handle_get_collections_event() {
let collection_json = json!([{