fix: Improved fault tolerance for search result tables and test all indexer results tables

This commit is contained in:
2026-01-07 14:58:32 -07:00
parent 64d8c65831
commit d3947d9e15
8 changed files with 145 additions and 16 deletions
@@ -362,20 +362,26 @@ impl Network<'_, '_> {
)
.await;
self
let result = self
.handle_request::<(), Vec<AddSeriesSearchResult>>(request_props, |series_vec, mut app| {
if series_vec.is_empty() {
app.pop_and_push_navigation_stack(ActiveSonarrBlock::AddSeriesEmptySearchResults.into());
} else if let Some(add_searched_seriess) = app.data.sonarr_data.add_searched_series.as_mut()
} else if let Some(add_searched_series) = app.data.sonarr_data.add_searched_series.as_mut()
{
add_searched_seriess.set_items(series_vec);
add_searched_series.set_items(series_vec);
} else {
let mut add_searched_seriess = StatefulTable::default();
add_searched_seriess.set_items(series_vec);
app.data.sonarr_data.add_searched_series = Some(add_searched_seriess);
let mut add_searched_series = StatefulTable::default();
add_searched_series.set_items(series_vec);
app.data.sonarr_data.add_searched_series = Some(add_searched_series);
}
})
.await
.await;
if result.is_err() {
self.app.lock().await.data.sonarr_data.add_searched_series = Some(StatefulTable::default());
}
result
}
pub(in crate::network::sonarr_network) async fn trigger_automatic_series_search(
@@ -943,6 +943,35 @@ mod tests {
);
}
#[tokio::test]
async fn test_handle_search_new_series_event_sets_empty_table_on_api_error() {
let (async_server, app, _server) = MockServarrApi::get()
.status(500)
.query("term=test%20term")
.build_for(SonarrEvent::SearchNewSeries("test term".into()))
.await;
app.lock().await.server_tabs.next();
let mut network = test_network(&app);
let result =
network
.handle_sonarr_event(SonarrEvent::SearchNewSeries("test term".into()))
.await;
async_server.assert_async().await;
assert_err!(result);
let app = app.lock().await;
assert_some!(
&app
.data
.sonarr_data
.add_searched_series
);
assert_is_empty!(
app.data.sonarr_data.add_searched_series.as_ref().unwrap()
);
}
#[tokio::test]
async fn test_handle_trigger_automatic_series_search_event() {
let (async_server, app, _server) = MockServarrApi::post()