88 lines
3.1 KiB
TypeScript
88 lines
3.1 KiB
TypeScript
import * as assert from 'node:assert/strict'
|
|
import { test } from 'node:test'
|
|
|
|
import {
|
|
canCompleteSetupOffline,
|
|
describeOfflineBlockers,
|
|
isServiceInstallableOffline,
|
|
offlineBlockers,
|
|
} from '../../inertia/lib/offline_setup.js'
|
|
import type { WizardSelections } from '../../inertia/lib/offline_setup.js'
|
|
|
|
const NOTHING_SELECTED: WizardSelections = {
|
|
services: [],
|
|
mapCollections: [],
|
|
creatorPacks: [],
|
|
categoryTierCount: 0,
|
|
aiModels: [],
|
|
wikipediaOptionId: null,
|
|
}
|
|
|
|
const selections = (overrides: Partial<WizardSelections>): WizardSelections => ({
|
|
...NOTHING_SELECTED,
|
|
...overrides,
|
|
})
|
|
|
|
test('an app whose image is loaded locally installs offline', () => {
|
|
assert.equal(isServiceInstallableOffline('kiwix', ['kiwix', 'kolibri']), true)
|
|
assert.equal(isServiceInstallableOffline('ollama', ['kiwix', 'kolibri']), false)
|
|
})
|
|
|
|
test('installing only locally-available apps is possible offline', () => {
|
|
const picks = selections({ services: ['kiwix', 'kolibri'] })
|
|
assert.deepEqual(offlineBlockers(picks, ['kiwix', 'kolibri', 'ollama']), [])
|
|
assert.equal(canCompleteSetupOffline(picks, ['kiwix', 'kolibri', 'ollama']), true)
|
|
})
|
|
|
|
test('an app with no local image blocks an offline finish', () => {
|
|
const picks = selections({ services: ['kiwix', 'ollama'] })
|
|
assert.deepEqual(offlineBlockers(picks, ['kiwix']), ['services'])
|
|
assert.equal(canCompleteSetupOffline(picks, ['kiwix']), false)
|
|
})
|
|
|
|
test('every remote-catalog selection blocks an offline finish', () => {
|
|
assert.deepEqual(offlineBlockers(selections({ mapCollections: ['north-america'] }), []), ['maps'])
|
|
assert.deepEqual(offlineBlockers(selections({ categoryTierCount: 1 }), []), ['content'])
|
|
assert.deepEqual(offlineBlockers(selections({ creatorPacks: ['pack-a'] }), []), ['creator-packs'])
|
|
assert.deepEqual(offlineBlockers(selections({ aiModels: ['llama3'] }), []), ['ai-models'])
|
|
assert.deepEqual(offlineBlockers(selections({ wikipediaOptionId: 'full' }), []), ['wikipedia'])
|
|
})
|
|
|
|
test("Wikipedia 'none' is a local deletion, not a download", () => {
|
|
assert.deepEqual(offlineBlockers(selections({ wikipediaOptionId: 'none' }), []), [])
|
|
assert.equal(canCompleteSetupOffline(selections({ wikipediaOptionId: 'none' }), []), true)
|
|
})
|
|
|
|
test('an empty wizard is trivially completable offline', () => {
|
|
assert.equal(canCompleteSetupOffline(NOTHING_SELECTED, []), true)
|
|
})
|
|
|
|
test('blockers are reported in a stable order', () => {
|
|
const picks = selections({
|
|
services: ['ollama'],
|
|
mapCollections: ['north-america'],
|
|
categoryTierCount: 2,
|
|
creatorPacks: ['pack-a'],
|
|
aiModels: ['llama3'],
|
|
wikipediaOptionId: 'full',
|
|
})
|
|
assert.deepEqual(offlineBlockers(picks, []), [
|
|
'services',
|
|
'maps',
|
|
'content',
|
|
'creator-packs',
|
|
'ai-models',
|
|
'wikipedia',
|
|
])
|
|
})
|
|
|
|
test('blocker descriptions read as a sentence fragment', () => {
|
|
assert.equal(describeOfflineBlockers([]), '')
|
|
assert.equal(describeOfflineBlockers(['maps']), 'map regions')
|
|
assert.equal(describeOfflineBlockers(['maps', 'ai-models']), 'map regions and AI models')
|
|
assert.equal(
|
|
describeOfflineBlockers(['maps', 'content', 'ai-models']),
|
|
'map regions, content categories and AI models'
|
|
)
|
|
})
|