test(arr): a forced candidate writes no sidecar

Ranking already rejects one (#185); this holds the loop to it at the end
of the pipeline, where the row would appear.
This commit is contained in:
Miguel Palhas
2026-08-25 08:28:56 +01:00
parent 3122d5b0a0
commit d358c58844
+39
View File
@@ -1494,6 +1494,45 @@ mod tests {
.contains("no text source to translate from"));
}
/// §15 gives a language exactly one sidecar and forced gets no segment
/// of its own, so nothing in the loop may ever write one. Ranking already
/// rejects a forced candidate (#185); this holds it to that at the end of
/// the pipeline, where the row would actually appear (#222).
#[tokio::test]
async fn a_forced_candidate_never_becomes_a_sidecar() {
let fixture = Fixture::new(&no_tracks()).await;
fixture.configure(r#"["pt-PT"]"#, Some("openai")).await;
let forced = Candidate {
forced: true,
hash_match: true,
download_count: Some(1_000_000),
..candidate("opensubtitles", "forced", Language::PortuguesePortugal)
};
let action = action(
vec![Arc::new(StubProvider::new("opensubtitles", vec![forced]))],
vec![Arc::new(StubBackend)],
);
action.run(&fixture.database).await.unwrap();
assert!(
fixture.files().await.is_empty(),
"a forced candidate is not a subtitle arr has"
);
assert!(
!fixture
.directory
.path()
.join("Movie (2024) - [1080p].pt-PT.srt")
.exists(),
"and nothing was written for it"
);
// The best candidate on offer being unusable is the same position as
// no candidate at all: nothing to fetch and nothing to translate from.
let attempt = fixture.attempt("pt-PT").await.unwrap();
assert_eq!(attempt.state, SubtitleState::Unavailable);
}
#[tokio::test]
async fn the_ranked_winner_is_fetched_synced_and_recorded() {
let fixture = Fixture::new(&no_tracks()).await;