refactor: Feature flags getter (#22015)

This commit is contained in:
Yongjie Zhao 2022-11-03 22:30:22 +08:00 committed by GitHub
parent 97e3e790a3
commit d52d72ce64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 33 deletions

View File

@ -87,14 +87,11 @@ declare global {
}
}
export function isFeatureEnabled(feature: FeatureFlag) {
export function isFeatureEnabled(feature: FeatureFlag): boolean {
try {
return !!window.featureFlags[feature];
} catch (error) {
// eslint-disable-next-line no-console
console.error(`Failed to query feature flag ${feature} (see error below)`);
// eslint-disable-next-line no-console
console.error(error);
return false;
console.error(`Failed to query feature flag ${feature}`);
}
return false;
}

View File

@ -16,48 +16,41 @@
* specific language governing permissions and limitations
* under the License.
*/
import { FeatureFlag, isFeatureEnabled } from '@superset-ui/core';
const originalFeatureFlags = window.featureFlags;
// eslint-disable-next-line no-console
const originalConsoleError = console.error;
const reset = () => {
window.featureFlags = originalFeatureFlags;
// eslint-disable-next-line no-console
console.error = originalConsoleError;
};
import mockConsole from 'jest-mock-console';
import { isFeatureEnabled, FeatureFlag } from '@superset-ui/core';
it('returns false and raises console error if feature flags have not been initialized', () => {
// eslint-disable-next-line no-console
console.error = jest.fn();
delete (window as any).featureFlags;
mockConsole();
Object.defineProperty(window, 'featureFlags', {
value: undefined,
});
expect(isFeatureEnabled(FeatureFlag.ALLOW_DASHBOARD_DOMAIN_SHARDING)).toEqual(
false,
);
// eslint-disable-next-line no-console
expect(console.error).toHaveBeenNthCalledWith(
1,
'Failed to query feature flag ALLOW_DASHBOARD_DOMAIN_SHARDING (see error below)',
expect(console.error).toHaveBeenCalled();
// @ts-expect-error
expect(console.error.mock.calls[0][0]).toEqual(
'Failed to query feature flag ALLOW_DASHBOARD_DOMAIN_SHARDING',
);
reset();
});
it('returns false for unset feature flag', () => {
Object.defineProperty(window, 'featureFlags', {
value: {},
});
expect(isFeatureEnabled(FeatureFlag.ALLOW_DASHBOARD_DOMAIN_SHARDING)).toEqual(
false,
);
reset();
});
it('returns true for set feature flag', () => {
window.featureFlags = {
[FeatureFlag.CLIENT_CACHE]: true,
};
Object.defineProperty(window, 'featureFlags', {
value: {
CLIENT_CACHE: true,
},
});
expect(isFeatureEnabled(FeatureFlag.CLIENT_CACHE)).toEqual(true);
reset();
});