Added 'Test All Indexers' table and functionality to the Indexers tab, and upgraded to Ratatui 0.24.0 and cleaned up code for newer Ratatui version
This commit is contained in:
+4
-1
@@ -59,6 +59,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
B: Serialize + Default + Debug,
|
||||
R: DeserializeOwned,
|
||||
{
|
||||
let ignore_status_code = request_props.ignore_status_code;
|
||||
let method = request_props.method;
|
||||
let request_uri = request_props.uri.clone();
|
||||
select! {
|
||||
@@ -71,7 +72,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
resp = self.call_api(request_props).await.send() => {
|
||||
match resp {
|
||||
Ok(response) => {
|
||||
if response.status().is_success() {
|
||||
if response.status().is_success() || ignore_status_code {
|
||||
match method {
|
||||
RequestMethod::Get | RequestMethod::Post => {
|
||||
match utils::parse_response::<R>(response).await {
|
||||
@@ -125,6 +126,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
method,
|
||||
body,
|
||||
api_token,
|
||||
..
|
||||
} = request_props;
|
||||
debug!("Creating RequestBuilder for resource: {uri:?}");
|
||||
debug!("Sending {method:?} request to {uri} with body {body:?}");
|
||||
@@ -160,4 +162,5 @@ pub struct RequestProps<T: Serialize + Debug> {
|
||||
pub method: RequestMethod,
|
||||
pub body: Option<T>,
|
||||
pub api_token: String,
|
||||
pub ignore_status_code: bool,
|
||||
}
|
||||
|
||||
@@ -74,6 +74,7 @@ mod tests {
|
||||
value: "Test".to_owned(),
|
||||
}),
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
},
|
||||
|_, _| (),
|
||||
)
|
||||
@@ -97,6 +98,7 @@ mod tests {
|
||||
method: request_method,
|
||||
body: None,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
},
|
||||
|response, mut app| app.error = HorizontallyScrollableText::from(response.value),
|
||||
)
|
||||
@@ -106,6 +108,32 @@ mod tests {
|
||||
assert_str_eq!(app_arc.lock().await.error.text, "Test");
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
#[tokio::test]
|
||||
async fn test_handle_request_with_response_body_ignore_error_code(
|
||||
#[values(RequestMethod::Get, RequestMethod::Post)] request_method: RequestMethod,
|
||||
) {
|
||||
let (async_server, app_arc, server) = mock_api(request_method, 400, true).await;
|
||||
let mut network = Network::new(&app_arc, CancellationToken::new());
|
||||
let mut test_result = String::default();
|
||||
|
||||
network
|
||||
.handle_request::<(), Test>(
|
||||
RequestProps {
|
||||
uri: format!("{}/test", server.url()),
|
||||
method: request_method,
|
||||
body: None,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: true,
|
||||
},
|
||||
|response, _app| test_result = response.value,
|
||||
)
|
||||
.await;
|
||||
|
||||
async_server.assert_async().await;
|
||||
assert!(app_arc.lock().await.error.text.is_empty());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_request_request_is_cancelled() {
|
||||
let (async_server, _, server) = mock_api(RequestMethod::Get, 200, true).await;
|
||||
@@ -127,6 +155,7 @@ mod tests {
|
||||
method: RequestMethod::Get,
|
||||
body: None,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
},
|
||||
|_, _| (),
|
||||
)
|
||||
@@ -157,6 +186,7 @@ mod tests {
|
||||
method: RequestMethod::Get,
|
||||
body: None,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
},
|
||||
|response, mut app| app.error = HorizontallyScrollableText::from(response.value),
|
||||
)
|
||||
@@ -183,6 +213,7 @@ mod tests {
|
||||
method: RequestMethod::Get,
|
||||
body: None,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
},
|
||||
|response, mut app| app.error = HorizontallyScrollableText::from(response.value),
|
||||
)
|
||||
@@ -217,6 +248,7 @@ mod tests {
|
||||
method: request_method,
|
||||
body: None,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
},
|
||||
|response, mut app| app.error = HorizontallyScrollableText::from(response.value),
|
||||
)
|
||||
@@ -241,6 +273,7 @@ mod tests {
|
||||
method: RequestMethod::Post,
|
||||
body: None,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
},
|
||||
|response, mut app| app.error = HorizontallyScrollableText::from(response.value),
|
||||
)
|
||||
@@ -292,6 +325,7 @@ mod tests {
|
||||
method: request_method,
|
||||
body,
|
||||
api_token: "test1234".to_owned(),
|
||||
ignore_status_code: false,
|
||||
})
|
||||
.await
|
||||
.send()
|
||||
|
||||
@@ -11,11 +11,12 @@ use crate::app::RadarrConfig;
|
||||
use crate::models::radarr_models::{
|
||||
AddMovieBody, AddMovieSearchResult, AddOptions, AddRootFolderBody, Collection, CollectionMovie,
|
||||
CommandBody, Credit, CreditType, DiskSpace, DownloadRecord, DownloadsResponse, Indexer,
|
||||
IndexerSettings, LogResponse, Movie, MovieCommandBody, MovieHistoryItem, QualityProfile,
|
||||
QueueEvent, Release, ReleaseDownloadBody, RootFolder, SystemStatus, Tag, Task, Update,
|
||||
IndexerSettings, IndexerTestResult, LogResponse, Movie, MovieCommandBody, MovieHistoryItem,
|
||||
QualityProfile, QueueEvent, Release, ReleaseDownloadBody, RootFolder, SystemStatus, Tag, Task,
|
||||
Update,
|
||||
};
|
||||
use crate::models::servarr_data::radarr::modals::{
|
||||
AddMovieModal, EditCollectionModal, EditMovieModal, MovieDetailsModal,
|
||||
AddMovieModal, EditCollectionModal, EditMovieModal, IndexerTestResultModalItem, MovieDetailsModal,
|
||||
};
|
||||
use crate::models::servarr_data::radarr::radarr_data::ActiveRadarrBlock;
|
||||
use crate::models::{HorizontallyScrollableText, Route, Scrollable, ScrollableText, StatefulTable};
|
||||
@@ -58,6 +59,7 @@ pub enum RadarrEvent {
|
||||
HealthCheck,
|
||||
SearchNewMovie,
|
||||
StartTask,
|
||||
TestAllIndexers,
|
||||
TriggerAutomaticSearch,
|
||||
UpdateAllMovies,
|
||||
UpdateAndScan,
|
||||
@@ -92,6 +94,7 @@ impl RadarrEvent {
|
||||
RadarrEvent::GetTags => "/tag",
|
||||
RadarrEvent::GetTasks => "/system/task",
|
||||
RadarrEvent::GetUpdates => "/update",
|
||||
RadarrEvent::TestAllIndexers => "/indexer/testall",
|
||||
RadarrEvent::StartTask
|
||||
| RadarrEvent::GetQueuedEvents
|
||||
| RadarrEvent::TriggerAutomaticSearch
|
||||
@@ -143,6 +146,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
RadarrEvent::HealthCheck => self.get_healthcheck().await,
|
||||
RadarrEvent::SearchNewMovie => self.search_movie().await,
|
||||
RadarrEvent::StartTask => self.start_task().await,
|
||||
RadarrEvent::TestAllIndexers => self.test_all_indexers().await,
|
||||
RadarrEvent::TriggerAutomaticSearch => self.trigger_automatic_search().await,
|
||||
RadarrEvent::UpdateAllMovies => self.update_all_movies().await,
|
||||
RadarrEvent::UpdateAndScan => self.update_and_scan().await,
|
||||
@@ -1320,6 +1324,56 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
.await;
|
||||
}
|
||||
|
||||
async fn test_all_indexers(&mut self) {
|
||||
info!("Testing all indexers");
|
||||
|
||||
let mut request_props = self
|
||||
.radarr_request_props_from(
|
||||
RadarrEvent::TestAllIndexers.resource(),
|
||||
RequestMethod::Post,
|
||||
None,
|
||||
)
|
||||
.await;
|
||||
request_props.ignore_status_code = true;
|
||||
|
||||
self
|
||||
.handle_request::<(), Vec<IndexerTestResult>>(request_props, |test_results, mut app| {
|
||||
let mut test_all_indexer_results = StatefulTable::default();
|
||||
let indexers = app.data.radarr_data.indexers.items.clone();
|
||||
let modal_test_results = test_results
|
||||
.iter()
|
||||
.map(|result| {
|
||||
let name = indexers
|
||||
.iter()
|
||||
.filter(|&indexer| indexer.id == result.id)
|
||||
.map(|indexer| indexer.name.clone())
|
||||
.nth(0)
|
||||
.unwrap_or_default();
|
||||
let validation_failures = result
|
||||
.validation_failures
|
||||
.iter()
|
||||
.map(|failure| {
|
||||
format!(
|
||||
"Failure for field '{}': {}",
|
||||
failure.property_name, failure.error_message
|
||||
)
|
||||
})
|
||||
.collect::<Vec<String>>()
|
||||
.join(", ");
|
||||
|
||||
IndexerTestResultModalItem {
|
||||
name: name.unwrap_or_default(),
|
||||
is_valid: result.is_valid,
|
||||
validation_failures: validation_failures.into(),
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
test_all_indexer_results.set_items(modal_test_results);
|
||||
app.data.radarr_data.indexer_test_all_results = Some(test_all_indexer_results);
|
||||
})
|
||||
.await;
|
||||
}
|
||||
|
||||
async fn trigger_automatic_search(&mut self) {
|
||||
let (movie_id, tmdb_id) = self.extract_movie_id().await;
|
||||
info!("Searching indexers for movie with TMDB id {tmdb_id} and with Radarr id: {movie_id}");
|
||||
@@ -1470,6 +1524,7 @@ impl<'a, 'b> Network<'a, 'b> {
|
||||
method,
|
||||
body,
|
||||
api_token: api_token.to_owned(),
|
||||
ignore_status_code: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -110,6 +110,7 @@ mod test {
|
||||
fn test_resource_movie(
|
||||
#[values(
|
||||
RadarrEvent::AddMovie,
|
||||
RadarrEvent::EditMovie,
|
||||
RadarrEvent::GetMovies,
|
||||
RadarrEvent::GetMovieDetails,
|
||||
RadarrEvent::DeleteMovie
|
||||
@@ -119,6 +120,40 @@ mod test {
|
||||
assert_str_eq!(event.resource(), "/movie");
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_resource_collection(
|
||||
#[values(RadarrEvent::GetCollections, RadarrEvent::EditCollection)] event: RadarrEvent,
|
||||
) {
|
||||
assert_str_eq!(event.resource(), "/collection");
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_resource_indexer(
|
||||
#[values(RadarrEvent::GetIndexers, RadarrEvent::DeleteIndexer)] event: RadarrEvent,
|
||||
) {
|
||||
assert_str_eq!(event.resource(), "/indexer");
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_resource_indexer_settings(
|
||||
#[values(RadarrEvent::GetIndexerSettings, RadarrEvent::UpdateIndexerSettings)]
|
||||
event: RadarrEvent,
|
||||
) {
|
||||
assert_str_eq!(event.resource(), "/config/indexer");
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_resource_root_folder(
|
||||
#[values(
|
||||
RadarrEvent::AddRootFolder,
|
||||
RadarrEvent::GetRootFolders,
|
||||
RadarrEvent::DeleteRootFolder
|
||||
)]
|
||||
event: RadarrEvent,
|
||||
) {
|
||||
assert_str_eq!(event.resource(), "/rootfolder");
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_resource_release(
|
||||
#[values(RadarrEvent::GetReleases, RadarrEvent::DownloadRelease)] event: RadarrEvent,
|
||||
@@ -136,6 +171,8 @@ mod test {
|
||||
#[rstest]
|
||||
fn test_resource_command(
|
||||
#[values(
|
||||
RadarrEvent::StartTask,
|
||||
RadarrEvent::GetQueuedEvents,
|
||||
RadarrEvent::TriggerAutomaticSearch,
|
||||
RadarrEvent::UpdateAndScan,
|
||||
RadarrEvent::UpdateAllMovies,
|
||||
@@ -148,34 +185,20 @@ mod test {
|
||||
}
|
||||
|
||||
#[rstest]
|
||||
fn test_resource(
|
||||
#[values(
|
||||
RadarrEvent::GetCollections,
|
||||
RadarrEvent::SearchNewMovie,
|
||||
RadarrEvent::GetMovieCredits,
|
||||
RadarrEvent::GetMovieHistory,
|
||||
RadarrEvent::GetOverview,
|
||||
RadarrEvent::GetQualityProfiles,
|
||||
RadarrEvent::GetRootFolders,
|
||||
RadarrEvent::GetStatus,
|
||||
RadarrEvent::HealthCheck
|
||||
)]
|
||||
event: RadarrEvent,
|
||||
) {
|
||||
let expected_resource = match event {
|
||||
RadarrEvent::GetCollections => "/collection",
|
||||
RadarrEvent::SearchNewMovie => "/movie/lookup",
|
||||
RadarrEvent::GetMovieCredits => "/credit",
|
||||
RadarrEvent::GetMovieHistory => "/history/movie",
|
||||
RadarrEvent::GetOverview => "/diskspace",
|
||||
RadarrEvent::GetQualityProfiles => "/qualityprofile",
|
||||
RadarrEvent::GetRootFolders => "/rootfolder",
|
||||
RadarrEvent::GetStatus => "/system/status",
|
||||
RadarrEvent::HealthCheck => "/health",
|
||||
_ => "",
|
||||
};
|
||||
|
||||
assert_str_eq!(event.resource(), expected_resource);
|
||||
#[case(RadarrEvent::GetLogs, "/log")]
|
||||
#[case(RadarrEvent::SearchNewMovie, "/movie/lookup")]
|
||||
#[case(RadarrEvent::GetMovieCredits, "/credit")]
|
||||
#[case(RadarrEvent::GetMovieHistory, "/history/movie")]
|
||||
#[case(RadarrEvent::GetOverview, "/diskspace")]
|
||||
#[case(RadarrEvent::GetQualityProfiles, "/qualityprofile")]
|
||||
#[case(RadarrEvent::GetStatus, "/system/status")]
|
||||
#[case(RadarrEvent::GetTags, "/tag")]
|
||||
#[case(RadarrEvent::GetTasks, "/system/task")]
|
||||
#[case(RadarrEvent::GetUpdates, "/update")]
|
||||
#[case(RadarrEvent::TestAllIndexers, "/indexer/testall")]
|
||||
#[case(RadarrEvent::HealthCheck, "/health")]
|
||||
fn test_resource(#[case] event: RadarrEvent, #[case] expected_uri: String) {
|
||||
assert_str_eq!(event.resource(), expected_uri);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -192,6 +215,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::HealthCheck.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -217,6 +241,7 @@ mod test {
|
||||
"totalSpace": 4444
|
||||
}
|
||||
])),
|
||||
None,
|
||||
RadarrEvent::GetOverview.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -249,6 +274,7 @@ mod test {
|
||||
"version": "v1",
|
||||
"startTime": "2023-02-25T20:16:43Z"
|
||||
})),
|
||||
None,
|
||||
RadarrEvent::GetStatus.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -271,6 +297,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(serde_json::from_str(format!("[ {MOVIE_JSON} ]").as_str()).unwrap()),
|
||||
None,
|
||||
RadarrEvent::GetMovies.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -303,8 +330,14 @@ mod test {
|
||||
"quality": { "quality": { "name": "HD - 1080p" }}
|
||||
}]);
|
||||
let resource = format!("{}?movieId=1", RadarrEvent::GetReleases.resource());
|
||||
let (async_server, app_arc, _server) =
|
||||
mock_radarr_api(RequestMethod::Get, None, Some(release_json), &resource).await;
|
||||
let (async_server, app_arc, _server) = mock_radarr_api(
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(release_json),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
app_arc
|
||||
.lock()
|
||||
.await
|
||||
@@ -364,6 +397,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(add_movie_search_result_json),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -404,6 +438,7 @@ mod test {
|
||||
"name": "TestTask"
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::StartTask.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -431,7 +466,7 @@ mod test {
|
||||
RadarrEvent::SearchNewMovie.resource()
|
||||
);
|
||||
let (async_server, app_arc, _server) =
|
||||
mock_radarr_api(RequestMethod::Get, None, Some(json!([])), &resource).await;
|
||||
mock_radarr_api(RequestMethod::Get, None, Some(json!([])), None, &resource).await;
|
||||
app_arc.lock().await.data.radarr_data.search = Some("test term".into());
|
||||
let mut network = Network::new(&app_arc, CancellationToken::new());
|
||||
|
||||
@@ -502,6 +537,97 @@ mod test {
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_test_all_indexers_event() {
|
||||
let indexers = vec![
|
||||
Indexer {
|
||||
id: 1,
|
||||
name: Some("Test 1".to_owned()),
|
||||
..Indexer::default()
|
||||
},
|
||||
Indexer {
|
||||
id: 2,
|
||||
name: Some("Test 2".to_owned()),
|
||||
..Indexer::default()
|
||||
},
|
||||
];
|
||||
let indexer_test_results_modal_items = vec![
|
||||
IndexerTestResultModalItem {
|
||||
name: "Test 1".to_owned(),
|
||||
is_valid: true,
|
||||
validation_failures: HorizontallyScrollableText::default(),
|
||||
},
|
||||
IndexerTestResultModalItem {
|
||||
name: "Test 2".to_owned(),
|
||||
is_valid: false,
|
||||
validation_failures: "Failure for field 'test field 1': test error message, Failure for field 'test field 2': test error message 2".into(),
|
||||
},
|
||||
];
|
||||
let response_json = json!([
|
||||
{
|
||||
"id": 1,
|
||||
"isValid": true,
|
||||
"validationFailures": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"isValid": false,
|
||||
"validationFailures": [
|
||||
{
|
||||
"propertyName": "test field 1",
|
||||
"errorMessage": "test error message",
|
||||
"severity": "error"
|
||||
},
|
||||
{
|
||||
"propertyName": "test field 2",
|
||||
"errorMessage": "test error message 2",
|
||||
"severity": "error"
|
||||
},
|
||||
]
|
||||
}]);
|
||||
let (async_server, app_arc, _server) = mock_radarr_api(
|
||||
RequestMethod::Post,
|
||||
None,
|
||||
Some(response_json),
|
||||
Some(400),
|
||||
RadarrEvent::TestAllIndexers.resource(),
|
||||
)
|
||||
.await;
|
||||
app_arc
|
||||
.lock()
|
||||
.await
|
||||
.data
|
||||
.radarr_data
|
||||
.indexers
|
||||
.set_items(indexers);
|
||||
let mut network = Network::new(&app_arc, CancellationToken::new());
|
||||
|
||||
network
|
||||
.handle_radarr_event(RadarrEvent::TestAllIndexers)
|
||||
.await;
|
||||
|
||||
async_server.assert_async().await;
|
||||
assert!(app_arc
|
||||
.lock()
|
||||
.await
|
||||
.data
|
||||
.radarr_data
|
||||
.indexer_test_all_results
|
||||
.is_some());
|
||||
assert_eq!(
|
||||
app_arc
|
||||
.lock()
|
||||
.await
|
||||
.data
|
||||
.radarr_data
|
||||
.indexer_test_all_results
|
||||
.as_ref()
|
||||
.unwrap()
|
||||
.items,
|
||||
indexer_test_results_modal_items
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_trigger_automatic_search_event() {
|
||||
let (async_server, app_arc, _server) = mock_radarr_api(
|
||||
@@ -511,6 +637,7 @@ mod test {
|
||||
"movieIds": [ 1 ]
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::TriggerAutomaticSearch.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -539,6 +666,7 @@ mod test {
|
||||
"movieIds": [ 1 ]
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::UpdateAndScan.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -567,6 +695,7 @@ mod test {
|
||||
"movieIds": []
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::UpdateAllMovies.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -587,6 +716,7 @@ mod test {
|
||||
"name": "RefreshMonitoredDownloads"
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::UpdateDownloads.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -616,6 +746,7 @@ mod test {
|
||||
RequestMethod::Put,
|
||||
Some(indexer_settings_json),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::UpdateIndexerSettings.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -645,6 +776,7 @@ mod test {
|
||||
"name": "RefreshCollections"
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::UpdateCollections.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -664,6 +796,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(serde_json::from_str(MOVIE_JSON).unwrap()),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -775,6 +908,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(movie_json_with_missing_fields),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -843,6 +977,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(movie_history_item_json),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -890,6 +1025,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(movie_history_item_json),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -957,6 +1093,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(collection_json),
|
||||
None,
|
||||
RadarrEvent::GetCollections.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -992,6 +1129,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(downloads_response_json),
|
||||
None,
|
||||
RadarrEvent::GetDownloads.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1057,6 +1195,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(indexers_response_json),
|
||||
None,
|
||||
RadarrEvent::GetIndexers.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1088,6 +1227,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(indexer_settings_response_json),
|
||||
None,
|
||||
RadarrEvent::GetIndexerSettings.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1121,6 +1261,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(indexer_settings_response_json),
|
||||
None,
|
||||
RadarrEvent::GetIndexerSettings.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1166,6 +1307,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(queued_events_json),
|
||||
None,
|
||||
RadarrEvent::GetQueuedEvents.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1221,6 +1363,7 @@ mod test {
|
||||
}
|
||||
]
|
||||
})),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -1254,6 +1397,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(quality_profile_json),
|
||||
None,
|
||||
RadarrEvent::GetQualityProfiles.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1280,6 +1424,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(tags_json),
|
||||
None,
|
||||
RadarrEvent::GetTags.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1335,6 +1480,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(tasks_json),
|
||||
None,
|
||||
RadarrEvent::GetTasks.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1421,6 +1567,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(tasks_json),
|
||||
None,
|
||||
RadarrEvent::GetUpdates.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1441,6 +1588,7 @@ mod test {
|
||||
RequestMethod::Post,
|
||||
Some(json!({ "label": "testing" })),
|
||||
Some(json!({ "id": 3, "label": "testing" })),
|
||||
None,
|
||||
RadarrEvent::GetTags.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1473,6 +1621,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(root_folder_json),
|
||||
None,
|
||||
RadarrEvent::GetRootFolders.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1505,8 +1654,14 @@ mod test {
|
||||
}
|
||||
]);
|
||||
let resource = format!("{}?movieId=1", RadarrEvent::GetMovieCredits.resource());
|
||||
let (async_server, app_arc, _server) =
|
||||
mock_radarr_api(RequestMethod::Get, None, Some(credits_json), &resource).await;
|
||||
let (async_server, app_arc, _server) = mock_radarr_api(
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(credits_json),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
app_arc
|
||||
.lock()
|
||||
.await
|
||||
@@ -1536,7 +1691,7 @@ mod test {
|
||||
RadarrEvent::DeleteMovie.resource()
|
||||
);
|
||||
let (async_server, app_arc, _server) =
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, &resource).await;
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, None, &resource).await;
|
||||
{
|
||||
let mut app = app_arc.lock().await;
|
||||
app.data.radarr_data.movies.set_items(vec![movie()]);
|
||||
@@ -1556,7 +1711,7 @@ mod test {
|
||||
async fn test_handle_delete_download_event() {
|
||||
let resource = format!("{}/1", RadarrEvent::DeleteDownload.resource());
|
||||
let (async_server, app_arc, _server) =
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, &resource).await;
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, None, &resource).await;
|
||||
app_arc
|
||||
.lock()
|
||||
.await
|
||||
@@ -1577,7 +1732,7 @@ mod test {
|
||||
async fn test_handle_delete_indexer_event() {
|
||||
let resource = format!("{}/1", RadarrEvent::DeleteIndexer.resource());
|
||||
let (async_server, app_arc, _server) =
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, &resource).await;
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, None, &resource).await;
|
||||
app_arc
|
||||
.lock()
|
||||
.await
|
||||
@@ -1598,7 +1753,7 @@ mod test {
|
||||
async fn test_handle_delete_root_folder_event() {
|
||||
let resource = format!("{}/1", RadarrEvent::DeleteRootFolder.resource());
|
||||
let (async_server, app_arc, _server) =
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, &resource).await;
|
||||
mock_radarr_api(RequestMethod::Delete, None, None, None, &resource).await;
|
||||
app_arc
|
||||
.lock()
|
||||
.await
|
||||
@@ -1634,6 +1789,7 @@ mod test {
|
||||
}
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::AddMovie.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1720,6 +1876,7 @@ mod test {
|
||||
}
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::AddMovie.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1805,6 +1962,7 @@ mod test {
|
||||
"path": "/nfs/test"
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::AddRootFolder.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -1840,6 +1998,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(serde_json::from_str(MOVIE_JSON).unwrap()),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -1933,6 +2092,7 @@ mod test {
|
||||
RequestMethod::Get,
|
||||
None,
|
||||
Some(detailed_collection_body),
|
||||
None,
|
||||
&resource,
|
||||
)
|
||||
.await;
|
||||
@@ -1992,6 +2152,7 @@ mod test {
|
||||
"movieId": 1
|
||||
})),
|
||||
None,
|
||||
None,
|
||||
RadarrEvent::DownloadRelease.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -2042,6 +2203,7 @@ mod test {
|
||||
RequestMethod::Post,
|
||||
Some(json!({ "label": "testing" })),
|
||||
Some(json!({ "id": 3, "label": "testing" })),
|
||||
None,
|
||||
RadarrEvent::GetTags.resource(),
|
||||
)
|
||||
.await;
|
||||
@@ -2256,15 +2418,22 @@ mod test {
|
||||
method: RequestMethod,
|
||||
request_body: Option<Value>,
|
||||
response_body: Option<Value>,
|
||||
response_status: Option<usize>,
|
||||
resource: &str,
|
||||
) -> (Mock, Arc<Mutex<App<'_>>>, ServerGuard) {
|
||||
let status = if let Some(status) = response_status {
|
||||
status
|
||||
} else {
|
||||
200
|
||||
};
|
||||
let mut server = Server::new_async().await;
|
||||
let mut async_server = server
|
||||
.mock(
|
||||
&method.to_string().to_uppercase(),
|
||||
format!("/api/v3{resource}").as_str(),
|
||||
)
|
||||
.match_header("X-Api-Key", "test1234");
|
||||
.match_header("X-Api-Key", "test1234")
|
||||
.with_status(status);
|
||||
|
||||
if let Some(body) = request_body {
|
||||
async_server = async_server.match_body(Matcher::Json(body));
|
||||
|
||||
Reference in New Issue
Block a user