Skip to content
← 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 · TypeScript
import 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')
})