Fixed race condition bug in loading movie history when user has not yet fetched the movie details
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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!([{
|
||||
|
||||
Reference in New Issue
Block a user