From c9c163c1a4f780de5ea2f246935bd4f7047ead14 Mon Sep 17 00:00:00 2001 From: Vivek Agrawal Date: Mon, 18 Sep 2023 14:39:43 +0530 Subject: [PATCH 1/3] Welcome AI Feature Flag --- .../frontend/shared/vuex/session/index.js | 13 ++-- .../shared/vuex/session/index.spec.js | 65 +++++++++++++++++++ 2 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 contentcuration/contentcuration/frontend/shared/vuex/session/index.spec.js diff --git a/contentcuration/contentcuration/frontend/shared/vuex/session/index.js b/contentcuration/contentcuration/frontend/shared/vuex/session/index.js index d89a56e6d5..2cdd57ec5f 100644 --- a/contentcuration/contentcuration/frontend/shared/vuex/session/index.js +++ b/contentcuration/contentcuration/frontend/shared/vuex/session/index.js @@ -85,14 +85,11 @@ export default { featureFlags(state) { return state.currentUser.feature_flags || {}; }, - hasFeatureEnabled(state, getters) { - /** - * @param {string} flag - shared.constants.FeatureFlagKeys.* - * @return {Boolean} - */ - return function(flag) { - return getters.isAdmin || Boolean(getters.featureFlags[flag]); - }; + isAIFeatureEnabled(state, getters) { + if (getters.loggedIn) { + return Boolean(getters.featureFlags['ai_feature']); + } + return false; }, }, actions: { diff --git a/contentcuration/contentcuration/frontend/shared/vuex/session/index.spec.js b/contentcuration/contentcuration/frontend/shared/vuex/session/index.spec.js new file mode 100644 index 0000000000..5b8d07a0d1 --- /dev/null +++ b/contentcuration/contentcuration/frontend/shared/vuex/session/index.spec.js @@ -0,0 +1,65 @@ +import vuexSessionModule from './index.js'; + +describe('session module feature flag related getters', () => { + describe('featureFlags', () => { + let state, getters; + + beforeEach(() => { + state = { + currentUser: { + feature_flags: { + flag1: true, + flag2: false, + }, + }, + }; + 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('isAIFeatureEnabled', () => { + let state, getters; + + beforeEach(() => { + state = { + currentUser: { + feature_flags: { + ai_feature: true, + }, + }, + }; + getters = { + loggedIn: false, + featureFlags: state.currentUser.feature_flags, + isAIFeatureEnabled: vuexSessionModule.getters.isAIFeatureEnabled, + }; + }); + + it('should return false if not logged in', () => { + expect(getters.isAIFeatureEnabled(state, getters)).toBe(false); + }); + + it('should return true if logged in and ai feature flag is true', () => { + getters.loggedIn = true; + expect(getters.isAIFeatureEnabled(state, getters)).toBe(true); + }); + + it('should return false if logged in and ai feature flag is false', () => { + getters.loggedIn = true; + state.currentUser.feature_flags.ai_feature = false; + expect(getters.isAIFeatureEnabled(state, getters)).toBe(false); + }); + }); +}); From 084dc9517ab7bb2e7572ec76d5457c8eb63e9480 Mon Sep 17 00:00:00 2001 From: Vivek Agrawal Date: Thu, 21 Sep 2023 22:54:54 +0530 Subject: [PATCH 2/3] Bring back hasFeatureEnabled, rewrite tests --- .../frontend/accounts/pages/Main.vue | 6 +- .../channelList/views/ChannelListIndex.vue | 2 + .../frontend/shared/vuex/session/index.js | 12 +++- .../shared/vuex/session/index.spec.js | 69 ++++++++++++------- 4 files changed, 62 insertions(+), 27 deletions(-) diff --git a/contentcuration/contentcuration/frontend/accounts/pages/Main.vue b/contentcuration/contentcuration/frontend/accounts/pages/Main.vue index 49833f60e2..88373472cb 100644 --- a/contentcuration/contentcuration/frontend/accounts/pages/Main.vue +++ b/contentcuration/contentcuration/frontend/accounts/pages/Main.vue @@ -116,7 +116,7 @@