feat(readarr): edit the shared indexer settings and expose the command on the CLI
This commit is contained in:
6 files changed
+378
-5
No files matched your search
@@ -36,6 +36,23 @@ impl Network<'_, '_> {
|
||||
.await
|
||||
}
|
||||
|
||||
pub(in crate::network::readarr_network) async fn edit_all_readarr_indexer_settings(
|
||||
&mut self,
|
||||
params: IndexerSettings,
|
||||
) -> Result<Value> {
|
||||
info!("Updating Readarr indexer settings");
|
||||
let event = ReadarrEvent::EditAllIndexerSettings(IndexerSettings::default());
|
||||
debug!("Indexer settings body: {params:?}");
|
||||
|
||||
let request_props = self
|
||||
.request_props_from(event, RequestMethod::Put, Some(params), None, None)
|
||||
.await;
|
||||
|
||||
self
|
||||
.handle_request::<IndexerSettings, Value>(request_props, |_, _| {})
|
||||
.await
|
||||
}
|
||||
|
||||
pub(in crate::network::readarr_network) async fn get_all_readarr_indexer_settings(
|
||||
&mut self,
|
||||
) -> Result<IndexerSettings> {
|
||||
|
||||
@@ -714,4 +714,40 @@ mod tests {
|
||||
let app = app.lock().await;
|
||||
assert_none!(&app.data.readarr_data.indexer_settings);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_edit_all_readarr_indexer_settings_event() {
|
||||
let (mock, app, _server) = MockServarrApi::put()
|
||||
.with_request_body(serde_json::from_str(INDEXER_SETTINGS_JSON).unwrap())
|
||||
.build_for(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
|
||||
.await;
|
||||
app.lock().await.server_tabs.set_index(3);
|
||||
let mut network = test_network(&app);
|
||||
|
||||
let result = network
|
||||
.handle_readarr_event(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
|
||||
.await;
|
||||
|
||||
mock.assert_async().await;
|
||||
assert_ok!(&result);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_handle_edit_all_readarr_indexer_settings_event_failure() {
|
||||
let (mock, app, _server) = MockServarrApi::put()
|
||||
.with_request_body(serde_json::from_str(INDEXER_SETTINGS_JSON).unwrap())
|
||||
.returns(json!({ "message": "Internal Server Error" }))
|
||||
.status(500)
|
||||
.build_for(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
|
||||
.await;
|
||||
app.lock().await.server_tabs.set_index(3);
|
||||
let mut network = test_network(&app);
|
||||
|
||||
let result = network
|
||||
.handle_readarr_event(ReadarrEvent::EditAllIndexerSettings(indexer_settings()))
|
||||
.await;
|
||||
|
||||
mock.assert_async().await;
|
||||
assert_err!(result);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ use crate::models::readarr_models::{
|
||||
ReadarrTaskName,
|
||||
};
|
||||
use crate::models::servarr_models::{
|
||||
EditIndexerParams, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
|
||||
EditIndexerParams, IndexerSettings, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
|
||||
};
|
||||
use crate::network::{Network, RequestMethod};
|
||||
|
||||
@@ -43,6 +43,7 @@ pub enum ReadarrEvent {
|
||||
DeleteRootFolder(i64),
|
||||
DeleteTag(i64),
|
||||
DownloadRelease(ReleaseDownloadBody),
|
||||
EditAllIndexerSettings(IndexerSettings),
|
||||
EditAuthor(EditAuthorParams),
|
||||
EditIndexer(EditIndexerParams),
|
||||
GetAllIndexerSettings,
|
||||
@@ -113,7 +114,9 @@ impl NetworkResource for ReadarrEvent {
|
||||
| ReadarrEvent::UpdateAndScanAuthor(_)
|
||||
| ReadarrEvent::UpdateDownloads => "/command",
|
||||
ReadarrEvent::GetHostConfig | ReadarrEvent::GetSecurityConfig => "/config/host",
|
||||
ReadarrEvent::GetAllIndexerSettings => "/config/indexer",
|
||||
ReadarrEvent::GetAllIndexerSettings | ReadarrEvent::EditAllIndexerSettings(_) => {
|
||||
"/config/indexer"
|
||||
}
|
||||
ReadarrEvent::GetDiskSpace => "/diskspace",
|
||||
ReadarrEvent::GetBookEditions(_) => "/edition",
|
||||
ReadarrEvent::HealthCheck => "/health",
|
||||
@@ -201,6 +204,10 @@ impl Network<'_, '_> {
|
||||
.download_readarr_release(release_download_body)
|
||||
.await
|
||||
.map(ReadarrSerdeable::from),
|
||||
ReadarrEvent::EditAllIndexerSettings(params) => self
|
||||
.edit_all_readarr_indexer_settings(params)
|
||||
.await
|
||||
.map(ReadarrSerdeable::from),
|
||||
ReadarrEvent::EditAuthor(edit_author_params) => self
|
||||
.edit_author(edit_author_params)
|
||||
.await
|
||||
|
||||
@@ -5,7 +5,7 @@ mod tests {
|
||||
AddAuthorBody, AddReadarrRootFolderBody, DeleteParams, EditAuthorParams, ReadarrSerdeable,
|
||||
};
|
||||
use crate::models::servarr_models::{
|
||||
EditIndexerParams, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
|
||||
EditIndexerParams, IndexerSettings, MetadataProfile, QualityProfile, ReleaseDownloadBody, Tag,
|
||||
};
|
||||
use crate::network::network_tests::test_utils::{MockServarrApi, test_network};
|
||||
use crate::network::{NetworkEvent, NetworkResource, readarr_network::ReadarrEvent};
|
||||
@@ -43,6 +43,10 @@ mod tests {
|
||||
#[case(ReadarrEvent::GetHostConfig, "/config/host")]
|
||||
#[case(ReadarrEvent::GetSecurityConfig, "/config/host")]
|
||||
#[case(ReadarrEvent::GetAllIndexerSettings, "/config/indexer")]
|
||||
#[case(
|
||||
ReadarrEvent::EditAllIndexerSettings(IndexerSettings::default()),
|
||||
"/config/indexer"
|
||||
)]
|
||||
#[case(ReadarrEvent::GetDiskSpace, "/diskspace")]
|
||||
#[case(ReadarrEvent::GetBookEditions(1), "/edition")]
|
||||
#[case(ReadarrEvent::HealthCheck, "/health")]
|
||||
|
||||
Reference in new issue
Block a user