From 4ebffbee548d322c1377a021fd9f35f1d044e341 Mon Sep 17 00:00:00 2001 From: Flaminel Date: Sun, 18 Oct 2026 01:04:21 +0300 Subject: [PATCH] fixed sonarr cleanup re-monitoring seeded specials --- .../live-arr-fast/seeker-upgrades.api.spec.ts | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/e2e/tests/live-arr-fast/seeker-upgrades.api.spec.ts b/e2e/tests/live-arr-fast/seeker-upgrades.api.spec.ts index f8e96ea8..d41f9e88 100644 --- a/e2e/tests/live-arr-fast/seeker-upgrades.api.spec.ts +++ b/e2e/tests/live-arr-fast/seeker-upgrades.api.spec.ts @@ -65,6 +65,7 @@ interface Episode { episodeNumber: number; hasFile: boolean; episodeFileId: number; + monitored: boolean; } type ProfileChanges = { upgradeAllowed: boolean; cutoffFormatScore?: number }; @@ -154,15 +155,24 @@ async function importLowQualityEpisode(profileChanges: ProfileChanges): Promise< .toBe(true); } -async function dropImportedEpisode(): Promise { +/** Restores monitoring from the snapshot, because the seed leaves the specials unmonitored. */ +async function dropImportedEpisode(snapshot: Episode[]): Promise { const series = await SONARR.arr.get(`/api/v3/series/${SONARR.itemId}`); - const episodes = await listEpisodes(); + const imported = (await listEpisodes()).find( + (e) => e.seasonNumber === IMPORTED_EPISODE.seasonNumber && e.episodeNumber === IMPORTED_EPISODE.episodeNumber, + ); - for (const episode of episodes.filter((e) => e.hasFile)) { - await SONARR.arr.delete(`/api/v3/episodefile/${episode.episodeFileId}`); + if (imported?.hasFile) { + await SONARR.arr.delete(`/api/v3/episodefile/${imported.episodeFileId}`); + } + + for (const monitored of [true, false]) { + const episodeIds = snapshot.filter((e) => e.monitored === monitored).map((e) => e.id); + if (episodeIds.length > 0) { + await SONARR.arr.put('/api/v3/episode/monitor', { episodeIds, monitored }); + } } - await SONARR.arr.put('/api/v3/episode/monitor', { episodeIds: episodes.map((e) => e.id), monitored: true }); rmSync(join(seriesFolder(series), 'Season 01'), { recursive: true, force: true }); } @@ -260,18 +270,20 @@ test.describe('Seeker quality upgrades', () => { test.describe('Seeker custom format upgrades on Sonarr', () => { let library: Array> = []; + let episodes: Episode[] = []; let profile: Record = {}; test.beforeEach(async () => { await resetLiveArrState(); library = await snapshotLibrary(SONARR); + episodes = await listEpisodes(); profile = await SONARR.arr.get>(`/api/v3/qualityprofile/${HD_1080P_PROFILE}`); await indexerMock.stub(torznabSearchStub(SONARR.searchMode, [])); }); test.afterEach(async ({ api }) => { await teardownInstances(api); - await dropImportedEpisode(); + await dropImportedEpisode(episodes); await SONARR.arr.put(`/api/v3/qualityprofile/${HD_1080P_PROFILE}`, profile); await restoreLibrary(SONARR, library); await resetLiveArrState();