Skip to content

Commit

Permalink
Merge pull request #4283 from vkWeb/welcome_ai
Browse files Browse the repository at this point in the history
Welcome AI
  • Loading branch information
akolson authored Sep 22, 2023
2 parents 1a62ea9 + aa90f57 commit 87b5413
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Session, User } from 'shared/data/resources';
import { forceServerSync } from 'shared/data/serverSync';
import translator from 'shared/translator';
import { applyMods } from 'shared/data/applyRemoteChanges';
import { FeatureFlagKeys } from 'shared/constants';

function langCode(language) {
// Turns a Django language name (en-gb) into an ISO language code (en-GB)
Expand Down Expand Up @@ -94,6 +95,12 @@ export default {
return getters.isAdmin || Boolean(getters.featureFlags[flag]);
};
},
isAIFeatureEnabled(state, getters) {
if (getters.loggedIn) {
return getters.hasFeatureEnabled(FeatureFlagKeys.ai_feature);
}
return false;
},
},
actions: {
saveSession(context, currentUser) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import vuexSessionModule from './index.js';
import { FeatureFlagKeys } from 'shared/constants';

describe('session module feature flag related getters', () => {
let state;
beforeEach(() => {
state = {
currentUser: {
feature_flags: {
true_flag: true,
false_flag: false,
},
},
};
state.currentUser.feature_flags[FeatureFlagKeys.ai_feature] = true;
});

describe('featureFlags', () => {
let getters;
beforeEach(() => {
getters = {
featureFlags: vuexSessionModule.getters.featureFlags,
};
});
it('should return feature flags from current user', () => {
const result = getters.featureFlags(state);
expect(result).toEqual(state.currentUser.feature_flags);
});

it('should return empty object if no feature flags set', () => {
state.currentUser = {};
const result = getters.featureFlags(state);
expect(result).toEqual({});
});
});

describe('hasFeatureEnabled', () => {
let getters;
beforeEach(() => {
getters = {
featureFlags: state.currentUser.feature_flags,
hasFeatureEnabled: vuexSessionModule.getters.hasFeatureEnabled,
};
});
it('for admin user returns true even when the flag value is false', () => {
getters.isAdmin = true;
expect(getters.hasFeatureEnabled(state, getters)('true_flag')).toBe(true);
expect(getters.hasFeatureEnabled(state, getters)('false_flag')).toBe(true);
});

it('returns flag value for non-admin user', () => {
getters.isAdmin = false;
expect(getters.hasFeatureEnabled(state, getters)('true_flag')).toBe(true);
expect(getters.hasFeatureEnabled(state, getters)('false_flag')).toBe(false);
});
});

describe('isAIFeatureEnabled', () => {
let getters;
beforeEach(() => {
getters = {
loggedIn: true,
hasFeatureEnabled: vuexSessionModule.getters.hasFeatureEnabled(state, {
featureFlags: vuexSessionModule.getters.featureFlags(state),
isAdmin: false,
}),
isAIFeatureEnabled: vuexSessionModule.getters.isAIFeatureEnabled,
};
});
it('should return false if not logged in', () => {
getters.loggedIn = false;
expect(getters.isAIFeatureEnabled(state, getters)).toBe(false);
});

it('should return true if logged in and ai feature flag is true', () => {
expect(getters.isAIFeatureEnabled(state, getters)).toBe(true);
});

it('should return false if logged in and ai feature flag is false', () => {
state.currentUser.feature_flags[FeatureFlagKeys.ai_feature] = false;
expect(getters.isAIFeatureEnabled(state, getters)).toBe(false);
});
});
});

0 comments on commit 87b5413

Please sign in to comment.