unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
68 lines • 3.17 kB
JavaScript
import { createTestConfig } from '../../../test/config/test-config.js';
import { createFakeReleasePlanMilestoneStrategyService } from './createReleasePlanMilestoneStrategyService.js';
import { TEST_AUDIT_USER } from '../../types/core.js';
import { DEFAULT_ENV } from '../../util/constants.js';
import { ReleasePlanMilestoneStrategyService } from './release-plan-milestone-strategy-service.js';
import { FakeChangeRequestAccessReadModel } from '../change-request-access-service/fake-change-request-access-read-model.js';
import { SKIP_CHANGE_REQUEST, } from '../../server-impl.js';
const defaultContext = {
projectId: 'default',
environment: DEFAULT_ENV,
featureName: 'Demo',
};
let featureToggleService;
let milestoneStrategyStore;
let milestoneStrategyService;
let featureStrategiesStore;
beforeAll(() => {
const config = createTestConfig();
const fakeService = createFakeReleasePlanMilestoneStrategyService(config);
featureToggleService = fakeService.featureToggleService;
featureStrategiesStore = fakeService.featureStrategiesStore;
milestoneStrategyStore = fakeService.milestoneStrategyStore;
milestoneStrategyService = fakeService.releasePlanMilestoneStrategyService;
});
test('also updates feature strategy when present', async () => {
const milestoneStrategy = await milestoneStrategyStore.insert({
milestoneId: 'milestone-1',
name: 'default',
sortOrder: 0,
parameters: {},
constraints: [],
variants: [],
});
await featureStrategiesStore.insertStrategy({
id: milestoneStrategy.id,
projectId: defaultContext.projectId,
featureName: defaultContext.featureName,
environment: defaultContext.environment,
strategyName: milestoneStrategy.name,
parameters: milestoneStrategy.parameters,
constraints: milestoneStrategy.constraints,
variants: milestoneStrategy.variants,
sortOrder: milestoneStrategy.sortOrder,
createdAt: new Date(),
});
await milestoneStrategyService.updateStrategy(milestoneStrategy.id, {
title: 'updated-title',
parameters: { rollout: '50' },
constraints: [],
variants: [],
}, defaultContext, TEST_AUDIT_USER);
const updatedFeatureStrategy = await featureStrategiesStore.get(milestoneStrategy.id);
expect(updatedFeatureStrategy).toEqual(expect.objectContaining({
title: 'updated-title',
parameters: expect.objectContaining({ rollout: '50' }),
}));
});
test('throws PermissionError when user cannot bypass change requests', async () => {
const config = createTestConfig();
const service = new ReleasePlanMilestoneStrategyService({ releasePlanMilestoneStrategyStore: milestoneStrategyStore }, { featureToggleService }, new FakeChangeRequestAccessReadModel(false), config);
await expect(service.updateStrategy('some-id', {
title: 'updated-title',
parameters: { rollout: '50' },
constraints: [],
variants: [],
}, defaultContext, TEST_AUDIT_USER)).rejects.toThrow(SKIP_CHANGE_REQUEST);
});
//# sourceMappingURL=release-plan-milestone-strategy-service.test.js.map