From 0d58371f11ee1c7dc8cbe9705837e146014302fa Mon Sep 17 00:00:00 2001 From: sjaanus Date: Wed, 30 Nov 2022 08:47:57 +0100 Subject: [PATCH] Some tweaks to favorites (#2563) This is follow up PR to https://github.com/Unleash/unleash/pull/2550, which addresses the issues that came up from reviews. --- src/lib/db/feature-strategy-store.ts | 16 +++--- src/test/e2e/api/admin/favorites.e2e.test.ts | 55 +++++++++----------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/lib/db/feature-strategy-store.ts b/src/lib/db/feature-strategy-store.ts index 8d62a2dc7ca..97c1ede7d02 100644 --- a/src/lib/db/feature-strategy-store.ts +++ b/src/lib/db/feature-strategy-store.ts @@ -259,14 +259,16 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore { let selectColumns = ['features_view.*']; if (userId && this.flagResolver.isEnabled('favorites')) { - query = query.leftJoin(`favorite_features as ff`, function () { - this.on('ff.feature', 'features_view.name').andOnVal( - 'ff.user_id', - '=', - userId, - ); + query = query.leftJoin(`favorite_features`, function () { + this.on( + 'favorite_features.feature', + 'features_view.name', + ).andOnVal('favorite_features.user_id', '=', userId); }); - selectColumns = [...selectColumns, 'ff.feature as favorite']; + selectColumns = [ + ...selectColumns, + 'favorite_features.feature as favorite', + ]; } const rows = await query.select(selectColumns); stopTimer(); diff --git a/src/test/e2e/api/admin/favorites.e2e.test.ts b/src/test/e2e/api/admin/favorites.e2e.test.ts index 6736c6baecd..ce86fcf2e6f 100644 --- a/src/test/e2e/api/admin/favorites.e2e.test.ts +++ b/src/test/e2e/api/admin/favorites.e2e.test.ts @@ -20,8 +20,6 @@ const createFeature = async (featureName: string) => { }) .set('Content-Type', 'application/json') .expect(201); - - // await projectService.addEnvironmentToProject('default', environment); }; const loginRegularUser = () => @@ -39,6 +37,20 @@ const createUserEditorAccess = async (name, email) => { return user; }; +const favoriteFeature = async (featureName: string) => { + await app.request + .post(`/api/admin/projects/default/features/${featureName}/favorites`) + .set('Content-Type', 'application/json') + .expect(200); +}; + +const unfavoriteFeature = async (featureName: string) => { + await app.request + .delete(`/api/admin/projects/default/features/${featureName}/favorites`) + .set('Content-Type', 'application/json') + .expect(200); +}; + beforeAll(async () => { db = await dbInit('favorites_api_serial', getLogger); app = await setupAppWithAuth(db.stores); @@ -67,14 +79,10 @@ beforeEach(async () => { await loginRegularUser(); }); -test('should have favorites true in project endpoint', async () => { +test('should be favorited in project endpoint', async () => { const featureName = 'test-feature'; await createFeature(featureName); - - await app.request - .post(`/api/admin/projects/default/features/${featureName}/favorites`) - .set('Content-Type', 'application/json') - .expect(200); + await favoriteFeature(featureName); const { body } = await app.request .get(`/api/admin/projects/default/features`) @@ -88,7 +96,7 @@ test('should have favorites true in project endpoint', async () => { }); }); -test('should have favorites false by default', async () => { +test('feature should not be favorited by default', async () => { const featureName = 'test-feature'; await createFeature(featureName); @@ -104,14 +112,10 @@ test('should have favorites false by default', async () => { }); }); -test('should have favorites true in admin endpoint', async () => { +test('should be favorited in admin endpoint', async () => { const featureName = 'test-feature'; await createFeature(featureName); - - await app.request - .post(`/api/admin/projects/default/features/${featureName}/favorites`) - .set('Content-Type', 'application/json') - .expect(200); + await favoriteFeature(featureName); const { body } = await app.request .get(`/api/admin/features`) @@ -125,14 +129,10 @@ test('should have favorites true in admin endpoint', async () => { }); }); -test('should have favorites true in project single feature endpoint', async () => { +test('should be favorited in project single feature endpoint', async () => { const featureName = 'test-feature'; await createFeature(featureName); - - await app.request - .post(`/api/admin/projects/default/features/${featureName}/favorites`) - .set('Content-Type', 'application/json') - .expect(200); + await favoriteFeature(featureName); const { body } = await app.request .get(`/api/admin/projects/default/features/${featureName}`) @@ -145,19 +145,12 @@ test('should have favorites true in project single feature endpoint', async () = }); }); -test('should have favorites false after deleting favorite', async () => { +test('should be able to unfavorite feature', async () => { const featureName = 'test-feature'; await createFeature(featureName); - await app.request - .post(`/api/admin/projects/default/features/${featureName}/favorites`) - .set('Content-Type', 'application/json') - .expect(200); - - await app.request - .delete(`/api/admin/projects/default/features/${featureName}/favorites`) - .set('Content-Type', 'application/json') - .expect(200); + await favoriteFeature(featureName); + await unfavoriteFeature(featureName); const { body } = await app.request .get(`/api/admin/projects/default/features/${featureName}`)