Files
poshmanager/server/test/promotion.test.mjs
2026-06-25 12:05:53 -05:00

54 lines
2.4 KiB
JavaScript

import './setup.mjs';
import test from 'node:test';
import assert from 'node:assert/strict';
import { load } from './setup.mjs';
const { bumpVersion, cloneForNextVersion, setRingIntent } = await load('../services/intunePromotionService.js');
test('bumpVersion increments the trailing number', () => {
assert.equal(bumpVersion('1.2.3'), '1.2.4');
assert.equal(bumpVersion('126'), '127');
assert.equal(bumpVersion('3.1.0-x64'), '3.1.0-x65'); // bumps the last numeric run
assert.equal(bumpVersion(''), '1.0.0');
assert.equal(bumpVersion('stable'), 'stable.1');
});
test('cloneForNextVersion produces an unpublished next-version plan', () => {
const source = {
name: 'Contoso VPN 3.1.0',
profileId: 'p1', applicationId: 'app1', commandStyle: 'v4', installBehavior: 'system',
restartBehavior: 'return-code', uiMode: 'native-v4', requirements: { architecture: 'x64' },
installCommand: 'i', uninstallCommand: 'u', detectionType: 'msi-product-code', detectionRule: '{x}',
returnCodes: [{ code: 0, type: 'success' }], assignments: [{ ring: 'Pilot', intent: 'available' }],
relationships: [], graphAppId: 'live-app', status: 'published', visibility: 'shared'
};
const clone = cloneForNextVersion(source, { version: '3.2.0' });
assert.equal(clone.name, 'Contoso VPN 3.2.0');
assert.equal(clone.graphAppId, '');
assert.equal(clone.status, 'draft');
assert.equal(clone.applicationId, 'app1');
assert.equal(clone.detectionRule, '{x}');
assert.deepEqual(clone.assignments, source.assignments);
});
test('cloneForNextVersion auto-bumps the version from the name when not given', () => {
const clone = cloneForNextVersion({ name: 'Firefox 120.0', visibility: 'shared' }, {});
assert.equal(clone.name, 'Firefox 120.1');
});
test('setRingIntent promotes only the named ring and reports change', () => {
const assignments = [
{ ring: 'Pilot', intent: 'available' },
{ ring: 'Broad', intent: 'available' }
];
const result = setRingIntent(assignments, 'Broad', 'required');
assert.equal(result.changed, true);
assert.equal(result.assignments.find((a) => a.ring === 'Broad').intent, 'required');
assert.equal(result.assignments.find((a) => a.ring === 'Pilot').intent, 'available');
});
test('setRingIntent is a no-op for unknown rings', () => {
const result = setRingIntent([{ ring: 'Pilot', intent: 'available' }], 'Nope', 'required');
assert.equal(result.changed, false);
});