2023-06-13 15:54:20 +02:00
|
|
|
import dbInit from '../../test/e2e/helpers/database-init';
|
|
|
|
import getLogger from '../../test/fixtures/no-logger';
|
2023-10-11 09:38:57 +02:00
|
|
|
import FeatureStrategiesStore from '../features/feature-toggle/feature-toggle-strategies-store';
|
|
|
|
import FeatureToggleStore from '../features/feature-toggle/feature-toggle-store';
|
2023-06-13 15:54:20 +02:00
|
|
|
import StrategyStore from './strategy-store';
|
2023-07-26 11:31:26 +02:00
|
|
|
import { IFeatureStrategy, PartialSome } from '../types';
|
2023-06-13 15:54:20 +02:00
|
|
|
|
|
|
|
let db;
|
|
|
|
|
|
|
|
beforeAll(async () => {
|
|
|
|
db = await dbInit('feature_strategy_store_serial', getLogger);
|
|
|
|
getLogger.setMuteError(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
afterAll(async () => {
|
|
|
|
if (db) {
|
|
|
|
await db.destroy();
|
|
|
|
}
|
|
|
|
getLogger.setMuteError(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('returns 0 if no custom strategies', async () => {
|
|
|
|
// Arrange
|
|
|
|
const featureStrategiesStore: FeatureStrategiesStore =
|
|
|
|
db.stores.featureStrategiesStore;
|
|
|
|
|
|
|
|
// Act
|
|
|
|
const inUseCount =
|
|
|
|
await featureStrategiesStore.getCustomStrategiesInUseCount();
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
expect(inUseCount).toEqual(0);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('returns 0 if no custom strategies are in use', async () => {
|
|
|
|
// Arrange
|
|
|
|
const featureToggleStore: FeatureToggleStore = db.stores.featureToggleStore;
|
|
|
|
const featureStrategiesStore: FeatureStrategiesStore =
|
|
|
|
db.stores.featureStrategiesStore;
|
|
|
|
const strategyStore: StrategyStore = db.stores.strategyStore;
|
|
|
|
|
|
|
|
featureToggleStore.create('default', {
|
|
|
|
name: 'test-toggle-2',
|
|
|
|
});
|
|
|
|
|
|
|
|
strategyStore.createStrategy({
|
|
|
|
name: 'strategy-2',
|
|
|
|
built_in: 0,
|
|
|
|
parameters: [],
|
|
|
|
description: '',
|
|
|
|
createdAt: '2023-06-09T09:00:12.242Z',
|
|
|
|
});
|
|
|
|
|
|
|
|
// Act
|
|
|
|
const inUseCount =
|
|
|
|
await featureStrategiesStore.getCustomStrategiesInUseCount();
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
expect(inUseCount).toEqual(0);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('counts custom strategies in use', async () => {
|
|
|
|
// Arrange
|
|
|
|
const featureToggleStore: FeatureToggleStore = db.stores.featureToggleStore;
|
|
|
|
const featureStrategiesStore: FeatureStrategiesStore =
|
|
|
|
db.stores.featureStrategiesStore;
|
|
|
|
const strategyStore: StrategyStore = db.stores.strategyStore;
|
|
|
|
|
|
|
|
await featureToggleStore.create('default', {
|
|
|
|
name: 'test-toggle',
|
|
|
|
});
|
|
|
|
|
|
|
|
await strategyStore.createStrategy({
|
|
|
|
name: 'strategy-1',
|
|
|
|
built_in: 0,
|
|
|
|
parameters: [],
|
|
|
|
description: '',
|
|
|
|
createdAt: '2023-06-09T09:00:12.242Z',
|
|
|
|
});
|
|
|
|
|
|
|
|
await featureStrategiesStore.createStrategyFeatureEnv({
|
|
|
|
projectId: 'default',
|
|
|
|
featureName: 'test-toggle',
|
|
|
|
strategyName: 'strategy-1',
|
|
|
|
environment: 'default',
|
|
|
|
parameters: {},
|
|
|
|
constraints: [],
|
2023-07-13 16:04:55 +02:00
|
|
|
variants: [],
|
2023-06-13 15:54:20 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
// Act
|
|
|
|
const inUseCount =
|
|
|
|
await featureStrategiesStore.getCustomStrategiesInUseCount();
|
|
|
|
|
|
|
|
// Assert
|
|
|
|
expect(inUseCount).toEqual(1);
|
|
|
|
});
|
2023-07-26 11:31:26 +02:00
|
|
|
|
|
|
|
const baseStrategy: PartialSome<IFeatureStrategy, 'id' | 'createdAt'> = {
|
|
|
|
projectId: 'default',
|
|
|
|
featureName: 'test-toggle-increment',
|
|
|
|
strategyName: 'strategy-1',
|
|
|
|
environment: 'default',
|
|
|
|
parameters: {},
|
|
|
|
constraints: [],
|
|
|
|
variants: [],
|
|
|
|
};
|
|
|
|
test('increment sort order on each new insert', async () => {
|
|
|
|
const featureToggleStore: FeatureToggleStore = db.stores.featureToggleStore;
|
|
|
|
const featureStrategiesStore: FeatureStrategiesStore =
|
|
|
|
db.stores.featureStrategiesStore;
|
|
|
|
|
|
|
|
await featureToggleStore.create('default', {
|
|
|
|
name: 'test-toggle-increment',
|
|
|
|
});
|
|
|
|
|
|
|
|
const { id: firstId } =
|
|
|
|
await featureStrategiesStore.createStrategyFeatureEnv({
|
|
|
|
...baseStrategy,
|
|
|
|
featureName: 'test-toggle-increment',
|
|
|
|
strategyName: 'strategy-1',
|
|
|
|
// sort order implicitly 0
|
|
|
|
});
|
|
|
|
const { id: secondId } =
|
|
|
|
await featureStrategiesStore.createStrategyFeatureEnv({
|
|
|
|
...baseStrategy,
|
|
|
|
featureName: 'test-toggle-increment',
|
|
|
|
strategyName: 'strategy-2',
|
|
|
|
sortOrder: 50, // explicit sort order
|
|
|
|
});
|
|
|
|
const { id: thirdId } =
|
|
|
|
await featureStrategiesStore.createStrategyFeatureEnv({
|
|
|
|
...baseStrategy,
|
|
|
|
featureName: 'test-toggle-increment',
|
|
|
|
strategyName: 'strategy-2',
|
|
|
|
// implicit sort order incremented by 1
|
|
|
|
});
|
|
|
|
|
|
|
|
const firstStrategy = await featureStrategiesStore.getStrategyById(firstId);
|
|
|
|
const secondStrategy = await featureStrategiesStore.getStrategyById(
|
|
|
|
secondId,
|
|
|
|
);
|
|
|
|
const thirdStrategy = await featureStrategiesStore.getStrategyById(thirdId);
|
|
|
|
|
|
|
|
expect(firstStrategy.sortOrder).toEqual(0);
|
|
|
|
expect(secondStrategy.sortOrder).toEqual(50);
|
|
|
|
expect(thirdStrategy.sortOrder).toEqual(51);
|
|
|
|
});
|