Skip to content
← Public packages

@kentcdodds/audible

Personal Audible library app — browser re-auth, library, wishlist, NAS archive stub.

src/__tests__/archive-remaining.test.ts

55 lines · 1.4 KB · TypeScript
import assert from 'node:assert/strict'
import { describe, it } from 'node:test'
import {
	filterNotOnNas,
	isDownloadable,
} from '../archive-remaining-helpers.ts'
import type { SlimLibraryItem } from '../types.ts'

describe('archive-remaining helpers', () => {
	it('isDownloadable requires asin, title, and downloadable eligibility', () => {
		const base: SlimLibraryItem = {
			asin: 'B002UZKI96',
			title: 'Hatchet',
			archiveEligibility: 'downloadable',
		}
		assert.equal(isDownloadable(base), true)
		assert.equal(
			isDownloadable({ ...base, archiveEligibility: 'plus_stream' }),
			false,
		)
		assert.equal(
			isDownloadable({ ...base, archiveEligibility: 'unsupported_format' }),
			false,
		)
		assert.equal(isDownloadable({ ...base, title: '  ' }), false)
		assert.equal(isDownloadable({ ...base, asin: '' }), false)
		assert.equal(
			isDownloadable({
				asin: 'B1',
				title: 'Untitled default',
			}),
			true,
		)
	})

	it('filterNotOnNas drops on-NAS titles and blank titles', () => {
		const onNas = new Map<string, boolean>([
			['A', true],
			['B', false],
		])
		const remaining = filterNotOnNas(
			[
				{ asin: 'A', title: 'Already' },
				{ asin: 'B', title: 'Needed' },
				{ asin: 'C', title: 'Unknown treated as remaining' },
				{ asin: 'D', title: '   ' },
			],
			onNas,
		)
		assert.deepEqual(remaining, [
			{ asin: 'B', title: 'Needed' },
			{ asin: 'C', title: 'Unknown treated as remaining' },
		])
	})
})