Initial
This commit is contained in:
53
server/test/promotion.test.mjs
Normal file
53
server/test/promotion.test.mjs
Normal file
@@ -0,0 +1,53 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user