395 lines
10 KiB
Rust
395 lines
10 KiB
Rust
#[cfg(test)]
|
|
#[macro_use]
|
|
pub(in crate::handlers::sonarr_handlers) mod utils {
|
|
use crate::models::servarr_models::{
|
|
Indexer, IndexerField, Language, Quality, QualityWrapper, RootFolder,
|
|
};
|
|
use crate::models::sonarr_models::{
|
|
AddSeriesSearchResult, AddSeriesSearchResultStatistics, DownloadRecord, DownloadStatus,
|
|
Episode, EpisodeFile, IndexerSettings, MediaInfo, Rating, Season, SeasonStatistics, Series,
|
|
SeriesStatistics, SeriesStatus, SeriesType,
|
|
};
|
|
use crate::models::HorizontallyScrollableText;
|
|
use chrono::DateTime;
|
|
use serde_json::{json, Number};
|
|
|
|
#[macro_export]
|
|
macro_rules! test_edit_series_key {
|
|
($handler:ident, $block:expr, $context:expr) => {
|
|
let mut app = App::test_default();
|
|
let mut sonarr_data = SonarrData {
|
|
quality_profile_map: bimap::BiMap::from_iter([
|
|
(2222, "HD - 1080p".to_owned()),
|
|
(1111, "Any".to_owned()),
|
|
]),
|
|
language_profiles_map: bimap::BiMap::from_iter([
|
|
(2222, "English".to_owned()),
|
|
(1111, "Any".to_owned()),
|
|
]),
|
|
tags_map: bimap::BiMap::from_iter([(1, "test".to_owned())]),
|
|
..create_test_sonarr_data()
|
|
};
|
|
sonarr_data.series.set_items(vec![Series {
|
|
path: "/nfs/series/Test".to_owned().into(),
|
|
monitored: true,
|
|
season_folder: true,
|
|
quality_profile_id: 2222,
|
|
language_profile_id: 2222,
|
|
series_type: SeriesType::Anime,
|
|
tags: vec![Number::from(1)],
|
|
..Series::default()
|
|
}]);
|
|
app.data.sonarr_data = sonarr_data;
|
|
|
|
$handler::new(DEFAULT_KEYBINDINGS.edit.key, &mut app, $block, None).handle();
|
|
|
|
assert_eq!(
|
|
app.get_current_route(),
|
|
(ActiveSonarrBlock::EditSeriesPrompt, Some($context)).into()
|
|
);
|
|
assert_eq!(
|
|
app.data.sonarr_data.selected_block.get_active_block(),
|
|
ActiveSonarrBlock::EditSeriesToggleMonitored
|
|
);
|
|
assert_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.series_type_list
|
|
.items,
|
|
Vec::from_iter(SeriesType::iter())
|
|
);
|
|
assert_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.series_type_list
|
|
.current_selection(),
|
|
&SeriesType::Anime
|
|
);
|
|
assert_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.quality_profile_list
|
|
.items,
|
|
vec!["Any".to_owned(), "HD - 1080p".to_owned()]
|
|
);
|
|
assert_str_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.quality_profile_list
|
|
.current_selection(),
|
|
"HD - 1080p"
|
|
);
|
|
assert_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.language_profile_list
|
|
.items,
|
|
vec!["Any".to_owned(), "English".to_owned()]
|
|
);
|
|
assert_str_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.language_profile_list
|
|
.current_selection(),
|
|
"English"
|
|
);
|
|
assert_str_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.path
|
|
.text,
|
|
"/nfs/series/Test"
|
|
);
|
|
assert_str_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.tags
|
|
.text,
|
|
"test"
|
|
);
|
|
assert_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.monitored,
|
|
Some(true)
|
|
);
|
|
assert_eq!(
|
|
app
|
|
.data
|
|
.sonarr_data
|
|
.edit_series_modal
|
|
.as_ref()
|
|
.unwrap()
|
|
.use_season_folders,
|
|
Some(true)
|
|
);
|
|
assert_eq!(
|
|
app.data.sonarr_data.selected_block.blocks,
|
|
$crate::models::servarr_data::sonarr::sonarr_data::EDIT_SERIES_SELECTION_BLOCKS
|
|
);
|
|
};
|
|
}
|
|
|
|
pub fn add_series_search_result() -> AddSeriesSearchResult {
|
|
AddSeriesSearchResult {
|
|
tvdb_id: 1234,
|
|
title: HorizontallyScrollableText::from("Test"),
|
|
status: Some("continuing".to_owned()),
|
|
ended: false,
|
|
overview: Some("New series blah blah blah".to_owned()),
|
|
genres: genres(),
|
|
year: 2023,
|
|
network: Some("Prime Video".to_owned()),
|
|
runtime: 60,
|
|
ratings: Some(rating()),
|
|
statistics: Some(add_series_search_result_statistics()),
|
|
}
|
|
}
|
|
|
|
pub fn add_series_search_result_statistics() -> AddSeriesSearchResultStatistics {
|
|
AddSeriesSearchResultStatistics { season_count: 3 }
|
|
}
|
|
|
|
pub fn download_record() -> DownloadRecord {
|
|
DownloadRecord {
|
|
title: "Test Download Title".to_owned(),
|
|
status: DownloadStatus::Downloading,
|
|
id: 1,
|
|
episode_id: Some(Number::from(1i64)),
|
|
size: 3543348019f64,
|
|
sizeleft: 1771674009f64,
|
|
output_path: Some(HorizontallyScrollableText::from(
|
|
"/nfs/tv/Test show/season 1/",
|
|
)),
|
|
indexer: "kickass torrents".to_owned(),
|
|
download_client: Some("transmission".to_owned()),
|
|
}
|
|
}
|
|
|
|
pub fn episode() -> Episode {
|
|
Episode {
|
|
id: 1,
|
|
series_id: 1,
|
|
tvdb_id: 1234,
|
|
episode_file_id: 1,
|
|
season_number: 1,
|
|
episode_number: 1,
|
|
title: "Something cool".to_owned(),
|
|
air_date_utc: Some(DateTime::from(
|
|
DateTime::parse_from_rfc3339("2024-02-10T07:28:45Z").unwrap(),
|
|
)),
|
|
overview: Some("Okay so this one time at band camp...".to_owned()),
|
|
has_file: true,
|
|
monitored: true,
|
|
episode_file: Some(episode_file()),
|
|
}
|
|
}
|
|
|
|
pub fn episode_file() -> EpisodeFile {
|
|
EpisodeFile {
|
|
id: 1,
|
|
relative_path: "/season 1/episode 1.mkv".to_owned(),
|
|
path: "/nfs/tv/series/season 1/episode 1.mkv".to_owned(),
|
|
size: 3543348019,
|
|
quality: quality_wrapper(),
|
|
languages: vec![language()],
|
|
date_added: DateTime::from(DateTime::parse_from_rfc3339("2024-02-10T07:28:45Z").unwrap()),
|
|
media_info: Some(media_info()),
|
|
}
|
|
}
|
|
|
|
pub fn genres() -> Vec<String> {
|
|
vec!["cool".to_owned(), "family".to_owned(), "fun".to_owned()]
|
|
}
|
|
|
|
pub fn indexer() -> Indexer {
|
|
Indexer {
|
|
enable_rss: true,
|
|
enable_automatic_search: true,
|
|
enable_interactive_search: true,
|
|
supports_rss: true,
|
|
supports_search: true,
|
|
protocol: "torrent".to_owned(),
|
|
priority: 25,
|
|
download_client_id: 0,
|
|
name: Some("Test Indexer".to_owned()),
|
|
implementation_name: Some("Torznab".to_owned()),
|
|
implementation: Some("Torznab".to_owned()),
|
|
config_contract: Some("TorznabSettings".to_owned()),
|
|
tags: vec![Number::from(1)],
|
|
id: 1,
|
|
fields: Some(vec![
|
|
IndexerField {
|
|
name: Some("baseUrl".to_owned()),
|
|
value: Some(json!("https://test.com")),
|
|
},
|
|
IndexerField {
|
|
name: Some("apiKey".to_owned()),
|
|
value: Some(json!("")),
|
|
},
|
|
IndexerField {
|
|
name: Some("seedCriteria.seedRatio".to_owned()),
|
|
value: Some(json!("1.2")),
|
|
},
|
|
]),
|
|
}
|
|
}
|
|
|
|
pub fn indexer_settings() -> IndexerSettings {
|
|
IndexerSettings {
|
|
id: 1,
|
|
minimum_age: 1,
|
|
retention: 1,
|
|
maximum_size: 12345,
|
|
rss_sync_interval: 60,
|
|
}
|
|
}
|
|
|
|
pub fn language() -> Language {
|
|
Language {
|
|
id: 1,
|
|
name: "English".to_owned(),
|
|
}
|
|
}
|
|
|
|
pub fn media_info() -> MediaInfo {
|
|
MediaInfo {
|
|
audio_bitrate: 0,
|
|
audio_channels: Number::from_f64(7.1).unwrap(),
|
|
audio_codec: Some("AAC".to_owned()),
|
|
audio_languages: Some("eng".to_owned()),
|
|
audio_stream_count: 1,
|
|
video_bit_depth: 10,
|
|
video_bitrate: 0,
|
|
video_codec: Some("x265".to_owned()),
|
|
video_fps: Number::from_f64(23.976).unwrap(),
|
|
resolution: "1920x1080".to_owned(),
|
|
run_time: "23:51".to_owned(),
|
|
scan_type: "Progressive".to_owned(),
|
|
subtitles: Some("English".to_owned()),
|
|
}
|
|
}
|
|
pub fn quality() -> Quality {
|
|
Quality {
|
|
name: "Bluray-1080p".to_owned(),
|
|
}
|
|
}
|
|
|
|
pub fn quality_wrapper() -> QualityWrapper {
|
|
QualityWrapper { quality: quality() }
|
|
}
|
|
|
|
pub fn rating() -> Rating {
|
|
Rating {
|
|
votes: 406744,
|
|
value: 8.4,
|
|
}
|
|
}
|
|
|
|
pub fn season() -> Season {
|
|
Season {
|
|
title: None,
|
|
season_number: 1,
|
|
monitored: true,
|
|
statistics: Some(season_statistics()),
|
|
}
|
|
}
|
|
|
|
pub fn season_statistics() -> SeasonStatistics {
|
|
SeasonStatistics {
|
|
previous_airing: Some(DateTime::from(
|
|
DateTime::parse_from_rfc3339("2022-10-24T01:00:00Z").unwrap(),
|
|
)),
|
|
next_airing: None,
|
|
episode_file_count: 10,
|
|
episode_count: 10,
|
|
total_episode_count: 10,
|
|
size_on_disk: 36708563419,
|
|
percent_of_episodes: 100.0,
|
|
}
|
|
}
|
|
|
|
pub fn series() -> Series {
|
|
Series {
|
|
title: "Test".to_owned().into(),
|
|
status: SeriesStatus::Continuing,
|
|
ended: false,
|
|
overview: Some("Blah blah blah".to_owned()),
|
|
network: Some("HBO".to_owned()),
|
|
seasons: Some(vec![season()]),
|
|
year: 2022,
|
|
path: "/nfs/tv/Test".to_owned(),
|
|
quality_profile_id: 6,
|
|
language_profile_id: 1,
|
|
season_folder: true,
|
|
monitored: true,
|
|
runtime: 63,
|
|
tvdb_id: 371572,
|
|
series_type: SeriesType::Standard,
|
|
certification: Some("TV-MA".to_owned()),
|
|
genres: vec!["cool".to_owned(), "family".to_owned(), "fun".to_owned()],
|
|
tags: vec![Number::from(3)],
|
|
ratings: rating(),
|
|
statistics: Some(series_statistics()),
|
|
id: 1,
|
|
}
|
|
}
|
|
|
|
pub fn series_statistics() -> SeriesStatistics {
|
|
SeriesStatistics {
|
|
season_count: 2,
|
|
episode_file_count: 18,
|
|
episode_count: 18,
|
|
total_episode_count: 50,
|
|
size_on_disk: 63894022699,
|
|
percent_of_episodes: 100.0,
|
|
}
|
|
}
|
|
|
|
pub fn root_folder() -> RootFolder {
|
|
RootFolder {
|
|
id: 1,
|
|
path: "/nfs".to_owned(),
|
|
accessible: true,
|
|
free_space: 219902325555200,
|
|
unmapped_folders: None,
|
|
}
|
|
}
|
|
}
|