import { test } from '@japa/runner' import db from '@adonisjs/lucid/services/db' import testUtils from '@adonisjs/core/services/test_utils' import { pruneSevenZipTails } from '#services/seven_zip_tails' import { insertReleases } from '#tests/functional/helpers/releases' test.group('7z tails', (group) => { group.each.setup(() => testUtils.db().withGlobalTransaction()) test("of a release's waiting tails, those below its highest volume go; the highest volume's all stay", async ({ assert }) => { const row = (key: string) => ({ release_key: key.padEnd(40, '0'), identity_key: key.padEnd(40, '0'), name: key, source: 'stem', groups: '[]', files: 4 }) const [merged, other] = await insertReleases([row('a'), row('b')]) const tail = (releaseId: number, volume: string, mid: string, status = 'waiting') => ({ release_id: releaseId, kind: '7z-tail', message_id: mid, file: `x.7z.${volume}`, status }) await db.table('probe_candidates').multiInsert([ // Two merged members' tails, one of the highest volume probed already. tail(merged, '002', '<1@x>'), tail(merged, '005', '<2@x>'), tail(merged, '003', '<3@x>', 'done'), tail(merged, '009', '<4@x>', 'taken'), // Two pieces that each saw part of volume 009. tail(merged, '009', '<5@x>'), { release_id: merged, kind: 'archive', message_id: '<6@x>', file: 'x.7z.001' }, // Another release: not asked for. tail(other, '002', '<7@x>'), tail(other, '004', '<8@x>'), ]) assert.equal(await pruneSevenZipTails(db, [merged]), 2) const left = await db.from('probe_candidates').orderBy('message_id').select('message_id') assert.deepEqual(left.map((c) => c.message_id), ['<3@x>', '<4@x>', '<5@x>', '<6@x>', '<7@x>', '<8@x>']) }) })