Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import config, { Config } from 'src/utils/config';
import { Feature } from 'src/modules/feature/model/feature';
import { IFeatureFlag } from 'src/modules/feature/constants';
import { SessionMetadata } from 'src/common/models';
import { filterVersion } from 'src/utils/feature-version-filter.helper';

const PATH_CONFIG = config.get('dir_path') as Config['dir_path'];

Expand Down Expand Up @@ -105,6 +106,10 @@ export abstract class FeatureFlagStrategy {
if (filter instanceof FeatureConfigFilter) {
const value = get(serverState, filter?.name);

if (filter?.name.match(/version/i)) {
return filterVersion(filter.cond, value, filter?.value);
}

switch (filter?.cond) {
case FeatureConfigFilterCondition.Eq:
return value === filter?.value;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Import the function to test
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably a leftover

import { FeatureConfigFilterCondition } from 'src/modules/feature/model/features-config';
import { filterVersion } from './feature-version-filter.helper';

describe('filterVersion', () => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❤️

Since these tests work with the path version (major.minor.patch) - we automatically have tests for the minor as well 😸

it('should return true for Eq condition when versions are equal', () => {
expect(filterVersion(FeatureConfigFilterCondition.Eq, '1.0.0', '1.0.0')).toBe(true);
});

it('should return false for Eq condition when versions are not equal', () => {
expect(filterVersion(FeatureConfigFilterCondition.Eq, '1.0.1', '1.0.0')).toBe(false);
});

it('should return false for Neq condition when versions are equal', () => {
expect(filterVersion(FeatureConfigFilterCondition.Neq, '1.0.0', '1.0.0')).toBe(false);
});

it('should return true for Neq condition when versions are not equal', () => {
expect(filterVersion(FeatureConfigFilterCondition.Neq, '1.0.1', '1.0.0')).toBe(true);
});

it('should return true for Gt condition when first version is greater', () => {
expect(filterVersion(FeatureConfigFilterCondition.Gt, '1.0.1', '1.0.0')).toBe(true);
});

it('should return false for Gt condition when first version is not greater', () => {
expect(filterVersion(FeatureConfigFilterCondition.Gt, '1.0.0', '1.0.1')).toBe(false);
});

it('should return true for Gte condition when first version is greater', () => {
expect(filterVersion(FeatureConfigFilterCondition.Gte, '1.0.1', '1.0.0')).toBe(true);
});

it('should return true for Gte condition when versions are equal', () => {
expect(filterVersion(FeatureConfigFilterCondition.Gte, '1.0.0', '1.0.0')).toBe(true);
});

it('should return false for Gte condition when first version is less', () => {
expect(filterVersion(FeatureConfigFilterCondition.Gte, '1.0.0', '1.0.1')).toBe(false);
});

it('should return true for Lt condition when first version is less', () => {
expect(filterVersion(FeatureConfigFilterCondition.Lt, '1.0.0', '1.0.1')).toBe(true);
});

it('should return false for Lt condition when first version is not less', () => {
expect(filterVersion(FeatureConfigFilterCondition.Lt, '1.0.1', '1.0.0')).toBe(false);
});

it('should return true for Lte condition when first version is less', () => {
expect(filterVersion(FeatureConfigFilterCondition.Lte, '1.0.0', '1.0.1')).toBe(true);
});

it('should return true for Lte condition when versions are equal', () => {
expect(filterVersion(FeatureConfigFilterCondition.Lte, '1.0.0', '1.0.0')).toBe(true);
});

it('should return false for Lte condition when first version is greater', () => {
expect(filterVersion(FeatureConfigFilterCondition.Lte, '1.0.1', '1.0.0')).toBe(false);
});

it('should return false for unknown condition', () => {
expect(filterVersion('UnknownCondition' as FeatureConfigFilterCondition, '1.0.0', '1.0.0')).toBe(false);
});
});
22 changes: 22 additions & 0 deletions redisinsight/api/src/utils/feature-version-filter.helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { FeatureConfigFilterCondition } from 'src/modules/feature/model/features-config';
import * as semverCompare from 'node-version-compare';

export const filterVersion = (cond: FeatureConfigFilterCondition, value: string, filterValue: string) => {
const compareRes = semverCompare(value, filterValue);
switch (cond) {
case FeatureConfigFilterCondition.Eq:
return compareRes === 0;
case FeatureConfigFilterCondition.Neq:
return compareRes !== 0;
case FeatureConfigFilterCondition.Gt:
return compareRes > 0;
case FeatureConfigFilterCondition.Gte:
return compareRes >= 0;
case FeatureConfigFilterCondition.Lt:
return compareRes < 0;
case FeatureConfigFilterCondition.Lte:
return compareRes <= 0;
default:
return false;
}
};
Loading