unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
140 lines • 3.81 kB
JavaScript
import { calculateStability } from './api-stability.js';
const currentVersion = '7.6.0';
test.each([
{
release: { beta: '7.6.5', stable: '7.7.0' },
expected: 'alpha',
},
{
release: { beta: '7.5.0', stable: '7.7.0' },
expected: 'beta',
},
{
release: { beta: '7.5.0', stable: '7.6.0' },
expected: 'stable',
},
{
release: { beta: '7.7', stable: '7.8' },
expected: 'alpha',
},
{
release: { beta: '7.6', stable: '7.8' },
expected: 'beta',
},
{
release: { beta: '7.4', stable: '7.6' },
expected: 'stable',
},
{
release: { beta: '8', stable: '9' },
expected: 'alpha',
},
{
release: { beta: '7', stable: '8' },
expected: 'beta',
},
{
release: { beta: '6', stable: '7' },
expected: 'stable',
},
])(`${currentVersion} with $release should be $expected`, ({ release, expected, }) => {
expect(calculateStability(release, currentVersion)).toBe(expected);
});
test.each([
{
release: { beta: '7.5.0', stable: '7.7.0' },
},
{
release: { beta: '7.4', stable: '7.6' },
},
{
release: { beta: '6', stable: '7' },
},
])(`defaults to stable when current version is invalid and $release`, ({ release, }) => {
expect(calculateStability(release, 'invalid-current-version')).toBe('stable');
});
test(`${currentVersion} returns stable for legacy endpoints without cutoffs before the default threshold`, () => {
expect(calculateStability(undefined, currentVersion)).toBe('stable');
});
test(`${currentVersion} returns alpha when both cutoffs are omitted after the default threshold`, () => {
expect(calculateStability(undefined, '7.8.0')).toBe('alpha');
});
test.each([
{
release: { beta: '7.7.0' },
expected: 'alpha',
},
{
release: { beta: '7.5.0' },
expected: 'beta',
},
{
release: { beta: '7.7' },
expected: 'alpha',
},
{
release: { beta: '7.4' },
expected: 'beta',
},
{
release: { beta: '8' },
expected: 'alpha',
},
{
release: { beta: '7' },
expected: 'beta',
},
])(`${currentVersion} returns $expected with $release`, ({ release, expected, }) => {
expect(calculateStability(release, currentVersion)).toBe(expected);
});
test.each([
{
release: { stable: '7.7.0' },
expected: 'alpha',
},
{
release: { stable: '7.6.0' },
expected: 'stable',
},
{
release: { stable: '7.7' },
expected: 'alpha',
},
{
release: { stable: '7.6' },
expected: 'stable',
},
{
release: { stable: '8' },
expected: 'alpha',
},
{
release: { stable: '7' },
expected: 'stable',
},
])(`${currentVersion} returns $expected with $release`, ({ release, expected, }) => {
expect(calculateStability(release, currentVersion)).toBe(expected);
});
test(`${currentVersion} returns alpha when explicit alpha is set`, () => {
const alphaOnly = {
alpha: true,
};
expect(calculateStability(alphaOnly, currentVersion)).toBe('alpha');
});
test.each([
{
release: { beta: '7.6.0', stable: '7.5.0' },
expected: 'stable',
},
{
release: { beta: '7.6', stable: '7.5' },
expected: 'stable',
},
{
release: { beta: '8', stable: '7' },
expected: 'stable',
},
])(`${currentVersion} treats invalid beta/stable ordering as stable-only cutoff. $release should be $expected`, ({ release, expected, }) => {
expect(calculateStability(release, currentVersion)).toBe(expected);
});
//# sourceMappingURL=api-stability.test.js.map