1
0
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:
Fredrik Strand Oseberg 2023-11-08 12:24:11 +01:00 committed by GitHub
parent 4bacd3e055
commit fa85e10eac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 15 additions and 174 deletions

View File

@ -108,7 +108,6 @@ exports[`should create default config 1`] = `
"proPlanAutoCharge": false,
"responseTimeWithAppNameKillSwitch": false,
"scheduledConfigurationChanges": false,
"separateAdminClientApi": false,
"strictSchemaValidation": false,
"useLastSeenRefactor": false,
"variantTypeNumber": false,

View File

@ -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) {

View File

@ -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);
});

View File

@ -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 =

View File

@ -23,7 +23,6 @@ beforeAll(async () => {
flags: {
strictSchemaValidation: true,
dependentFeatures: true,
separateAdminClientApi: true,
useLastSeenRefactor: true,
},
},

View File

@ -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);
});

View File

@ -27,7 +27,6 @@ beforeAll(async () => {
dependentFeatures: true,
playgroundImprovements: true,
useLastSeenRefactor: true,
separateAdminClientApi: true,
},
},
},

View File

@ -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,

View File

@ -45,7 +45,6 @@ process.nextTick(async () => {
dependentFeatures: true,
useLastSeenRefactor: true,
disableEnvsOnRevive: true,
separateAdminClientApi: true,
playgroundImprovements: true,
featureSwitchRefactor: true,
featureSearchAPI: true,