← Public packages
@kentcdodds/audible
Personal Audible library app — browser re-auth, library, wishlist, NAS archive stub.
src/__tests__/archive-eligibility.test.ts
103 lines · 2.9 KB · TypeScriptimport assert from 'node:assert/strict'
import { test } from 'node:test'
import {
ArchiveEligibilityError,
assertArchiveDownloadable,
classifyArchiveEligibility,
} from '../archive-eligibility.ts'
test('purchased SinglePartBook is downloadable', () => {
const info = classifyArchiveEligibility({
asin: 'B002UZKI96',
title: 'Hatchet',
is_ayce: false,
benefit_id: null,
content_type: 'Product',
content_delivery_type: 'SinglePartBook',
format_type: 'unabridged',
runtime_length_min: 222,
available_codecs: [{ name: 'aax' }],
})
assert.equal(info.archiveEligibility, 'downloadable')
assert.equal(info.downloadable, true)
assert.equal(info.retryable, true)
})
test('Plus / AYCL is plus_stream', () => {
const byFlag = classifyArchiveEligibility({
asin: 'B002V59RLK',
title: 'Swindle',
is_ayce: true,
benefit_id: 'AYCL',
content_type: 'Product',
content_delivery_type: 'SinglePartBook',
format_type: 'unabridged',
runtime_length_min: 271,
available_codecs: [{ name: 'aax' }],
})
assert.equal(byFlag.archiveEligibility, 'plus_stream')
assert.equal(byFlag.archiveHint, 'Plus · stream only')
assert.equal(byFlag.downloadable, false)
assert.equal(byFlag.retryable, false)
const byBenefitOnly = classifyArchiveEligibility({
asin: 'B002V59RLK',
is_ayce: false,
benefit_id: 'AYCL',
content_type: 'Product',
available_codecs: [{ name: 'aax' }],
runtime_length_min: 10,
})
assert.equal(byBenefitOnly.archiveEligibility, 'plus_stream')
})
test('Show / original_recording is unsupported_format', () => {
const info = classifyArchiveEligibility({
asin: 'B0779LK1TX',
title: 'A Christmas Carol',
is_ayce: false,
content_type: 'Show',
content_delivery_type: 'Periodical',
format_type: 'original_recording',
runtime_length_min: 0,
available_codecs: null,
has_children: true,
is_listenable: false,
})
assert.equal(info.archiveEligibility, 'unsupported_format')
assert.equal(info.archiveHint, 'Not an audiobook download')
assert.equal(info.downloadable, false)
})
test('assertArchiveDownloadable throws friendly non-retryable error', () => {
assert.throws(
() =>
assertArchiveDownloadable({
asin: 'B002V59RLK',
title: 'Swindle',
product: { is_ayce: true, benefit_id: 'AYCL', content_type: 'Product' },
}),
(err: unknown) => {
assert.ok(err instanceof ArchiveEligibilityError)
assert.equal(err.retryable, false)
assert.equal(err.archiveEligibility, 'plus_stream')
assert.match(err.message, /Plus \(stream only\)/)
assert.match(err.message, /Do not retry/)
return true
},
)
})
test('unwraps library item wrappers', () => {
const info = classifyArchiveEligibility({
item: {
asin: 'B002V59RLK',
is_ayce: true,
benefit_id: 'AYCL',
content_type: 'Product',
runtime_length_min: 100,
available_codecs: [{ name: 'aax' }],
},
})
assert.equal(info.archiveEligibility, 'plus_stream')
})