Files
Starlight_Lancher/apps/app-frontend/src/pages/instance/upgrade/entry.test.ts

64 lines
1.9 KiB
TypeScript

import assert from 'node:assert/strict'
import test from 'node:test'
import type { InstallJobSnapshot } from '@/helpers/install'
import type { GameInstance } from '@/helpers/types'
import { isActiveUpgradeJobForInstance, isUnmanagedUpgradeEligible } from './entry.ts'
const instance = (link: GameInstance['link'] = null): GameInstance => ({
id: 'instance',
path: 'path',
install_stage: 'installed',
launcher_feature_version: '1',
name: 'Instance',
game_version: '1.21.8',
loader: 'fabric',
loader_components: [],
groups: [],
link,
update_channel: 'release',
created: new Date(),
modified: new Date(),
submitted_time_played: 0,
recent_time_played: 0,
hooks: {},
})
test('eligibility allows local/shared and excludes managed packs', () => {
assert.equal(isUnmanagedUpgradeEligible(instance()), true)
assert.equal(
isUnmanagedUpgradeEligible(instance({ type: 'shared_instance', shared_instance_id: 'shared' })),
true,
)
assert.equal(
isUnmanagedUpgradeEligible(
instance({ type: 'modrinth_modpack', project_id: 'p', version_id: 'v' }),
),
false,
)
assert.equal(isUnmanagedUpgradeEligible({ ...instance(), install_stage: 'not_installed' }), false)
})
test('active upgrade job ownership is exact', () => {
const job = {
kind: 'upgrade_unmanaged_instance',
status: 'running',
instance_id: 'instance',
} as InstallJobSnapshot
assert.equal(isActiveUpgradeJobForInstance(job, 'instance'), true)
assert.equal(isActiveUpgradeJobForInstance(job, 'other'), false)
assert.equal(isActiveUpgradeJobForInstance({ ...job, status: 'succeeded' }, 'instance'), false)
})
test('active copy upgrade belongs to original source instance', () => {
const job = {
kind: 'upgrade_unmanaged_instance',
status: 'running',
instance_id: 'copy',
source_instance_id: 'source',
} as InstallJobSnapshot
assert.equal(isActiveUpgradeJobForInstance(job, 'source'), true)
assert.equal(isActiveUpgradeJobForInstance(job, 'copy'), false)
})