mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-09 00:18:00 +01:00
refactor: remove separate admin api feature flag (#5228)
This PR will remove the feature flag to separate the admin and client api
This commit is contained in:
parent
4bacd3e055
commit
fa85e10eac
@ -108,7 +108,6 @@ exports[`should create default config 1`] = `
|
||||
"proPlanAutoCharge": false,
|
||||
"responseTimeWithAppNameKillSwitch": false,
|
||||
"scheduledConfigurationChanges": false,
|
||||
"separateAdminClientApi": false,
|
||||
"strictSchemaValidation": false,
|
||||
"useLastSeenRefactor": false,
|
||||
"variantTypeNumber": false,
|
||||
|
@ -161,15 +161,8 @@ export default class FeatureController extends Controller {
|
||||
private async resolveFeaturesAndSegments(
|
||||
query?: IFeatureToggleQuery,
|
||||
): Promise<[FeatureConfigurationClient[], IClientSegment[]]> {
|
||||
if (this.flagResolver.isEnabled('separateAdminClientApi')) {
|
||||
return Promise.all([
|
||||
this.clientFeatureToggleService.getClientFeatures(query),
|
||||
this.segmentService.getActiveForClient(),
|
||||
]);
|
||||
}
|
||||
|
||||
return Promise.all([
|
||||
this.featureToggleService.getClientFeatures(query),
|
||||
this.clientFeatureToggleService.getClientFeatures(query),
|
||||
this.segmentService.getActiveForClient(),
|
||||
]);
|
||||
}
|
||||
@ -310,13 +303,9 @@ export default class FeatureController extends Controller {
|
||||
const featureQuery = await this.resolveQuery(req);
|
||||
const q = { ...featureQuery, namePrefix: name };
|
||||
|
||||
let toggles = await this.featureToggleService.getClientFeatures(q);
|
||||
|
||||
if (this.flagResolver.isEnabled('separateAdminClientApi')) {
|
||||
toggles = await this.clientFeatureToggleService.getClientFeatures(
|
||||
q,
|
||||
);
|
||||
}
|
||||
const toggles = await this.clientFeatureToggleService.getClientFeatures(
|
||||
q,
|
||||
);
|
||||
|
||||
const toggle = toggles.find((t) => t.name === name);
|
||||
if (!toggle) {
|
||||
|
@ -187,53 +187,3 @@ test('should return correct data structure from /api/client/features', async ()
|
||||
|
||||
expect(result.body.features).toEqual(apiClientResponse);
|
||||
});
|
||||
|
||||
test('should return correct data structure from /api/client/features | separateAdminClientApi', async () => {
|
||||
const appWithFeatureFlag = await setupAppWithCustomConfig(
|
||||
db.stores,
|
||||
{
|
||||
experimental: {
|
||||
flags: {
|
||||
strictSchemaValidation: true,
|
||||
dependentFeatures: true,
|
||||
separateAdminClientApi: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
db.rawDatabase,
|
||||
);
|
||||
|
||||
await db.rawDatabase.raw('DELETE FROM features');
|
||||
|
||||
await appWithFeatureFlag.createFeature('test1', 'default');
|
||||
await appWithFeatureFlag.createFeature('test2', 'default');
|
||||
|
||||
await appWithFeatureFlag.addStrategyToFeatureEnv(
|
||||
{
|
||||
name: 'flexibleRollout',
|
||||
constraints: [],
|
||||
parameters: { rollout: '100' },
|
||||
},
|
||||
DEFAULT_ENV,
|
||||
'test1',
|
||||
);
|
||||
|
||||
await appWithFeatureFlag.addStrategyToFeatureEnv(
|
||||
{
|
||||
name: 'default',
|
||||
constraints: [
|
||||
{ contextName: 'userId', operator: 'IN', values: ['123'] },
|
||||
],
|
||||
parameters: {},
|
||||
},
|
||||
DEFAULT_ENV,
|
||||
'test2',
|
||||
);
|
||||
|
||||
const result = await appWithFeatureFlag.request
|
||||
.get('/api/client/features')
|
||||
.expect('Content-Type', /json/)
|
||||
.expect(200);
|
||||
|
||||
expect(result.body.features).toEqual(apiClientResponse);
|
||||
});
|
||||
|
@ -1048,16 +1048,9 @@ class FeatureToggleService {
|
||||
async getPlaygroundFeatures(
|
||||
query?: IFeatureToggleQuery,
|
||||
): Promise<FeatureConfigurationClient[]> {
|
||||
// Remove with with feature flag
|
||||
const [featuresFromClientStore, featuresFromFeatureToggleStore] =
|
||||
await Promise.all([
|
||||
await this.clientFeatureToggleStore.getPlayground(query || {}),
|
||||
await this.featureToggleStore.getPlaygroundFeatures(query),
|
||||
]);
|
||||
|
||||
const features = this.flagResolver.isEnabled('separateAdminClientApi')
|
||||
? featuresFromFeatureToggleStore
|
||||
: featuresFromClientStore;
|
||||
const features = await this.featureToggleStore.getPlaygroundFeatures(
|
||||
query,
|
||||
);
|
||||
|
||||
return features as FeatureConfigurationClient[];
|
||||
}
|
||||
@ -1076,23 +1069,11 @@ class FeatureToggleService {
|
||||
archived: boolean = false,
|
||||
): Promise<FeatureToggle[]> {
|
||||
// Remove with with feature flag
|
||||
const [featuresFromClientStore, featuresFromFeatureToggleStore] =
|
||||
await Promise.all([
|
||||
(await this.clientFeatureToggleStore.getAdmin({
|
||||
featureQuery: query,
|
||||
userId: userId,
|
||||
archived: false,
|
||||
})) as FeatureToggle[],
|
||||
await this.featureToggleStore.getFeatureToggleList(
|
||||
query,
|
||||
userId,
|
||||
archived,
|
||||
),
|
||||
]);
|
||||
|
||||
const features = this.flagResolver.isEnabled('separateAdminClientApi')
|
||||
? featuresFromFeatureToggleStore
|
||||
: featuresFromClientStore;
|
||||
const features = await this.featureToggleStore.getFeatureToggleList(
|
||||
query,
|
||||
userId,
|
||||
archived,
|
||||
);
|
||||
|
||||
if (this.flagResolver.isEnabled('privateProjects') && userId) {
|
||||
const projectAccess =
|
||||
|
@ -23,7 +23,6 @@ beforeAll(async () => {
|
||||
flags: {
|
||||
strictSchemaValidation: true,
|
||||
dependentFeatures: true,
|
||||
separateAdminClientApi: true,
|
||||
useLastSeenRefactor: true,
|
||||
},
|
||||
},
|
||||
|
@ -38,7 +38,9 @@ const irrelevantDate = new Date();
|
||||
|
||||
beforeAll(async () => {
|
||||
const config = createTestConfig({
|
||||
experimental: { flags: { featureNamingPattern: true } },
|
||||
experimental: {
|
||||
flags: { featureNamingPattern: true, playgroundImprovements: true },
|
||||
},
|
||||
});
|
||||
db = await dbInit(
|
||||
'feature_toggle_service_v2_service_serial',
|
||||
@ -690,75 +692,3 @@ test('Should return last seen at per environment', async () => {
|
||||
new Date(lastSeenAtStoreDate),
|
||||
);
|
||||
});
|
||||
|
||||
test('Should return same object for /api/admin/features | separateAdminClientApi', async () => {
|
||||
const featureName = 'same-object-for-features';
|
||||
const projectId = 'default';
|
||||
|
||||
const userName = 'same-object-user';
|
||||
|
||||
await service.createFeatureToggle(
|
||||
projectId,
|
||||
{
|
||||
name: featureName,
|
||||
},
|
||||
userName,
|
||||
);
|
||||
|
||||
const data = await service.getFeatureToggles();
|
||||
|
||||
// Test with feature flag on
|
||||
const config = createTestConfig({
|
||||
experimental: { flags: { useLastSeenRefactor: true } },
|
||||
});
|
||||
|
||||
const featureService = await createFeatureToggleService(
|
||||
db.rawDatabase,
|
||||
config,
|
||||
);
|
||||
|
||||
const toggledData = await featureService.getFeatureToggles();
|
||||
|
||||
const foundToggleOne = data.find((feature) => feature.name === featureName);
|
||||
const foundToggleTwo = toggledData.find(
|
||||
(feature) => feature.name === featureName,
|
||||
);
|
||||
|
||||
expect(foundToggleOne).toEqual(foundToggleTwo);
|
||||
});
|
||||
|
||||
test('Should return same object for playground | separateAdminClientApi', async () => {
|
||||
const featureName = 'same-object-for-playground';
|
||||
const projectId = 'default';
|
||||
|
||||
const userName = 'same-object-user-playground';
|
||||
|
||||
await service.createFeatureToggle(
|
||||
projectId,
|
||||
{
|
||||
name: featureName,
|
||||
},
|
||||
userName,
|
||||
);
|
||||
|
||||
const data = await service.getPlaygroundFeatures();
|
||||
|
||||
// Test with feature flag on
|
||||
const config = createTestConfig({
|
||||
experimental: { flags: { useLastSeenRefactor: true } },
|
||||
});
|
||||
|
||||
const featureService = await createFeatureToggleService(
|
||||
db.rawDatabase,
|
||||
config,
|
||||
);
|
||||
|
||||
const toggledData = await featureService.getPlaygroundFeatures();
|
||||
|
||||
const foundToggleOne = data.find((feature) => feature.name === featureName);
|
||||
const foundToggleTwo = toggledData.find(
|
||||
(feature) => feature.name === featureName,
|
||||
);
|
||||
|
||||
expect(foundToggleOne).toEqual(foundToggleTwo);
|
||||
});
|
||||
|
@ -27,7 +27,6 @@ beforeAll(async () => {
|
||||
dependentFeatures: true,
|
||||
playgroundImprovements: true,
|
||||
useLastSeenRefactor: true,
|
||||
separateAdminClientApi: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -31,7 +31,6 @@ export type IFlagKey =
|
||||
| 'disableMetrics'
|
||||
| 'useLastSeenRefactor'
|
||||
| 'banners'
|
||||
| 'separateAdminClientApi'
|
||||
| 'disableEnvsOnRevive'
|
||||
| 'playgroundImprovements'
|
||||
| 'featureSwitchRefactor'
|
||||
@ -149,10 +148,6 @@ const flags: IFlags = {
|
||||
process.env.UNLEASH_EXPERIMENTAL_BANNERS,
|
||||
false,
|
||||
),
|
||||
separateAdminClientApi: parseEnvVarBoolean(
|
||||
process.env.UNLEASH_EXPERIMENTAL_SEPARATE_ADMIN_CLIENT_API,
|
||||
false,
|
||||
),
|
||||
disableEnvsOnRevive: parseEnvVarBoolean(
|
||||
process.env.UNLEASH_EXPERIMENTAL_DISABLE_ENVS_ON_REVIVE,
|
||||
false,
|
||||
|
@ -45,7 +45,6 @@ process.nextTick(async () => {
|
||||
dependentFeatures: true,
|
||||
useLastSeenRefactor: true,
|
||||
disableEnvsOnRevive: true,
|
||||
separateAdminClientApi: true,
|
||||
playgroundImprovements: true,
|
||||
featureSwitchRefactor: true,
|
||||
featureSearchAPI: true,
|
||||
|
Loading…
Reference in New Issue
Block a user