54 lines
2.4 KiB
JavaScript
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);
|
|
});
|