unleash-server 4.2.0-beta.8 → 4.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/addons/addon.d.ts +2 -1
- package/dist/lib/addons/addon.js.map +1 -1
- package/dist/lib/addons/datadog.d.ts +4 -17
- package/dist/lib/addons/datadog.js +3 -109
- package/dist/lib/addons/datadog.js.map +1 -1
- package/dist/lib/addons/datadog.test.js +3 -0
- package/dist/lib/addons/datadog.test.js.map +1 -1
- package/dist/lib/addons/feature-event-formatter-md.d.ts +25 -0
- package/dist/lib/addons/feature-event-formatter-md.js +116 -0
- package/dist/lib/addons/feature-event-formatter-md.js.map +1 -0
- package/dist/lib/addons/index.d.ts +1 -0
- package/dist/lib/addons/index.js.map +1 -1
- package/dist/lib/addons/slack.d.ts +3 -12
- package/dist/lib/addons/slack.js +5 -110
- package/dist/lib/addons/slack.js.map +1 -1
- package/dist/lib/addons/slack.test.js +8 -0
- package/dist/lib/addons/slack.test.js.map +1 -1
- package/dist/lib/addons/teams.d.ts +4 -17
- package/dist/lib/addons/teams.js +7 -109
- package/dist/lib/addons/teams.js.map +1 -1
- package/dist/lib/addons/teams.test.js +3 -0
- package/dist/lib/addons/teams.test.js.map +1 -1
- package/dist/lib/addons/webhook.d.ts +8 -2
- package/dist/lib/addons/webhook.js +0 -1
- package/dist/lib/addons/webhook.js.map +1 -1
- package/dist/lib/addons/webhook.test.js +2 -0
- package/dist/lib/addons/webhook.test.js.map +1 -1
- package/dist/lib/create-config.js +6 -5
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/db/client-instance-store.js +2 -2
- package/dist/lib/db/client-instance-store.js.map +1 -1
- package/dist/lib/db/client-metrics-db.js +2 -2
- package/dist/lib/db/client-metrics-db.js.map +1 -1
- package/dist/lib/db/client-metrics-store-v2.js +5 -1
- package/dist/lib/db/client-metrics-store-v2.js.map +1 -1
- package/dist/lib/db/client-metrics-store.js +2 -2
- package/dist/lib/db/client-metrics-store.js.map +1 -1
- package/dist/lib/db/event-store.d.ts +10 -6
- package/dist/lib/db/event-store.js +21 -1
- package/dist/lib/db/event-store.js.map +1 -1
- package/dist/lib/db/session-store.js +2 -1
- package/dist/lib/db/session-store.js.map +1 -1
- package/dist/lib/error/minimum-one-environment-error.d.ts +5 -0
- package/dist/lib/error/minimum-one-environment-error.js +24 -0
- package/dist/lib/error/minimum-one-environment-error.js.map +1 -0
- package/dist/lib/metrics.js +20 -12
- package/dist/lib/metrics.js.map +1 -1
- package/dist/lib/metrics.test.js +1 -0
- package/dist/lib/metrics.test.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.js +2 -17
- package/dist/lib/middleware/rbac-middleware.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.test.js +2 -21
- package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
- package/dist/lib/middleware/secure-headers.js +2 -1
- package/dist/lib/middleware/secure-headers.js.map +1 -1
- package/dist/lib/middleware/session-db.js +2 -3
- package/dist/lib/middleware/session-db.js.map +1 -1
- package/dist/lib/routes/admin-api/config.d.ts +5 -2
- package/dist/lib/routes/admin-api/config.js +9 -11
- package/dist/lib/routes/admin-api/config.js.map +1 -1
- package/dist/lib/routes/admin-api/event.d.ts +8 -4
- package/dist/lib/routes/admin-api/event.js +8 -10
- package/dist/lib/routes/admin-api/event.js.map +1 -1
- package/dist/lib/routes/admin-api/feature.d.ts +2 -3
- package/dist/lib/routes/admin-api/feature.js +37 -34
- package/dist/lib/routes/admin-api/feature.js.map +1 -1
- package/dist/lib/routes/admin-api/project/features.js +11 -8
- package/dist/lib/routes/admin-api/project/features.js.map +1 -1
- package/dist/lib/routes/admin-api/state.js +2 -3
- package/dist/lib/routes/admin-api/state.js.map +1 -1
- package/dist/lib/routes/admin-api/strategy.test.js +25 -38
- package/dist/lib/routes/admin-api/strategy.test.js.map +1 -1
- package/dist/lib/routes/admin-api/user-admin.d.ts +1 -0
- package/dist/lib/routes/admin-api/user-admin.js +6 -0
- package/dist/lib/routes/admin-api/user-admin.js.map +1 -1
- package/dist/lib/routes/client-api/feature.test.js +3 -2
- package/dist/lib/routes/client-api/feature.test.js.map +1 -1
- package/dist/lib/routes/health-check.test.js +1 -0
- package/dist/lib/routes/health-check.test.js.map +1 -1
- package/dist/lib/routes/util.js +2 -0
- package/dist/lib/routes/util.js.map +1 -1
- package/dist/lib/server-impl.d.ts +2 -1
- package/dist/lib/server-impl.js.map +1 -1
- package/dist/lib/services/addon-service-test-simple-addon.d.ts +1 -1
- package/dist/lib/services/addon-service-test-simple-addon.js.map +1 -1
- package/dist/lib/services/addon-service.js +2 -2
- package/dist/lib/services/addon-service.js.map +1 -1
- package/dist/lib/services/api-token-service.js +2 -2
- package/dist/lib/services/api-token-service.js.map +1 -1
- package/dist/lib/services/client-metrics/client-metrics-service-v2.js +3 -5
- package/dist/lib/services/client-metrics/client-metrics-service-v2.js.map +1 -1
- package/dist/lib/services/client-metrics/client-metrics.test.js +74 -41
- package/dist/lib/services/client-metrics/client-metrics.test.js.map +1 -1
- package/dist/lib/services/client-metrics/index.d.ts +6 -5
- package/dist/lib/services/client-metrics/index.js +13 -10
- package/dist/lib/services/client-metrics/index.js.map +1 -1
- package/dist/lib/services/client-metrics/list.d.ts +19 -16
- package/dist/lib/services/client-metrics/list.js +6 -4
- package/dist/lib/services/client-metrics/list.js.map +1 -1
- package/dist/lib/services/client-metrics/list.test.js +9 -5
- package/dist/lib/services/client-metrics/list.test.js.map +1 -1
- package/dist/lib/services/client-metrics/ttl-list.d.ts +20 -13
- package/dist/lib/services/client-metrics/ttl-list.js +26 -15
- package/dist/lib/services/client-metrics/ttl-list.js.map +1 -1
- package/dist/lib/services/client-metrics/ttl-list.test.js +33 -9
- package/dist/lib/services/client-metrics/ttl-list.test.js.map +1 -1
- package/dist/lib/services/environment-service.d.ts +2 -1
- package/dist/lib/services/environment-service.js +10 -3
- package/dist/lib/services/environment-service.js.map +1 -1
- package/dist/lib/services/event-service.d.ts +1 -1
- package/dist/lib/services/event-service.js +1 -1
- package/dist/lib/services/event-service.js.map +1 -1
- package/dist/lib/services/feature-tag-service.js +7 -11
- package/dist/lib/services/feature-tag-service.js.map +1 -1
- package/dist/lib/services/{feature-toggle-service-v2.d.ts → feature-toggle-service.d.ts} +29 -19
- package/dist/lib/services/{feature-toggle-service-v2.js → feature-toggle-service.js} +177 -145
- package/dist/lib/services/feature-toggle-service.js.map +1 -0
- package/dist/lib/services/index.js +5 -3
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/project-health-service.d.ts +2 -2
- package/dist/lib/services/project-health-service.js +3 -3
- package/dist/lib/services/project-health-service.js.map +1 -1
- package/dist/lib/services/project-service.d.ts +2 -2
- package/dist/lib/services/project-service.js +5 -3
- package/dist/lib/services/project-service.js.map +1 -1
- package/dist/lib/services/reset-token-service.js +2 -2
- package/dist/lib/services/reset-token-service.js.map +1 -1
- package/dist/lib/services/setting-service.d.ts +1 -1
- package/dist/lib/services/setting-service.js.map +1 -1
- package/dist/lib/services/state-util.js +1 -1
- package/dist/lib/services/state-util.js.map +1 -1
- package/dist/lib/services/user-service.d.ts +6 -2
- package/dist/lib/services/user-service.js +43 -21
- package/dist/lib/services/user-service.js.map +1 -1
- package/dist/lib/services/user-service.test.js +18 -0
- package/dist/lib/services/user-service.test.js.map +1 -1
- package/dist/lib/services/version-service.js +2 -2
- package/dist/lib/services/version-service.js.map +1 -1
- package/dist/lib/types/authentication-required.d.ts +3 -1
- package/dist/lib/types/authentication-required.js +2 -1
- package/dist/lib/types/authentication-required.js.map +1 -1
- package/dist/lib/types/events.d.ts +165 -2
- package/dist/lib/types/events.js +124 -4
- package/dist/lib/types/events.js.map +1 -1
- package/dist/lib/types/model.d.ts +0 -12
- package/dist/lib/types/model.js.map +1 -1
- package/dist/lib/types/services.d.ts +3 -2
- package/dist/lib/types/settings/simple-auth-settings.d.ts +4 -0
- package/dist/lib/types/settings/simple-auth-settings.js +5 -0
- package/dist/lib/types/settings/simple-auth-settings.js.map +1 -0
- package/dist/lib/types/stores/event-store.d.ts +4 -3
- package/dist/lib/types/stores/settings-store.d.ts +1 -1
- package/dist/lib/util/constants.d.ts +0 -2
- package/dist/lib/util/constants.js +1 -3
- package/dist/lib/util/constants.js.map +1 -1
- package/dist/migrations/20210928080601-add-development-and-production-environments.js +3 -3
- package/dist/migrations/20211029094324-set-sort-order-env.d.ts +2 -0
- package/dist/migrations/20211029094324-set-sort-order-env.js +11 -0
- package/dist/migrations/20211029094324-set-sort-order-env.js.map +1 -0
- package/dist/migrations/20211105104316-add-feature-name-column-to-events.d.ts +2 -0
- package/dist/migrations/20211105104316-add-feature-name-column-to-events.js +16 -0
- package/dist/migrations/20211105104316-add-feature-name-column-to-events.js.map +1 -0
- package/dist/migrations/20211105105509-add-predata-column-to-events.d.ts +2 -0
- package/dist/migrations/20211105105509-add-predata-column-to-events.js +8 -0
- package/dist/migrations/20211105105509-add-predata-column-to-events.js.map +1 -0
- package/dist/migrator.js +9 -2
- package/dist/migrator.js.map +1 -1
- package/dist/test/e2e/api/admin/client-metrics.e2e.test.js +16 -12
- package/dist/test/e2e/api/admin/client-metrics.e2e.test.js.map +1 -1
- package/dist/{lib/event-differ.test.d.ts → test/e2e/api/admin/config.e2e.test.d.ts} +0 -0
- package/dist/test/e2e/api/admin/config.e2e.test.js +36 -0
- package/dist/test/e2e/api/admin/config.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/admin/feature-archive.e2e.test.js +1 -2
- package/dist/test/e2e/api/admin/feature-archive.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature.e2e.test.js +19 -2
- package/dist/test/e2e/api/admin/feature.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/metrics.e2e.test.js +5 -3
- package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js +10 -0
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/features.e2e.test.js +120 -8
- package/dist/test/e2e/api/admin/project/features.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/state.e2e.test.js +17 -13
- package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js +18 -17
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js +4 -0
- package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js +8 -4
- package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +4 -4
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/register.e2e.test.js +1 -1
- package/dist/test/e2e/api/client/register.e2e.test.js.map +1 -1
- package/dist/test/e2e/custom-auth.test.js +1 -1
- package/dist/test/e2e/custom-auth.test.js.map +1 -1
- package/dist/test/e2e/services/addon-service.e2e.test.js +1 -1
- package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/api-token-service.e2e.test.js +5 -3
- package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/client-metrics-service.e2e.test.js +5 -2
- package/dist/test/e2e/services/client-metrics-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/environment-service.test.js +1 -1
- package/dist/test/e2e/services/environment-service.test.js.map +1 -1
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +14 -11
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/project-health-service.e2e.test.js +2 -2
- package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/project-service.e2e.test.js +2 -2
- package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/reset-token-service.e2e.test.js +4 -0
- package/dist/test/e2e/services/reset-token-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/session-service.e2e.test.js +5 -4
- package/dist/test/e2e/services/session-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/user-service.e2e.test.js +18 -2
- package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/client-metrics-store-v2.e2e.test.js +4 -6
- package/dist/test/e2e/stores/client-metrics-store-v2.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/event-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/event-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js +1 -0
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js.map +1 -1
- package/dist/test/fixtures/fake-event-store.d.ts +2 -1
- package/dist/test/fixtures/fake-event-store.js +3 -0
- package/dist/test/fixtures/fake-event-store.js.map +1 -1
- package/dist/test/fixtures/fake-setting-store.js +1 -5
- package/dist/test/fixtures/fake-setting-store.js.map +1 -1
- package/docs/api/oas/openapi.yaml +35 -55
- package/package.json +11 -12
- package/dist/lib/event-differ.d.ts +0 -1
- package/dist/lib/event-differ.js +0 -117
- package/dist/lib/event-differ.js.map +0 -1
- package/dist/lib/event-differ.test.js +0 -142
- package/dist/lib/event-differ.test.js.map +0 -1
- package/dist/lib/services/feature-toggle-service-v2.js.map +0 -1
|
@@ -1,34 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const permissions_1 = require("../../types/permissions");
|
|
4
|
-
const
|
|
5
|
-
const eventDiffer = require('../../event-differ');
|
|
7
|
+
const controller_1 = __importDefault(require("../controller"));
|
|
6
8
|
const version = 1;
|
|
7
|
-
class EventController extends
|
|
9
|
+
class EventController extends controller_1.default {
|
|
8
10
|
constructor(config, { eventService }) {
|
|
9
11
|
super(config);
|
|
10
12
|
this.eventService = eventService;
|
|
11
13
|
this.get('/', this.getEvents, permissions_1.ADMIN);
|
|
12
14
|
this.get('/:name', this.getEventsForToggle);
|
|
13
15
|
}
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
15
16
|
async getEvents(req, res) {
|
|
17
|
+
const { project } = req.query;
|
|
16
18
|
let events;
|
|
17
|
-
if (
|
|
18
|
-
events = await this.eventService.getEventsForProject(
|
|
19
|
+
if (project) {
|
|
20
|
+
events = await this.eventService.getEventsForProject(project);
|
|
19
21
|
}
|
|
20
22
|
else {
|
|
21
23
|
events = await this.eventService.getEvents();
|
|
22
24
|
}
|
|
23
|
-
eventDiffer.addDiffs(events);
|
|
24
25
|
res.json({ version, events });
|
|
25
26
|
}
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
27
27
|
async getEventsForToggle(req, res) {
|
|
28
28
|
const toggleName = req.params.name;
|
|
29
29
|
const events = await this.eventService.getEventsForToggle(toggleName);
|
|
30
30
|
if (events) {
|
|
31
|
-
eventDiffer.addDiffs(events);
|
|
32
31
|
res.json({ toggleName, events });
|
|
33
32
|
}
|
|
34
33
|
else {
|
|
@@ -37,5 +36,4 @@ class EventController extends Controller {
|
|
|
37
36
|
}
|
|
38
37
|
}
|
|
39
38
|
exports.default = EventController;
|
|
40
|
-
module.exports = EventController;
|
|
41
39
|
//# sourceMappingURL=event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/event.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/event.ts"],"names":[],"mappings":";;;;;AAIA,yDAAgD;AAEhD,+DAAuC;AAEvC,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,MAAqB,eAAgB,SAAQ,oBAAU;IAGnD,YACI,MAAsB,EACtB,EAAE,YAAY,EAA0C;QAExD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,mBAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,SAAS,CACX,GAAiD,EACjD,GAAa;QAEb,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAC9B,IAAI,MAAgB,CAAC;QACrB,IAAI,OAAO,EAAE;YACT,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;SACjE;aAAM;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;SAChD;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,kBAAkB,CACpB,GAA8B,EAC9B,GAAa;QAEb,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAEtE,IAAI,MAAM,EAAE;YACR,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;SACpC;aAAM;YACH,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;SAC5D;IACL,CAAC;CACJ;AAxCD,kCAwCC"}
|
|
@@ -5,9 +5,8 @@ import { IUnleashServices } from '../../types/services';
|
|
|
5
5
|
import { IFeatureToggleQuery } from '../../types/model';
|
|
6
6
|
import { IAuthRequest } from '../unleash-types';
|
|
7
7
|
declare class FeatureController extends Controller {
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
private featureService2;
|
|
8
|
+
private tagService;
|
|
9
|
+
private service;
|
|
11
10
|
constructor(config: IUnleashConfig, { featureTagService, featureToggleServiceV2, }: Pick<IUnleashServices, 'featureTagService' | 'featureToggleServiceV2'>);
|
|
12
11
|
paramToArray(param: any): any;
|
|
13
12
|
prepQuery({ tag, project, namePrefix, }: any): Promise<IFeatureToggleQuery>;
|
|
@@ -12,9 +12,8 @@ const version = 1;
|
|
|
12
12
|
class FeatureController extends controller_1.default {
|
|
13
13
|
constructor(config, { featureTagService, featureToggleServiceV2, }) {
|
|
14
14
|
super(config);
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.logger = config.getLogger('/admin-api/feature.ts');
|
|
15
|
+
this.tagService = featureTagService;
|
|
16
|
+
this.service = featureToggleServiceV2;
|
|
18
17
|
this.get('/', this.getAllToggles);
|
|
19
18
|
this.post('/', this.createToggle, permissions_1.CREATE_FEATURE);
|
|
20
19
|
this.get('/:featureName', this.getToggle);
|
|
@@ -55,34 +54,34 @@ class FeatureController extends controller_1.default {
|
|
|
55
54
|
}
|
|
56
55
|
async getAllToggles(req, res) {
|
|
57
56
|
const query = await this.prepQuery(req.query);
|
|
58
|
-
const features = await this.
|
|
57
|
+
const features = await this.service.getFeatureToggles(query);
|
|
59
58
|
res.json({ version, features });
|
|
60
59
|
}
|
|
61
60
|
async getToggle(req, res) {
|
|
62
61
|
const name = req.params.featureName;
|
|
63
|
-
const feature = await this.
|
|
62
|
+
const feature = await this.service.getFeatureToggleLegacy(name);
|
|
64
63
|
res.json(feature).end();
|
|
65
64
|
}
|
|
66
65
|
async listTags(req, res) {
|
|
67
|
-
const tags = await this.
|
|
66
|
+
const tags = await this.tagService.listTags(req.params.featureName);
|
|
68
67
|
res.json({ version, tags });
|
|
69
68
|
}
|
|
70
69
|
async addTag(req, res) {
|
|
71
70
|
const { featureName } = req.params;
|
|
72
71
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
73
|
-
const tag = await this.
|
|
72
|
+
const tag = await this.tagService.addTag(featureName, req.body, userName);
|
|
74
73
|
res.status(201).json(tag);
|
|
75
74
|
}
|
|
76
75
|
// TODO
|
|
77
76
|
async removeTag(req, res) {
|
|
78
77
|
const { featureName, type, value } = req.params;
|
|
79
78
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
80
|
-
await this.
|
|
79
|
+
await this.tagService.removeTag(featureName, { type, value }, userName);
|
|
81
80
|
res.status(200).end();
|
|
82
81
|
}
|
|
83
82
|
async validate(req, res) {
|
|
84
83
|
const { name } = req.body;
|
|
85
|
-
await this.
|
|
84
|
+
await this.service.validateName(name);
|
|
86
85
|
res.status(200).end();
|
|
87
86
|
}
|
|
88
87
|
async createToggle(req, res) {
|
|
@@ -90,9 +89,13 @@ class FeatureController extends controller_1.default {
|
|
|
90
89
|
const toggle = req.body;
|
|
91
90
|
const validatedToggle = await feature_schema_1.featureSchema.validateAsync(toggle);
|
|
92
91
|
const { enabled } = validatedToggle;
|
|
93
|
-
const createdFeature = await this.
|
|
94
|
-
const strategies = await Promise.all(toggle.strategies.map(async (s) => this.
|
|
95
|
-
|
|
92
|
+
const createdFeature = await this.service.createFeatureToggle(validatedToggle.project, validatedToggle, userName);
|
|
93
|
+
const strategies = await Promise.all(toggle.strategies.map(async (s) => this.service.createStrategy(s, {
|
|
94
|
+
projectId: createdFeature.project,
|
|
95
|
+
featureName: createdFeature.name,
|
|
96
|
+
environment: constants_1.DEFAULT_ENV,
|
|
97
|
+
}, userName)));
|
|
98
|
+
await this.service.updateEnabled(createdFeature.project, createdFeature.name, constants_1.DEFAULT_ENV, enabled, userName);
|
|
96
99
|
res.status(201).json({
|
|
97
100
|
...createdFeature,
|
|
98
101
|
enabled,
|
|
@@ -104,15 +107,15 @@ class FeatureController extends controller_1.default {
|
|
|
104
107
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
105
108
|
const updatedFeature = req.body;
|
|
106
109
|
updatedFeature.name = featureName;
|
|
107
|
-
const projectId = await this.
|
|
110
|
+
const projectId = await this.service.getProjectId(updatedFeature.name);
|
|
108
111
|
const value = await feature_schema_1.featureSchema.validateAsync(updatedFeature);
|
|
109
|
-
await this.
|
|
110
|
-
await this.
|
|
112
|
+
await this.service.updateFeatureToggle(projectId, value, userName);
|
|
113
|
+
await this.service.removeAllStrategiesForEnv(featureName);
|
|
111
114
|
if (updatedFeature.strategies) {
|
|
112
|
-
await Promise.all(updatedFeature.strategies.map(async (s) => this.
|
|
115
|
+
await Promise.all(updatedFeature.strategies.map(async (s) => this.service.createStrategy(s, { projectId, featureName, environment: constants_1.DEFAULT_ENV }, userName)));
|
|
113
116
|
}
|
|
114
|
-
await this.
|
|
115
|
-
const feature = await this.
|
|
117
|
+
await this.service.updateEnabled(projectId, updatedFeature.name, constants_1.DEFAULT_ENV, updatedFeature.enabled, userName);
|
|
118
|
+
const feature = await this.service.storeFeatureUpdatedEventLegacy(featureName, userName);
|
|
116
119
|
res.status(200).json(feature);
|
|
117
120
|
}
|
|
118
121
|
// TODO: remove?
|
|
@@ -120,45 +123,45 @@ class FeatureController extends controller_1.default {
|
|
|
120
123
|
async toggle(req, res) {
|
|
121
124
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
122
125
|
const { featureName } = req.params;
|
|
123
|
-
const projectId = await this.
|
|
124
|
-
const feature = await this.
|
|
125
|
-
await this.
|
|
126
|
+
const projectId = await this.service.getProjectId(featureName);
|
|
127
|
+
const feature = await this.service.toggle(projectId, featureName, constants_1.DEFAULT_ENV, userName);
|
|
128
|
+
await this.service.storeFeatureUpdatedEventLegacy(featureName, userName);
|
|
126
129
|
res.status(200).json(feature);
|
|
127
130
|
}
|
|
128
131
|
async toggleOn(req, res) {
|
|
129
132
|
const { featureName } = req.params;
|
|
130
133
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
131
|
-
const projectId = await this.
|
|
132
|
-
const feature = await this.
|
|
133
|
-
await this.
|
|
134
|
+
const projectId = await this.service.getProjectId(featureName);
|
|
135
|
+
const feature = await this.service.updateEnabled(projectId, featureName, constants_1.DEFAULT_ENV, true, userName);
|
|
136
|
+
await this.service.storeFeatureUpdatedEventLegacy(featureName, userName);
|
|
134
137
|
res.json(feature);
|
|
135
138
|
}
|
|
136
139
|
async toggleOff(req, res) {
|
|
137
140
|
const { featureName } = req.params;
|
|
138
141
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
139
|
-
const projectId = await this.
|
|
140
|
-
const feature = await this.
|
|
141
|
-
await this.
|
|
142
|
+
const projectId = await this.service.getProjectId(featureName);
|
|
143
|
+
const feature = await this.service.updateEnabled(projectId, featureName, constants_1.DEFAULT_ENV, false, userName);
|
|
144
|
+
await this.service.storeFeatureUpdatedEventLegacy(featureName, userName);
|
|
142
145
|
res.json(feature);
|
|
143
146
|
}
|
|
144
147
|
async staleOn(req, res) {
|
|
145
148
|
const { featureName } = req.params;
|
|
146
149
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
147
|
-
await this.
|
|
148
|
-
const feature = await this.
|
|
149
|
-
res.json(feature)
|
|
150
|
+
await this.service.updateStale(featureName, true, userName);
|
|
151
|
+
const feature = await this.service.getFeatureToggleLegacy(featureName);
|
|
152
|
+
res.json(feature);
|
|
150
153
|
}
|
|
151
154
|
async staleOff(req, res) {
|
|
152
155
|
const { featureName } = req.params;
|
|
153
156
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
154
|
-
await this.
|
|
155
|
-
const feature = await this.
|
|
156
|
-
res.json(feature)
|
|
157
|
+
await this.service.updateStale(featureName, false, userName);
|
|
158
|
+
const feature = await this.service.getFeatureToggleLegacy(featureName);
|
|
159
|
+
res.json(feature);
|
|
157
160
|
}
|
|
158
161
|
async archiveToggle(req, res) {
|
|
159
162
|
const { featureName } = req.params;
|
|
160
163
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
161
|
-
await this.
|
|
164
|
+
await this.service.archiveToggle(featureName, userName);
|
|
162
165
|
res.status(200).end();
|
|
163
166
|
}
|
|
164
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.js","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/feature.ts"],"names":[],"mappings":";;;;;AAGA,+DAAuC;AAEvC,0DAA0D;AAC1D,yDAIiC;
|
|
1
|
+
{"version":3,"file":"feature.js","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/feature.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,15 +18,18 @@ class ProjectFeaturesController extends controller_1.default {
|
|
|
18
18
|
super(config);
|
|
19
19
|
this.featureService = featureToggleServiceV2;
|
|
20
20
|
this.logger = config.getLogger('/admin-api/project/features.ts');
|
|
21
|
+
// Environments
|
|
21
22
|
this.get(`${PATH_ENV}`, this.getEnvironment);
|
|
22
23
|
this.post(`${PATH_ENV}/on`, this.toggleEnvironmentOn, permissions_1.UPDATE_FEATURE);
|
|
23
24
|
this.post(`${PATH_ENV}/off`, this.toggleEnvironmentOff, permissions_1.UPDATE_FEATURE);
|
|
25
|
+
// activation strategies
|
|
24
26
|
this.get(`${PATH_STRATEGIES}`, this.getStrategies);
|
|
25
27
|
this.post(`${PATH_STRATEGIES}`, this.addStrategy, permissions_1.UPDATE_FEATURE);
|
|
26
28
|
this.get(`${PATH_STRATEGY}`, this.getStrategy);
|
|
27
29
|
this.put(`${PATH_STRATEGY}`, this.updateStrategy, permissions_1.UPDATE_FEATURE);
|
|
28
30
|
this.patch(`${PATH_STRATEGY}`, this.patchStrategy, permissions_1.UPDATE_FEATURE);
|
|
29
31
|
this.delete(`${PATH_STRATEGY}`, this.deleteStrategy, permissions_1.UPDATE_FEATURE);
|
|
32
|
+
// feature toggles
|
|
30
33
|
this.get(PATH, this.getFeatures);
|
|
31
34
|
this.post(PATH, this.createFeature, permissions_1.CREATE_FEATURE);
|
|
32
35
|
this.post(PATH_FEATURE_CLONE, this.cloneFeature, permissions_1.CREATE_FEATURE);
|
|
@@ -95,7 +98,7 @@ class ProjectFeaturesController extends controller_1.default {
|
|
|
95
98
|
async addStrategy(req, res) {
|
|
96
99
|
const { projectId, featureName, environment } = req.params;
|
|
97
100
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
98
|
-
const featureStrategy = await this.featureService.createStrategy(req.body, projectId, featureName, userName
|
|
101
|
+
const featureStrategy = await this.featureService.createStrategy(req.body, { environment, projectId, featureName }, userName);
|
|
99
102
|
res.status(200).json(featureStrategy);
|
|
100
103
|
}
|
|
101
104
|
async getStrategies(req, res) {
|
|
@@ -104,18 +107,18 @@ class ProjectFeaturesController extends controller_1.default {
|
|
|
104
107
|
res.status(200).json(featureStrategies);
|
|
105
108
|
}
|
|
106
109
|
async updateStrategy(req, res) {
|
|
107
|
-
const { strategyId, environment, projectId } = req.params;
|
|
110
|
+
const { strategyId, environment, projectId, featureName } = req.params;
|
|
108
111
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
109
|
-
const updatedStrategy = await this.featureService.updateStrategy(strategyId, environment, projectId,
|
|
112
|
+
const updatedStrategy = await this.featureService.updateStrategy(strategyId, req.body, { environment, projectId, featureName }, userName);
|
|
110
113
|
res.status(200).json(updatedStrategy);
|
|
111
114
|
}
|
|
112
115
|
async patchStrategy(req, res) {
|
|
113
|
-
const { strategyId, projectId, environment } = req.params;
|
|
116
|
+
const { strategyId, projectId, environment, featureName } = req.params;
|
|
114
117
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
115
118
|
const patch = req.body;
|
|
116
119
|
const strategy = await this.featureService.getStrategy(strategyId);
|
|
117
120
|
const { newDocument } = (0, fast_json_patch_1.applyPatch)(strategy, patch);
|
|
118
|
-
const updatedStrategy = await this.featureService.updateStrategy(strategyId, environment, projectId,
|
|
121
|
+
const updatedStrategy = await this.featureService.updateStrategy(strategyId, newDocument, { environment, projectId, featureName }, userName);
|
|
119
122
|
res.status(200).json(updatedStrategy);
|
|
120
123
|
}
|
|
121
124
|
async getStrategy(req, res) {
|
|
@@ -131,14 +134,14 @@ class ProjectFeaturesController extends controller_1.default {
|
|
|
131
134
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
132
135
|
const { strategyId } = req.params;
|
|
133
136
|
this.logger.info(strategyId);
|
|
134
|
-
const strategy = await this.featureService.deleteStrategy(strategyId,
|
|
137
|
+
const strategy = await this.featureService.deleteStrategy(strategyId, { environment, projectId, featureName }, userName);
|
|
135
138
|
res.status(200).json(strategy);
|
|
136
139
|
}
|
|
137
140
|
async updateStrategyParameter(req, res) {
|
|
138
|
-
const { strategyId, environment, projectId } = req.params;
|
|
141
|
+
const { strategyId, environment, projectId, featureName } = req.params;
|
|
139
142
|
const userName = (0, extract_user_1.extractUsername)(req);
|
|
140
143
|
const { name, value } = req.body;
|
|
141
|
-
const updatedStrategy = await this.featureService.updateStrategyParameter(strategyId, name, value,
|
|
144
|
+
const updatedStrategy = await this.featureService.updateStrategyParameter(strategyId, name, value, { environment, projectId, featureName }, userName);
|
|
142
145
|
res.status(200).json(updatedStrategy);
|
|
143
146
|
}
|
|
144
147
|
async getStrategyParameters(req, res) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../../src/lib/routes/admin-api/project/features.ts"],"names":[],"mappings":";;;;;AACA,qDAAwD;AACxD,kEAA0C;AAK1C,4DAA4E;AAM5E,6DAA6D;AA4B7D,MAAM,IAAI,GAAG,sBAAsB,CAAC;AACpC,MAAM,YAAY,GAAG,GAAG,IAAI,eAAe,CAAC;AAC5C,MAAM,kBAAkB,GAAG,GAAG,YAAY,QAAQ,CAAC;AACnD,MAAM,QAAQ,GAAG,GAAG,YAAY,4BAA4B,CAAC;AAC7D,MAAM,eAAe,GAAG,GAAG,QAAQ,aAAa,CAAC;AACjD,MAAM,aAAa,GAAG,GAAG,eAAe,cAAc,CAAC;AAOvD,MAAqB,yBAA0B,SAAQ,oBAAU;IAK7D,YACI,MAAsB,EACtB,EAAE,sBAAsB,EAA2B;QAEnD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,cAAc,GAAG,sBAAsB,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAEjE,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,4BAAc,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,4BAAc,CAAC,CAAC;QAExE,IAAI,CAAC,GAAG,CAAC,GAAG,eAAe,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,4BAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../../src/lib/routes/admin-api/project/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
const mime = __importStar(require("mime"));
|
|
26
26
|
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
27
|
-
const moment_1 = __importDefault(require("moment"));
|
|
28
27
|
const multer_1 = __importDefault(require("multer"));
|
|
28
|
+
const date_fns_1 = require("date-fns");
|
|
29
29
|
const controller_1 = __importDefault(require("../controller"));
|
|
30
30
|
const permissions_1 = require("../../types/permissions");
|
|
31
31
|
const extract_user_1 = require("../../util/extract-user");
|
|
@@ -92,7 +92,7 @@ class StateController extends controller_1.default {
|
|
|
92
92
|
includeTags,
|
|
93
93
|
includeEnvironments,
|
|
94
94
|
});
|
|
95
|
-
const timestamp = (0,
|
|
95
|
+
const timestamp = (0, date_fns_1.format)(Date.now(), 'yyyy-MM-dd_HH-mm-ss');
|
|
96
96
|
if (format === 'yaml') {
|
|
97
97
|
if (downloadFile) {
|
|
98
98
|
res.attachment(`export-${timestamp}.yml`);
|
|
@@ -108,5 +108,4 @@ class StateController extends controller_1.default {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
exports.default = StateController;
|
|
111
|
-
module.exports = StateController;
|
|
112
111
|
//# sourceMappingURL=state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/state.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,sDAA2B;AAC3B,oDAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../src/lib/routes/admin-api/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,14 +8,10 @@ const events_1 = require("events");
|
|
|
8
8
|
const test_config_1 = require("../../../test/config/test-config");
|
|
9
9
|
const store_1 = __importDefault(require("../../../test/fixtures/store"));
|
|
10
10
|
const permissions_1 = __importDefault(require("../../../test/fixtures/permissions"));
|
|
11
|
-
const no_logger_1 = __importDefault(require("../../../test/fixtures/no-logger"));
|
|
12
11
|
const app_1 = __importDefault(require("../../app"));
|
|
13
12
|
const services_1 = require("../../services");
|
|
14
13
|
const eventBus = new events_1.EventEmitter();
|
|
15
|
-
let request;
|
|
16
14
|
let destroy;
|
|
17
|
-
let strategyStore;
|
|
18
|
-
let base;
|
|
19
15
|
function getSetup() {
|
|
20
16
|
const randomBase = `/random${Math.round(Math.random() * 1000)}`;
|
|
21
17
|
const perms = (0, permissions_1.default)();
|
|
@@ -26,33 +22,23 @@ function getSetup() {
|
|
|
26
22
|
});
|
|
27
23
|
const services = (0, services_1.createServices)(stores, config);
|
|
28
24
|
const app = (0, app_1.default)(config, stores, services, eventBus);
|
|
25
|
+
destroy = () => {
|
|
26
|
+
services.versionService.destroy();
|
|
27
|
+
services.clientMetricsService.destroy();
|
|
28
|
+
services.apiTokenService.destroy();
|
|
29
|
+
};
|
|
29
30
|
return {
|
|
30
31
|
base: randomBase,
|
|
31
32
|
strategyStore: stores.strategyStore,
|
|
32
33
|
request: (0, supertest_1.default)(app),
|
|
33
34
|
perms,
|
|
34
|
-
destroy: () => {
|
|
35
|
-
services.versionService.destroy();
|
|
36
|
-
services.clientMetricsService.destroy();
|
|
37
|
-
services.apiTokenService.destroy();
|
|
38
|
-
},
|
|
39
35
|
};
|
|
40
36
|
}
|
|
41
|
-
beforeEach(() => {
|
|
42
|
-
const setup = getSetup();
|
|
43
|
-
request = setup.request;
|
|
44
|
-
base = setup.base;
|
|
45
|
-
strategyStore = setup.strategyStore;
|
|
46
|
-
destroy = setup.destroy;
|
|
47
|
-
});
|
|
48
37
|
afterEach(() => {
|
|
49
38
|
destroy();
|
|
50
39
|
});
|
|
51
|
-
afterEach(() => {
|
|
52
|
-
no_logger_1.default.setMuteError(false);
|
|
53
|
-
});
|
|
54
40
|
test('add version numbers for /strategies', () => {
|
|
55
|
-
|
|
41
|
+
const { request, base } = getSetup();
|
|
56
42
|
return request
|
|
57
43
|
.get(`${base}/api/admin/strategies`)
|
|
58
44
|
.expect('Content-Type', /json/)
|
|
@@ -62,7 +48,7 @@ test('add version numbers for /strategies', () => {
|
|
|
62
48
|
});
|
|
63
49
|
});
|
|
64
50
|
test('require a name when creating a new strategy', () => {
|
|
65
|
-
|
|
51
|
+
const { request, base } = getSetup();
|
|
66
52
|
return request
|
|
67
53
|
.post(`${base}/api/admin/strategies`)
|
|
68
54
|
.send({})
|
|
@@ -72,7 +58,7 @@ test('require a name when creating a new strategy', () => {
|
|
|
72
58
|
});
|
|
73
59
|
});
|
|
74
60
|
test('require parameters array when creating a new stratey', () => {
|
|
75
|
-
|
|
61
|
+
const { request, base } = getSetup();
|
|
76
62
|
return request
|
|
77
63
|
.post(`${base}/api/admin/strategies`)
|
|
78
64
|
.send({ name: 'TestStrat' })
|
|
@@ -82,14 +68,14 @@ test('require parameters array when creating a new stratey', () => {
|
|
|
82
68
|
});
|
|
83
69
|
});
|
|
84
70
|
test('create a new strategy with empty parameters', async () => {
|
|
85
|
-
|
|
71
|
+
const { request, base } = getSetup();
|
|
86
72
|
return request
|
|
87
73
|
.post(`${base}/api/admin/strategies`)
|
|
88
74
|
.send({ name: 'TestStrat', parameters: [] })
|
|
89
75
|
.expect(201);
|
|
90
76
|
});
|
|
91
77
|
test('not be possible to override name', () => {
|
|
92
|
-
|
|
78
|
+
const { request, base, strategyStore } = getSetup();
|
|
93
79
|
strategyStore.createStrategy({ name: 'Testing', parameters: [] });
|
|
94
80
|
return request
|
|
95
81
|
.post(`${base}/api/admin/strategies`)
|
|
@@ -97,7 +83,7 @@ test('not be possible to override name', () => {
|
|
|
97
83
|
.expect(409);
|
|
98
84
|
});
|
|
99
85
|
test('update strategy', () => {
|
|
100
|
-
|
|
86
|
+
const { request, base, strategyStore } = getSetup();
|
|
101
87
|
const name = 'AnotherStrat';
|
|
102
88
|
strategyStore.createStrategy({ name, parameters: [] });
|
|
103
89
|
return request
|
|
@@ -106,7 +92,7 @@ test('update strategy', () => {
|
|
|
106
92
|
.expect(200);
|
|
107
93
|
});
|
|
108
94
|
test('not update unknown strategy', () => {
|
|
109
|
-
|
|
95
|
+
const { request, base } = getSetup();
|
|
110
96
|
const name = 'UnknownStrat';
|
|
111
97
|
return request
|
|
112
98
|
.put(`${base}/api/admin/strategies/${name}`)
|
|
@@ -114,7 +100,7 @@ test('not update unknown strategy', () => {
|
|
|
114
100
|
.expect(404);
|
|
115
101
|
});
|
|
116
102
|
test('validate format when updating strategy', () => {
|
|
117
|
-
|
|
103
|
+
const { request, base, strategyStore } = getSetup();
|
|
118
104
|
const name = 'AnotherStrat';
|
|
119
105
|
strategyStore.createStrategy({ name, parameters: [] });
|
|
120
106
|
return request
|
|
@@ -123,14 +109,14 @@ test('validate format when updating strategy', () => {
|
|
|
123
109
|
.expect(400);
|
|
124
110
|
});
|
|
125
111
|
test('editable=false will stop delete request', () => {
|
|
126
|
-
|
|
127
|
-
|
|
112
|
+
jest.spyOn(global.console, 'error').mockImplementation(() => jest.fn());
|
|
113
|
+
const { request, base } = getSetup();
|
|
128
114
|
const name = 'default';
|
|
129
115
|
return request.delete(`${base}/api/admin/strategies/${name}`).expect(500);
|
|
130
116
|
});
|
|
131
117
|
test('editable=false will stop edit request', () => {
|
|
132
|
-
|
|
133
|
-
|
|
118
|
+
jest.spyOn(global.console, 'error').mockImplementation(() => jest.fn());
|
|
119
|
+
const { request, base } = getSetup();
|
|
134
120
|
const name = 'default';
|
|
135
121
|
return request
|
|
136
122
|
.put(`${base}/api/admin/strategies/${name}`)
|
|
@@ -138,7 +124,7 @@ test('editable=false will stop edit request', () => {
|
|
|
138
124
|
.expect(500);
|
|
139
125
|
});
|
|
140
126
|
test('editable=true will allow delete request', () => {
|
|
141
|
-
|
|
127
|
+
const { request, base, strategyStore } = getSetup();
|
|
142
128
|
const name = 'deleteStrat';
|
|
143
129
|
strategyStore.createStrategy({ name, parameters: [] });
|
|
144
130
|
return request
|
|
@@ -147,7 +133,7 @@ test('editable=true will allow delete request', () => {
|
|
|
147
133
|
.expect(200);
|
|
148
134
|
});
|
|
149
135
|
test('editable=true will allow edit request', () => {
|
|
150
|
-
|
|
136
|
+
const { request, base, strategyStore } = getSetup();
|
|
151
137
|
const name = 'editStrat';
|
|
152
138
|
strategyStore.createStrategy({ name, parameters: [] });
|
|
153
139
|
return request
|
|
@@ -156,7 +142,7 @@ test('editable=true will allow edit request', () => {
|
|
|
156
142
|
.expect(200);
|
|
157
143
|
});
|
|
158
144
|
test('deprecating a strategy works', async () => {
|
|
159
|
-
|
|
145
|
+
const { request, base, strategyStore } = getSetup();
|
|
160
146
|
const name = 'editStrat';
|
|
161
147
|
strategyStore.createStrategy({ name, parameters: [] });
|
|
162
148
|
await request
|
|
@@ -170,14 +156,14 @@ test('deprecating a strategy works', async () => {
|
|
|
170
156
|
.expect((res) => expect(res.body.deprecated).toBe(true));
|
|
171
157
|
});
|
|
172
158
|
test('deprecating a non-existent strategy yields 404', () => {
|
|
173
|
-
|
|
159
|
+
const { request, base } = getSetup();
|
|
174
160
|
return request
|
|
175
161
|
.post(`${base}/api/admin/strategies/non-existent-strategy/deprecate`)
|
|
176
162
|
.set('Content-Type', 'application/json')
|
|
177
163
|
.expect(404);
|
|
178
164
|
});
|
|
179
165
|
test('reactivating a strategy works', async () => {
|
|
180
|
-
|
|
166
|
+
const { request, base, strategyStore } = getSetup();
|
|
181
167
|
const name = 'editStrat';
|
|
182
168
|
strategyStore.createStrategy({ name, parameters: [] });
|
|
183
169
|
await request
|
|
@@ -191,14 +177,15 @@ test('reactivating a strategy works', async () => {
|
|
|
191
177
|
.expect((res) => expect(res.body.deprecated).toBe(false));
|
|
192
178
|
});
|
|
193
179
|
test('reactivating a non-existent strategy yields 404', () => {
|
|
194
|
-
|
|
180
|
+
const { request, base } = getSetup();
|
|
195
181
|
return request
|
|
196
182
|
.post(`${base}/api/admin/strategies/non-existent-strategy/reactivate`)
|
|
197
183
|
.set('Content-Type', 'application/json')
|
|
198
184
|
.expect(404);
|
|
199
185
|
});
|
|
200
186
|
test("deprecating 'default' strategy will yield 403", () => {
|
|
201
|
-
|
|
187
|
+
jest.spyOn(global.console, 'error').mockImplementation(() => jest.fn());
|
|
188
|
+
const { request, base } = getSetup();
|
|
202
189
|
return request
|
|
203
190
|
.post(`${base}/api/admin/strategies/default/deprecate`)
|
|
204
191
|
.set('Content-Type', 'application/json')
|