'use strict'; const assert = require('node:assert/strict'); const test = require('node:test'); const { evaluateOfficialUpdate } = require('../../src/services/game-update-service'); const update = overrides => ({ version: '1.02', region: 'US', contentId: 'UP0001-CUSA12345_00-GAME000000000001', requiredFirmware: '9.00', source: 'sony-official', observedAt: 200, ...overrides }); const install = overrides => ({ id: 1, installedVersion: '1.01', installState: 'observed', consoleProfileId: 'living-room', volumeId: 'm2', volumeLabel: 'Console M.2', versionSource: 'ftp-scan', versionConfidence: 'high', versionObservedAt: 100, region: 'US', contentId: 'UP0001-CUSA12345_00-GAME000000000001', consoleFirmware: '9.60', ...overrides }); test('version matrix never shows an update for equal, newer or unknown installed versions', () => { const equal = evaluateOfficialUpdate({ update: update(), installs: [install({ installedVersion: '1.02' })] }); const newer = evaluateOfficialUpdate({ update: update(), installs: [install({ installedVersion: '1.03' })] }); const unknown = evaluateOfficialUpdate({ update: update(), installs: [install({ installedVersion: 'unknown' })] }); assert.equal(equal.updateAvailable, false); assert.equal(equal.locations[0].status, 'current'); assert.equal(newer.updateAvailable, false); assert.equal(newer.locations[0].status, 'newer-than-official'); assert.equal(unknown.updateAvailable, false); assert.equal(unknown.locations[0].status, 'unknown-version'); }); test('multiple console locations are evaluated explicitly without collapsing versions', () => { const result = evaluateOfficialUpdate({ update: update(), installs: [ install({ id: 1, installedVersion: '1.02', volumeId: 'm2', volumeLabel: 'Console M.2' }), install({ id: 2, installedVersion: '1.01', volumeId: 'usb-3', volumeLabel: 'Travel USB' }), ] }); assert.equal(result.updateAvailable, true); assert.equal(result.locations.length, 2); assert.deepEqual(result.locations.map(item => [item.volumeId, item.status]), [['m2', 'current'], ['usb-3', 'update-available']]); assert.equal(result.installedVersion, ''); }); test('unknown provenance or evidence time cannot produce a false update', () => { for (const candidate of [install({ versionSource: '' }), install({ versionSource: 'legacy' }), install({ versionObservedAt: 0 })]) { const result = evaluateOfficialUpdate({ update: update(), installs: [candidate] }); assert.equal(result.updateAvailable, false); assert.equal(result.locations[0].status, 'unknown-provenance'); assert.equal(result.locations[0].source, candidate.versionSource); assert.equal(result.locations[0].observedAt, candidate.versionObservedAt); } }); test('region, content and firmware incompatibility are checked per location', () => { const scenarios = [ install({ region: 'EU' }), install({ contentId: 'EP0001-CUSA12345_00-GAME000000000001' }), install({ consoleFirmware: '8.50' }), ]; for (const candidate of scenarios) { const result = evaluateOfficialUpdate({ update: update(), installs: [candidate] }); assert.equal(result.updateAvailable, false); assert.equal(result.locations[0].status, 'incompatible'); assert.ok(result.locations[0].compatibility.checks.some(check => check.status === 'incompatible')); } const missingFirmware = evaluateOfficialUpdate({ update: update(), installs: [install({ consoleFirmware: '' })] }); assert.equal(missingFirmware.updateAvailable, false); assert.equal(missingFirmware.locations[0].status, 'compatibility-unknown'); }); test('compatible older confirmed evidence exposes source, version and observation time', () => { const result = evaluateOfficialUpdate({ update: update(), installs: [install()] }); assert.equal(result.updateAvailable, true); assert.equal(result.locations[0].version, '1.01'); assert.equal(result.locations[0].source, 'ftp-scan'); assert.equal(result.locations[0].observedAt, 100); assert.deepEqual(result.sourceEvidence, { source: 'sony-official', observedAt: 200 }); });