unleash-server 4.1.2 → 4.2.0-1
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/CHANGELOG.md +920 -0
- package/README.md +3 -2
- package/dist/lib/addons/addon.js +1 -1
- package/dist/lib/addons/addon.js.map +1 -1
- package/dist/lib/addons/slack.js +9 -9
- package/dist/lib/addons/slack.js.map +1 -1
- package/dist/lib/addons/teams.js +1 -1
- package/dist/lib/addons/teams.js.map +1 -1
- package/dist/lib/app.js +20 -20
- package/dist/lib/app.js.map +1 -1
- package/dist/lib/app.test.js +11 -7
- package/dist/lib/app.test.js.map +1 -1
- package/dist/lib/create-config.js +9 -9
- package/dist/lib/create-config.js.map +1 -1
- package/dist/lib/db/api-token-store.d.ts +2 -1
- package/dist/lib/db/api-token-store.js +5 -0
- package/dist/lib/db/api-token-store.js.map +1 -1
- package/dist/lib/db/client-metrics-store.d.ts +6 -0
- package/dist/lib/db/client-metrics-store.js +6 -1
- package/dist/lib/db/client-metrics-store.js.map +1 -1
- package/dist/lib/db/db-pool.js +1 -1
- package/dist/lib/db/db-pool.js.map +1 -1
- package/dist/lib/db/environment-store.d.ts +7 -7
- package/dist/lib/db/environment-store.js +59 -54
- package/dist/lib/db/environment-store.js.map +1 -1
- package/dist/lib/db/event-store.d.ts +5 -2
- package/dist/lib/db/event-store.js +27 -4
- package/dist/lib/db/event-store.js.map +1 -1
- package/dist/lib/db/event-store.test.js +2 -2
- package/dist/lib/db/event-store.test.js.map +1 -1
- package/dist/lib/db/feature-environment-store.d.ts +8 -6
- package/dist/lib/db/feature-environment-store.js +53 -19
- package/dist/lib/db/feature-environment-store.js.map +1 -1
- package/dist/lib/db/feature-strategy-store.d.ts +7 -11
- package/dist/lib/db/feature-strategy-store.js +77 -147
- package/dist/lib/db/feature-strategy-store.js.map +1 -1
- package/dist/lib/db/feature-toggle-client-store.d.ts +26 -0
- package/dist/lib/db/feature-toggle-client-store.js +106 -0
- package/dist/lib/db/feature-toggle-client-store.js.map +1 -0
- package/dist/lib/db/feature-toggle-store.d.ts +10 -22
- package/dist/lib/db/feature-toggle-store.js +9 -42
- package/dist/lib/db/feature-toggle-store.js.map +1 -1
- package/dist/lib/db/index.js +2 -0
- package/dist/lib/db/index.js.map +1 -1
- package/dist/lib/db/project-store.d.ts +4 -6
- package/dist/lib/db/project-store.js +7 -43
- package/dist/lib/db/project-store.js.map +1 -1
- package/dist/lib/event-hook.test.js +8 -7
- package/dist/lib/event-hook.test.js.map +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/logger.test.js +26 -4
- package/dist/lib/logger.test.js.map +1 -1
- package/dist/lib/metrics.test.js +3 -3
- package/dist/lib/metrics.test.js.map +1 -1
- package/dist/lib/middleware/api-token-middleware.js +10 -2
- package/dist/lib/middleware/api-token-middleware.js.map +1 -1
- package/dist/lib/middleware/api-token-middleware.test.js +44 -8
- package/dist/lib/middleware/api-token-middleware.test.js.map +1 -1
- package/dist/lib/middleware/content_type_checker.test.js +4 -4
- package/dist/lib/middleware/content_type_checker.test.js.map +1 -1
- package/dist/lib/middleware/demo-authentication.js +1 -1
- package/dist/lib/middleware/demo-authentication.js.map +1 -1
- package/dist/lib/middleware/no-authentication.test.js +3 -3
- package/dist/lib/middleware/no-authentication.test.js.map +1 -1
- package/dist/lib/middleware/oss-authentication.js +0 -3
- package/dist/lib/middleware/oss-authentication.js.map +1 -1
- package/dist/lib/middleware/oss-authentication.test.js +7 -7
- package/dist/lib/middleware/oss-authentication.test.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.js +2 -2
- package/dist/lib/middleware/rbac-middleware.js.map +1 -1
- package/dist/lib/middleware/rbac-middleware.test.js +51 -12
- package/dist/lib/middleware/rbac-middleware.test.js.map +1 -1
- package/dist/lib/middleware/secure-headers.js +1 -1
- package/dist/lib/middleware/secure-headers.js.map +1 -1
- package/dist/lib/middleware/session-db.js +2 -2
- package/dist/lib/middleware/session-db.js.map +1 -1
- package/dist/lib/routes/admin-api/addon.d.ts +4 -3
- package/dist/lib/routes/admin-api/addon.js +4 -4
- package/dist/lib/routes/admin-api/addon.js.map +1 -1
- package/dist/lib/routes/admin-api/api-token-controller.js +10 -38
- package/dist/lib/routes/admin-api/api-token-controller.js.map +1 -1
- package/dist/lib/routes/admin-api/archive.d.ts +4 -3
- package/dist/lib/routes/admin-api/archive.js +3 -3
- package/dist/lib/routes/admin-api/archive.js.map +1 -1
- package/dist/lib/routes/admin-api/config.test.js +5 -5
- package/dist/lib/routes/admin-api/config.test.js.map +1 -1
- package/dist/lib/routes/admin-api/context.d.ts +4 -3
- package/dist/lib/routes/admin-api/context.js +4 -4
- package/dist/lib/routes/admin-api/context.js.map +1 -1
- package/dist/lib/routes/admin-api/context.test.js +6 -6
- package/dist/lib/routes/admin-api/context.test.js.map +1 -1
- package/dist/lib/routes/admin-api/email.test.js +6 -6
- package/dist/lib/routes/admin-api/email.test.js.map +1 -1
- package/dist/lib/routes/admin-api/environments-controller.d.ts +4 -4
- package/dist/lib/routes/admin-api/environments-controller.js +17 -43
- package/dist/lib/routes/admin-api/environments-controller.js.map +1 -1
- package/dist/lib/routes/admin-api/event.js +7 -1
- package/dist/lib/routes/admin-api/event.js.map +1 -1
- package/dist/lib/routes/admin-api/events.test.js +5 -5
- package/dist/lib/routes/admin-api/events.test.js.map +1 -1
- package/dist/lib/routes/admin-api/feature.d.ts +11 -10
- package/dist/lib/routes/admin-api/feature.js +26 -24
- package/dist/lib/routes/admin-api/feature.js.map +1 -1
- package/dist/lib/routes/admin-api/metrics.js +25 -66
- package/dist/lib/routes/admin-api/metrics.js.map +1 -1
- package/dist/lib/routes/admin-api/metrics.test.js +6 -6
- package/dist/lib/routes/admin-api/metrics.test.js.map +1 -1
- package/dist/lib/routes/admin-api/project/environments.js +6 -15
- package/dist/lib/routes/admin-api/project/environments.js.map +1 -1
- package/dist/lib/routes/admin-api/project/features.d.ts +29 -11
- package/dist/lib/routes/admin-api/project/features.js +97 -35
- package/dist/lib/routes/admin-api/project/features.js.map +1 -1
- package/dist/lib/routes/admin-api/project/health-report.js +7 -18
- package/dist/lib/routes/admin-api/project/health-report.js.map +1 -1
- package/dist/lib/routes/admin-api/project/index.d.ts +3 -0
- package/dist/lib/routes/admin-api/project/index.js +8 -0
- package/dist/lib/routes/admin-api/project/index.js.map +1 -1
- package/dist/lib/routes/admin-api/state.d.ts +2 -1
- package/dist/lib/routes/admin-api/state.js +7 -6
- package/dist/lib/routes/admin-api/state.js.map +1 -1
- package/dist/lib/routes/admin-api/strategy.d.ts +1 -1
- package/dist/lib/routes/admin-api/strategy.js +24 -22
- package/dist/lib/routes/admin-api/strategy.js.map +1 -1
- package/dist/lib/routes/admin-api/strategy.test.js +6 -6
- package/dist/lib/routes/admin-api/strategy.test.js.map +1 -1
- package/dist/lib/routes/admin-api/tag-type.d.ts +4 -3
- package/dist/lib/routes/admin-api/tag-type.js +19 -50
- package/dist/lib/routes/admin-api/tag-type.js.map +1 -1
- package/dist/lib/routes/admin-api/tag.d.ts +3 -2
- package/dist/lib/routes/admin-api/tag.js +3 -4
- package/dist/lib/routes/admin-api/tag.js.map +1 -1
- package/dist/lib/routes/admin-api/tag.test.js +6 -6
- package/dist/lib/routes/admin-api/tag.test.js.map +1 -1
- package/dist/lib/routes/admin-api/user-admin.js +11 -37
- package/dist/lib/routes/admin-api/user-admin.js.map +1 -1
- package/dist/lib/routes/admin-api/user.test.js +5 -5
- package/dist/lib/routes/admin-api/user.test.js.map +1 -1
- package/dist/lib/routes/api-def.d.ts +49 -52
- package/dist/lib/routes/api-def.js +13 -9
- package/dist/lib/routes/api-def.js.map +1 -1
- package/dist/lib/routes/backstage.test.js +5 -5
- package/dist/lib/routes/backstage.test.js.map +1 -1
- package/dist/lib/routes/client-api/feature.d.ts +7 -8
- package/dist/lib/routes/client-api/feature.js +40 -28
- package/dist/lib/routes/client-api/feature.js.map +1 -1
- package/dist/lib/routes/client-api/feature.test.js +15 -15
- package/dist/lib/routes/client-api/feature.test.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.d.ts +3 -2
- package/dist/lib/routes/client-api/metrics.js +8 -13
- package/dist/lib/routes/client-api/metrics.js.map +1 -1
- package/dist/lib/routes/client-api/metrics.test.js +7 -12
- package/dist/lib/routes/client-api/metrics.test.js.map +1 -1
- package/dist/lib/routes/client-api/register.js +3 -14
- package/dist/lib/routes/client-api/register.js.map +1 -1
- package/dist/lib/routes/client-api/register.test.js +5 -5
- package/dist/lib/routes/client-api/register.test.js.map +1 -1
- package/dist/lib/routes/controller.d.ts +1 -0
- package/dist/lib/routes/controller.js +4 -1
- package/dist/lib/routes/controller.js.map +1 -1
- package/dist/lib/routes/health-check.test.js +9 -9
- package/dist/lib/routes/health-check.test.js.map +1 -1
- package/dist/lib/routes/index.js +5 -5
- package/dist/lib/routes/index.js.map +1 -1
- package/dist/lib/routes/index.test.js +5 -5
- package/dist/lib/routes/index.test.js.map +1 -1
- package/dist/lib/routes/logout.test.js +15 -15
- package/dist/lib/routes/logout.test.js.map +1 -1
- package/dist/lib/routes/unleash-types.d.ts +1 -2
- package/dist/lib/routes/util.js +1 -0
- package/dist/lib/routes/util.js.map +1 -1
- package/dist/lib/schema/api-token-schema.d.ts +2 -0
- package/dist/lib/schema/api-token-schema.js +28 -0
- package/dist/lib/schema/api-token-schema.js.map +1 -0
- package/dist/lib/schema/feature-schema.test.js +17 -16
- package/dist/lib/schema/feature-schema.test.js.map +1 -1
- package/dist/lib/schema/project-schema.d.ts +2 -0
- package/dist/lib/schema/project-schema.js +12 -0
- package/dist/lib/schema/project-schema.js.map +1 -0
- package/dist/lib/server-impl.d.ts +2 -2
- package/dist/lib/server-impl.js +20 -18
- package/dist/lib/server-impl.js.map +1 -1
- package/dist/lib/server-impl.test.js +28 -21
- package/dist/lib/server-impl.test.js.map +1 -1
- package/dist/lib/services/access-service.d.ts +1 -1
- package/dist/lib/services/access-service.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/addon-service.test.js +1 -1
- package/dist/lib/services/addon-service.test.js.map +1 -1
- package/dist/lib/services/api-token-service.d.ts +3 -8
- package/dist/lib/services/api-token-service.js +43 -8
- package/dist/lib/services/api-token-service.js.map +1 -1
- package/dist/lib/services/client-metrics/client-metrics-schema.js +1 -0
- package/dist/lib/services/client-metrics/client-metrics-schema.js.map +1 -1
- package/dist/lib/services/client-metrics/client-metrics.test.js +18 -18
- package/dist/lib/services/client-metrics/client-metrics.test.js.map +1 -1
- package/dist/lib/services/client-metrics/index.js +5 -3
- package/dist/lib/services/client-metrics/index.js.map +1 -1
- package/dist/lib/services/context-schema.d.ts +3 -3
- package/dist/lib/services/context-schema.js +15 -11
- package/dist/lib/services/context-schema.js.map +1 -1
- package/dist/lib/services/email-service.js +5 -5
- package/dist/lib/services/email-service.js.map +1 -1
- package/dist/lib/services/environment-service.d.ts +4 -5
- package/dist/lib/services/environment-service.js +14 -14
- package/dist/lib/services/environment-service.js.map +1 -1
- package/dist/lib/services/event-service.d.ts +1 -0
- package/dist/lib/services/event-service.js +4 -3
- package/dist/lib/services/event-service.js.map +1 -1
- package/dist/lib/services/feature-toggle-service-v2.d.ts +27 -12
- package/dist/lib/services/feature-toggle-service-v2.js +157 -55
- package/dist/lib/services/feature-toggle-service-v2.js.map +1 -1
- package/dist/lib/services/index.js +1 -1
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/project-health-service.d.ts +3 -1
- package/dist/lib/services/project-health-service.js +7 -3
- package/dist/lib/services/project-health-service.js.map +1 -1
- package/dist/lib/services/project-schema.d.ts +2 -3
- package/dist/lib/services/project-schema.js +12 -7
- package/dist/lib/services/project-schema.js.map +1 -1
- package/dist/lib/services/project-service.d.ts +4 -2
- package/dist/lib/services/project-service.js +21 -11
- package/dist/lib/services/project-service.js.map +1 -1
- package/dist/lib/services/state-schema.d.ts +2 -0
- package/dist/lib/services/state-schema.js +16 -6
- package/dist/lib/services/state-schema.js.map +1 -1
- package/dist/lib/services/state-service.d.ts +7 -0
- package/dist/lib/services/state-service.js +75 -17
- package/dist/lib/services/state-service.js.map +1 -1
- package/dist/lib/services/state-service.test.js +73 -28
- package/dist/lib/services/state-service.test.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.js +1 -1
- package/dist/lib/services/user-service.js.map +1 -1
- package/dist/lib/services/user-service.test.js +1 -1
- package/dist/lib/services/user-service.test.js.map +1 -1
- package/dist/lib/services/version-service.js +1 -1
- package/dist/lib/services/version-service.js.map +1 -1
- package/dist/lib/services/version-service.test.js +3 -3
- package/dist/lib/services/version-service.test.js.map +1 -1
- package/dist/lib/types/api-user.d.ts +11 -4
- package/dist/lib/types/api-user.js +4 -1
- package/dist/lib/types/api-user.js.map +1 -1
- package/dist/lib/types/events.d.ts +7 -0
- package/dist/lib/types/events.js +9 -1
- package/dist/lib/types/events.js.map +1 -1
- package/dist/lib/types/model.d.ts +25 -7
- package/dist/lib/types/model.js.map +1 -1
- package/dist/lib/types/models/api-token.d.ts +19 -0
- package/dist/lib/types/models/api-token.js +10 -0
- package/dist/lib/types/models/api-token.js.map +1 -0
- package/dist/lib/types/permissions.d.ts +2 -0
- package/dist/lib/types/permissions.js +3 -1
- package/dist/lib/types/permissions.js.map +1 -1
- package/dist/lib/types/stores/api-token-store.d.ts +1 -14
- package/dist/lib/types/stores/api-token-store.js +0 -6
- package/dist/lib/types/stores/api-token-store.js.map +1 -1
- package/dist/lib/types/stores/environment-store.d.ts +6 -6
- package/dist/lib/types/stores/event-store.d.ts +1 -0
- package/dist/lib/types/stores/feature-environment-store.d.ts +8 -6
- package/dist/lib/types/stores/feature-strategies-store.d.ts +6 -12
- package/dist/lib/types/stores/feature-toggle-client-store.d.ts +5 -0
- package/dist/lib/types/stores/feature-toggle-client-store.js +3 -0
- package/dist/lib/types/stores/feature-toggle-client-store.js.map +1 -0
- package/dist/lib/types/stores/feature-toggle-store.d.ts +7 -14
- package/dist/lib/types/stores/project-store.d.ts +5 -2
- package/dist/lib/types/stores.d.ts +2 -0
- package/dist/lib/types/user.js +1 -1
- package/dist/lib/types/user.js.map +1 -1
- package/dist/lib/util/constants.d.ts +1 -0
- package/dist/lib/util/constants.js +2 -1
- package/dist/lib/util/constants.js.map +1 -1
- package/dist/lib/util/extract-user.d.ts +2 -0
- package/dist/lib/util/extract-user.js +8 -0
- package/dist/lib/util/extract-user.js.map +1 -0
- package/dist/lib/util/format-base-uri.test.js +6 -6
- package/dist/lib/util/format-base-uri.test.js.map +1 -1
- package/dist/lib/util/graceful-shutdown.js +1 -1
- package/dist/lib/util/graceful-shutdown.js.map +1 -1
- package/dist/lib/util/rewriteHTML.test.js +4 -4
- package/dist/lib/util/rewriteHTML.test.js.map +1 -1
- package/dist/lib/util/snakeCase.d.ts +6 -0
- package/dist/lib/util/snakeCase.js +28 -0
- package/dist/lib/util/snakeCase.js.map +1 -0
- package/dist/{test/e2e/api/admin/boostrap.test.d.ts → lib/util/snakeCase.test.d.ts} +0 -0
- package/dist/lib/util/snakeCase.test.js +23 -0
- package/dist/lib/util/snakeCase.test.js.map +1 -0
- package/dist/migrations/20210831072631-add-sort-order-and-type-to-env.d.ts +5 -0
- package/dist/migrations/20210831072631-add-sort-order-and-type-to-env.js +14 -0
- package/dist/migrations/20210831072631-add-sort-order-and-type-to-env.js.map +1 -0
- package/dist/migrations/20210907124058-add-dbcritic-indices.d.ts +5 -0
- package/dist/migrations/20210907124058-add-dbcritic-indices.js +30 -0
- package/dist/migrations/20210907124058-add-dbcritic-indices.js.map +1 -0
- package/dist/migrations/20210907124850-add-dbcritic-primary-keys.d.ts +5 -0
- package/dist/migrations/20210907124850-add-dbcritic-primary-keys.js +18 -0
- package/dist/migrations/20210907124850-add-dbcritic-primary-keys.js.map +1 -0
- package/dist/migrations/20210908100701-add-enabled-to-environments.d.ts +5 -0
- package/dist/migrations/20210908100701-add-enabled-to-environments.js +14 -0
- package/dist/migrations/20210908100701-add-enabled-to-environments.js.map +1 -0
- package/dist/migrations/20210909085651-add-protected-field-to-environments.d.ts +5 -0
- package/dist/migrations/20210909085651-add-protected-field-to-environments.js +15 -0
- package/dist/migrations/20210909085651-add-protected-field-to-environments.js.map +1 -0
- package/dist/migrations/20210913103159-api-keys-scoping.d.ts +2 -0
- package/dist/migrations/20210913103159-api-keys-scoping.js +13 -0
- package/dist/migrations/20210913103159-api-keys-scoping.js.map +1 -0
- package/dist/migrations/20210915122001-add-project-and-environment-columns-to-events.d.ts +2 -0
- package/dist/migrations/20210915122001-add-project-and-environment-columns-to-events.js +22 -0
- package/dist/migrations/20210915122001-add-project-and-environment-columns-to-events.js.map +1 -0
- package/dist/migrations/20210920104218-rename-global-env-to-default-env.d.ts +2 -0
- package/dist/migrations/20210920104218-rename-global-env-to-default-env.js +25 -0
- package/dist/migrations/20210920104218-rename-global-env-to-default-env.js.map +1 -0
- package/dist/migrations/20210921105032-client-api-tokens-default.d.ts +2 -0
- package/dist/migrations/20210921105032-client-api-tokens-default.js +13 -0
- package/dist/migrations/20210921105032-client-api-tokens-default.js.map +1 -0
- package/dist/migrations/20210922084509-add-non-null-constraint-to-environment-type.d.ts +2 -0
- package/dist/migrations/20210922084509-add-non-null-constraint-to-environment-type.js +10 -0
- package/dist/migrations/20210922084509-add-non-null-constraint-to-environment-type.js.map +1 -0
- package/dist/migrations/20210922120521-add-tag-type-permission.d.ts +2 -0
- package/dist/migrations/20210922120521-add-tag-type-permission.js +19 -0
- package/dist/migrations/20210922120521-add-tag-type-permission.js.map +1 -0
- package/dist/migrations/20210928065411-remove-displayname-from-environments.d.ts +2 -0
- package/dist/migrations/20210928065411-remove-displayname-from-environments.js +10 -0
- package/dist/migrations/20210928065411-remove-displayname-from-environments.js.map +1 -0
- package/dist/migrations/20210928080601-add-development-and-production-environments.d.ts +2 -0
- package/dist/migrations/20210928080601-add-development-and-production-environments.js +16 -0
- package/dist/migrations/20210928080601-add-development-and-production-environments.js.map +1 -0
- package/dist/migrations/20210928082228-connect-default-environment-to-all-existing-projects.d.ts +2 -0
- package/dist/migrations/20210928082228-connect-default-environment-to-all-existing-projects.js +16 -0
- package/dist/migrations/20210928082228-connect-default-environment-to-all-existing-projects.js.map +1 -0
- package/dist/migrator.d.ts +3 -4
- package/dist/migrator.js +19 -5
- package/dist/migrator.js.map +1 -1
- package/dist/server-dev.js +1 -1
- package/dist/server-dev.js.map +1 -1
- package/dist/test/config/create-config.test.js +20 -20
- package/dist/test/config/create-config.test.js.map +1 -1
- package/dist/test/config/test-config.js +1 -1
- package/dist/test/config/test-config.js.map +1 -1
- package/dist/test/e2e/api/admin/addon.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/addon.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js +8 -8
- package/dist/test/e2e/api/admin/api-token.auth.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/api-token.e2e.test.js +161 -12
- package/dist/test/e2e/api/admin/api-token.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/archive.test.js +2 -2
- package/dist/test/e2e/api/admin/archive.test.js.map +1 -1
- package/dist/test/e2e/api/admin/bootstrap.test.d.ts +1 -0
- package/dist/test/e2e/api/admin/{boostrap.test.js → bootstrap.test.js} +3 -3
- package/dist/test/e2e/api/admin/bootstrap.test.js.map +1 -0
- package/dist/test/e2e/api/admin/context.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/context.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/environment.test.js +82 -55
- package/dist/test/e2e/api/admin/environment.test.js.map +1 -1
- package/dist/test/e2e/api/admin/event.e2e.test.js +30 -2
- package/dist/test/e2e/api/admin/event.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature-archive.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/feature-archive.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature-type.test.js +2 -2
- package/dist/test/e2e/api/admin/feature-type.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature.auth.e2e.test.js +3 -3
- package/dist/test/e2e/api/admin/feature.auth.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature.custom-auth.e2e.test.js +3 -3
- package/dist/test/e2e/api/admin/feature.custom-auth.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feature.e2e.test.js +71 -65
- package/dist/test/e2e/api/admin/feature.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/feedback.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/feedback.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/metrics.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/metrics.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/environments.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js +65 -0
- package/dist/test/e2e/api/admin/project/environments.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/admin/project/feature.strategy.e2e.test.js +503 -72
- package/dist/test/e2e/api/admin/project/feature.strategy.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/project.health.e2e.test.js +4 -2
- package/dist/test/e2e/api/admin/project/project.health.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/project/projects.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/admin/project/projects.e2e.test.js +30 -0
- package/dist/test/e2e/api/admin/project/projects.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/admin/state.e2e.test.js +163 -2
- package/dist/test/e2e/api/admin/state.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/strategy.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/strategy.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/tag-types.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/tag-types.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/tags.e2e.test.js +2 -2
- package/dist/test/e2e/api/admin/tags.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js +3 -3
- package/dist/test/e2e/api/admin/user-admin.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/admin/user.test.js +2 -2
- package/dist/test/e2e/api/admin/user.test.js.map +1 -1
- package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js +5 -5
- package/dist/test/e2e/api/auth/reset-password-controller.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.e2e.test.js +74 -19
- package/dist/test/e2e/api/client/feature.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js +49 -0
- package/dist/test/e2e/api/client/feature.env.disabled.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js +156 -0
- package/dist/test/e2e/api/client/feature.token.access.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/client/metrics.e2e.access.e2e.test.d.ts +1 -0
- package/dist/test/e2e/api/client/metrics.e2e.access.e2e.test.js +42 -0
- package/dist/test/e2e/api/client/metrics.e2e.access.e2e.test.js.map +1 -0
- package/dist/test/e2e/api/client/metrics.e2e.test.js +12 -8
- package/dist/test/e2e/api/client/metrics.e2e.test.js.map +1 -1
- package/dist/test/e2e/api/client/register.e2e.test.js +18 -14
- package/dist/test/e2e/api/client/register.e2e.test.js.map +1 -1
- package/dist/test/e2e/custom-auth.test.js +3 -3
- package/dist/test/e2e/custom-auth.test.js.map +1 -1
- package/dist/test/e2e/health.e2e.test.js +2 -2
- package/dist/test/e2e/health.e2e.test.js.map +1 -1
- package/dist/test/e2e/helpers/database-config.d.ts +1 -1
- package/dist/test/e2e/helpers/database-config.js +12 -8
- package/dist/test/e2e/helpers/database-config.js.map +1 -1
- package/dist/test/e2e/helpers/database-init.d.ts +7 -1
- package/dist/test/e2e/helpers/database-init.js +12 -11
- package/dist/test/e2e/helpers/database-init.js.map +1 -1
- package/dist/test/e2e/helpers/database.json +5 -2
- package/dist/test/e2e/helpers/test-helper.js +4 -4
- package/dist/test/e2e/helpers/test-helper.js.map +1 -1
- package/dist/test/e2e/routes/routes.test.js +2 -2
- package/dist/test/e2e/routes/routes.test.js.map +1 -1
- package/dist/test/e2e/services/access-service.e2e.test.js +1 -1
- package/dist/test/e2e/services/access-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/addon-service.e2e.test.js +2 -2
- package/dist/test/e2e/services/addon-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/api-token-service.e2e.test.js +30 -17
- package/dist/test/e2e/services/api-token-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/environment-service.test.js +38 -40
- package/dist/test/e2e/services/environment-service.test.js.map +1 -1
- package/dist/test/e2e/services/feature-toggle-service-v2.e2e.test.js +19 -13
- 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 +12 -12
- package/dist/test/e2e/services/project-health-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/project-service.e2e.test.js +27 -4
- package/dist/test/e2e/services/project-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/reset-token-service.e2e.test.js +3 -3
- package/dist/test/e2e/services/reset-token-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/session-service.e2e.test.js +1 -1
- package/dist/test/e2e/services/session-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/services/setting-service.test.js +2 -2
- package/dist/test/e2e/services/setting-service.test.js.map +1 -1
- package/dist/test/e2e/services/user-service.e2e.test.js +2 -2
- package/dist/test/e2e/services/user-service.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/client-application-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/client-application-store.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-tag-store.e2e.test.js +4 -4
- package/dist/test/e2e/stores/feature-tag-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/feature-toggle-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/feature-type-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/feature-type-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/project-store.e2e.test.js +5 -2
- package/dist/test/e2e/stores/project-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/setting-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/setting-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/user-feedback-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/user-feedback-store.e2e.test.js.map +1 -1
- package/dist/test/e2e/stores/user-store.e2e.test.js +1 -1
- package/dist/test/e2e/stores/user-store.e2e.test.js.map +1 -1
- package/dist/test/fixtures/fake-api-token-store.d.ts +2 -1
- package/dist/test/fixtures/fake-api-token-store.js.map +1 -1
- package/dist/test/fixtures/fake-environment-store.d.ts +5 -3
- package/dist/test/fixtures/fake-environment-store.js +22 -15
- package/dist/test/fixtures/fake-environment-store.js.map +1 -1
- package/dist/test/fixtures/fake-event-store.d.ts +1 -0
- 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-feature-environment-store.d.ts +7 -5
- package/dist/test/fixtures/fake-feature-environment-store.js +31 -10
- package/dist/test/fixtures/fake-feature-environment-store.js.map +1 -1
- package/dist/test/fixtures/fake-feature-strategies-store.d.ts +7 -13
- package/dist/test/fixtures/fake-feature-strategies-store.js +14 -51
- package/dist/test/fixtures/fake-feature-strategies-store.js.map +1 -1
- package/dist/test/fixtures/fake-feature-toggle-client-store.d.ts +9 -0
- package/dist/test/fixtures/fake-feature-toggle-client-store.js +50 -0
- package/dist/test/fixtures/fake-feature-toggle-client-store.js.map +1 -0
- package/dist/test/fixtures/fake-feature-toggle-store.d.ts +7 -9
- package/dist/test/fixtures/fake-feature-toggle-store.js +7 -14
- package/dist/test/fixtures/fake-feature-toggle-store.js.map +1 -1
- package/dist/test/fixtures/fake-project-store.d.ts +1 -2
- package/dist/test/fixtures/fake-project-store.js +0 -7
- package/dist/test/fixtures/fake-project-store.js.map +1 -1
- package/dist/test/fixtures/permissions.d.ts +3 -3
- package/dist/test/fixtures/permissions.js +5 -4
- package/dist/test/fixtures/permissions.js.map +1 -1
- package/dist/test/fixtures/store.js +2 -0
- package/dist/test/fixtures/store.js.map +1 -1
- package/package.json +51 -45
- package/dist/lib/extract-user.d.ts +0 -2
- package/dist/lib/extract-user.js +0 -6
- package/dist/lib/extract-user.js.map +0 -1
- package/dist/test/e2e/api/admin/boostrap.test.js.map +0 -1
- package/docs/api/oas/swagger-ui-bundle.js +0 -3
- package/docs/api/oas/swagger-ui-bundle.js.map +0 -1
- package/docs/api/oas/swagger-ui-es-bundle-core.js +0 -3
- package/docs/api/oas/swagger-ui-es-bundle-core.js.map +0 -1
- package/docs/api/oas/swagger-ui-es-bundle.js +0 -3
- package/docs/api/oas/swagger-ui-es-bundle.js.map +0 -1
- package/docs/api/oas/swagger-ui-standalone-preset.js +0 -3
- package/docs/api/oas/swagger-ui-standalone-preset.js.map +0 -1
- package/docs/api/oas/swagger-ui.css +0 -8906
- package/docs/api/oas/swagger-ui.css.map +0 -1
- package/docs/api/oas/swagger-ui.js +0 -3
- package/docs/api/oas/swagger-ui.js.map +0 -1
- package/docs/api/oas/swagger.json +0 -1479
|
@@ -6,16 +6,58 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const database_init_1 = __importDefault(require("../../../helpers/database-init"));
|
|
7
7
|
const test_helper_1 = require("../../../helpers/test-helper");
|
|
8
8
|
const no_logger_1 = __importDefault(require("../../../../fixtures/no-logger"));
|
|
9
|
+
const constants_1 = require("../../../../../lib/util/constants");
|
|
10
|
+
const events_1 = require("../../../../../lib/types/events");
|
|
9
11
|
let app;
|
|
10
12
|
let db;
|
|
13
|
+
const sortOrderFirst = 0;
|
|
14
|
+
const sortOrderSecond = 10;
|
|
15
|
+
const sortOrderDefault = 9999;
|
|
11
16
|
beforeAll(async () => {
|
|
12
|
-
db = await database_init_1.default('feature_strategy_api_serial', no_logger_1.default);
|
|
13
|
-
app = await test_helper_1.setupApp(db.stores);
|
|
17
|
+
db = await (0, database_init_1.default)('feature_strategy_api_serial', no_logger_1.default);
|
|
18
|
+
app = await (0, test_helper_1.setupApp)(db.stores);
|
|
19
|
+
});
|
|
20
|
+
afterEach(async () => {
|
|
21
|
+
const all = await db.stores.projectStore.getEnvironmentsForProject('default');
|
|
22
|
+
await Promise.all(all
|
|
23
|
+
.filter((env) => env !== constants_1.DEFAULT_ENV)
|
|
24
|
+
.map(async (env) => db.stores.projectStore.deleteEnvironmentForProject('default', env)));
|
|
14
25
|
});
|
|
15
26
|
afterAll(async () => {
|
|
16
27
|
await app.destroy();
|
|
17
28
|
await db.destroy();
|
|
18
29
|
});
|
|
30
|
+
async function addStrategies(featureName, envName) {
|
|
31
|
+
await app.request
|
|
32
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`)
|
|
33
|
+
.send({
|
|
34
|
+
name: 'default',
|
|
35
|
+
parameters: {
|
|
36
|
+
userId: 'string',
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
.expect(200);
|
|
40
|
+
await app.request
|
|
41
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`)
|
|
42
|
+
.send({
|
|
43
|
+
name: 'default',
|
|
44
|
+
parameters: {
|
|
45
|
+
userId: 'string',
|
|
46
|
+
},
|
|
47
|
+
sortOrder: sortOrderFirst,
|
|
48
|
+
})
|
|
49
|
+
.expect(200);
|
|
50
|
+
await app.request
|
|
51
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`)
|
|
52
|
+
.send({
|
|
53
|
+
name: 'default',
|
|
54
|
+
parameters: {
|
|
55
|
+
userId: 'string',
|
|
56
|
+
},
|
|
57
|
+
sortOrder: sortOrderSecond,
|
|
58
|
+
})
|
|
59
|
+
.expect(200);
|
|
60
|
+
}
|
|
19
61
|
test('Trying to add a strategy configuration to environment not connected to toggle should fail', async () => {
|
|
20
62
|
await app.request
|
|
21
63
|
.post('/api/admin/features')
|
|
@@ -100,11 +142,10 @@ test('Project overview includes environment connected to feature', async () => {
|
|
|
100
142
|
expect(res.body.name).toBe('com.test.environment');
|
|
101
143
|
expect(res.body.createdAt).toBeTruthy();
|
|
102
144
|
});
|
|
103
|
-
await
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.expect(201);
|
|
145
|
+
await db.stores.environmentStore.create({
|
|
146
|
+
name: 'project-overview',
|
|
147
|
+
type: 'production',
|
|
148
|
+
});
|
|
108
149
|
await app.request
|
|
109
150
|
.post('/api/admin/projects/default/environments')
|
|
110
151
|
.send({ environment: 'project-overview' })
|
|
@@ -113,7 +154,7 @@ test('Project overview includes environment connected to feature', async () => {
|
|
|
113
154
|
.get('/api/admin/projects/default')
|
|
114
155
|
.expect(200)
|
|
115
156
|
.expect((r) => {
|
|
116
|
-
expect(r.body.features[0].environments[0].name).toBe(
|
|
157
|
+
expect(r.body.features[0].environments[0].name).toBe(constants_1.DEFAULT_ENV);
|
|
117
158
|
expect(r.body.features[0].environments[1].name).toBe('project-overview');
|
|
118
159
|
});
|
|
119
160
|
});
|
|
@@ -131,11 +172,10 @@ test('Disconnecting environment from project, removes environment from features
|
|
|
131
172
|
expect(res.body.name).toBe('com.test.disconnect.environment');
|
|
132
173
|
expect(res.body.createdAt).toBeTruthy();
|
|
133
174
|
});
|
|
134
|
-
await
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
.expect(201);
|
|
175
|
+
await db.stores.environmentStore.create({
|
|
176
|
+
name: 'dis-project-overview',
|
|
177
|
+
type: 'production',
|
|
178
|
+
});
|
|
139
179
|
await app.request
|
|
140
180
|
.post('/api/admin/projects/default/environments')
|
|
141
181
|
.send({ environment: 'dis-project-overview' })
|
|
@@ -150,17 +190,14 @@ test('Disconnecting environment from project, removes environment from features
|
|
|
150
190
|
expect(r.body.features.some((e) => e.environment === 'dis-project-overview')).toBeFalsy();
|
|
151
191
|
});
|
|
152
192
|
});
|
|
153
|
-
test('Can enable/disable environment for feature', async () => {
|
|
193
|
+
test('Can enable/disable environment for feature with strategies', async () => {
|
|
154
194
|
const envName = 'enable-feature-environment';
|
|
195
|
+
const featureName = 'com.test.enable.environment';
|
|
155
196
|
// Create environment
|
|
156
|
-
await
|
|
157
|
-
.post('/api/admin/environments')
|
|
158
|
-
.send({
|
|
197
|
+
await db.stores.environmentStore.create({
|
|
159
198
|
name: envName,
|
|
160
|
-
|
|
161
|
-
})
|
|
162
|
-
.set('Content-Type', 'application/json')
|
|
163
|
-
.expect(201);
|
|
199
|
+
type: 'production',
|
|
200
|
+
});
|
|
164
201
|
// Connect environment to project
|
|
165
202
|
await app.request
|
|
166
203
|
.post('/api/admin/projects/default/environments')
|
|
@@ -172,21 +209,30 @@ test('Can enable/disable environment for feature', async () => {
|
|
|
172
209
|
await app.request
|
|
173
210
|
.post('/api/admin/projects/default/features')
|
|
174
211
|
.send({
|
|
175
|
-
name:
|
|
176
|
-
strategies: [{ name: 'default' }],
|
|
212
|
+
name: featureName,
|
|
177
213
|
})
|
|
178
214
|
.set('Content-Type', 'application/json')
|
|
179
215
|
.expect(201)
|
|
180
216
|
.expect((res) => {
|
|
181
|
-
expect(res.body.name).toBe(
|
|
217
|
+
expect(res.body.name).toBe(featureName);
|
|
182
218
|
expect(res.body.createdAt).toBeTruthy();
|
|
183
219
|
});
|
|
220
|
+
// Add strategy to it
|
|
184
221
|
await app.request
|
|
185
|
-
.post(
|
|
186
|
-
.send({
|
|
222
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`)
|
|
223
|
+
.send({
|
|
224
|
+
name: 'default',
|
|
225
|
+
parameters: {
|
|
226
|
+
userId: 'string',
|
|
227
|
+
},
|
|
228
|
+
})
|
|
187
229
|
.expect(200);
|
|
188
230
|
await app.request
|
|
189
|
-
.
|
|
231
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${envName}/on`)
|
|
232
|
+
.set('Content-Type', 'application/json')
|
|
233
|
+
.expect(200);
|
|
234
|
+
await app.request
|
|
235
|
+
.get(`/api/admin/projects/default/features/${featureName}`)
|
|
190
236
|
.expect(200)
|
|
191
237
|
.expect('Content-Type', /json/)
|
|
192
238
|
.expect((res) => {
|
|
@@ -195,11 +241,11 @@ test('Can enable/disable environment for feature', async () => {
|
|
|
195
241
|
expect(enabledFeatureEnv.enabled).toBe(true);
|
|
196
242
|
});
|
|
197
243
|
await app.request
|
|
198
|
-
.post(
|
|
244
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${envName}/off`)
|
|
199
245
|
.send({})
|
|
200
246
|
.expect(200);
|
|
201
247
|
await app.request
|
|
202
|
-
.get(
|
|
248
|
+
.get(`/api/admin/projects/default/features/${featureName}`)
|
|
203
249
|
.expect(200)
|
|
204
250
|
.expect('Content-Type', /json/)
|
|
205
251
|
.expect((res) => {
|
|
@@ -230,6 +276,15 @@ test('Can use new project feature toggle endpoint to create feature toggle witho
|
|
|
230
276
|
expect(res.body.project).toBe('default');
|
|
231
277
|
});
|
|
232
278
|
});
|
|
279
|
+
test('Can create feature toggle without strategies', async () => {
|
|
280
|
+
const name = 'new.toggle.without.strategy.2';
|
|
281
|
+
await app.request
|
|
282
|
+
.post('/api/admin/projects/default/features')
|
|
283
|
+
.send({ name });
|
|
284
|
+
const { body: toggle } = await app.request.get(`/api/admin/projects/default/features/${name}`);
|
|
285
|
+
expect(toggle.environments).toHaveLength(1);
|
|
286
|
+
expect(toggle.environments[0].strategies).toHaveLength(0);
|
|
287
|
+
});
|
|
233
288
|
test('Still validates feature toggle input when creating', async () => {
|
|
234
289
|
await app.request
|
|
235
290
|
.post('/api/admin/projects/default/features')
|
|
@@ -266,14 +321,10 @@ test('Trying to create toggle under project that does not exist should fail', as
|
|
|
266
321
|
test('Can get environment info for feature toggle', async () => {
|
|
267
322
|
const envName = 'environment-info';
|
|
268
323
|
// Create environment
|
|
269
|
-
await
|
|
270
|
-
.post('/api/admin/environments')
|
|
271
|
-
.send({
|
|
324
|
+
await db.stores.environmentStore.create({
|
|
272
325
|
name: envName,
|
|
273
|
-
|
|
274
|
-
})
|
|
275
|
-
.set('Content-Type', 'application/json')
|
|
276
|
-
.expect(201);
|
|
326
|
+
type: 'production',
|
|
327
|
+
});
|
|
277
328
|
// Connect environment to project
|
|
278
329
|
await app.request
|
|
279
330
|
.post('/api/admin/projects/default/environments')
|
|
@@ -322,17 +373,96 @@ test('Getting feature that does not exist should yield 404', async () => {
|
|
|
322
373
|
.get('/api/admin/projects/default/features/non.existing.feature')
|
|
323
374
|
.expect(404);
|
|
324
375
|
});
|
|
325
|
-
test('
|
|
326
|
-
const
|
|
327
|
-
|
|
376
|
+
test('Should update feature toggle', async () => {
|
|
377
|
+
const url = '/api/admin/projects/default/features';
|
|
378
|
+
const name = 'new.toggle.update';
|
|
379
|
+
await app.request
|
|
380
|
+
.post(url)
|
|
381
|
+
.send({ name, description: 'some', type: 'release' })
|
|
382
|
+
.expect(201);
|
|
383
|
+
await app.request
|
|
384
|
+
.put(`${url}/${name}`)
|
|
385
|
+
.send({ name, description: 'updated', type: 'kill-switch' })
|
|
386
|
+
.expect(200);
|
|
387
|
+
const { body: toggle } = await app.request.get(`${url}/${name}`);
|
|
388
|
+
expect(toggle.name).toBe(name);
|
|
389
|
+
expect(toggle.description).toBe('updated');
|
|
390
|
+
expect(toggle.type).toBe('kill-switch');
|
|
391
|
+
expect(toggle.archived).toBeFalsy();
|
|
392
|
+
});
|
|
393
|
+
test('Should not change name of feature toggle', async () => {
|
|
394
|
+
const url = '/api/admin/projects/default/features';
|
|
395
|
+
const name = 'new.toggle.update.2';
|
|
396
|
+
await app.request
|
|
397
|
+
.post(url)
|
|
398
|
+
.send({ name, description: 'some', type: 'release' })
|
|
399
|
+
.expect(201);
|
|
400
|
+
await app.request
|
|
401
|
+
.put(`${url}/${name}`)
|
|
402
|
+
.send({ name: 'new name', description: 'updated', type: 'kill-switch' })
|
|
403
|
+
.expect(400);
|
|
404
|
+
});
|
|
405
|
+
test('Should not change project of feature toggle even if it is part of body', async () => {
|
|
406
|
+
const url = '/api/admin/projects/default/features';
|
|
407
|
+
const name = 'new.toggle.update.3';
|
|
328
408
|
await app.request
|
|
329
|
-
.post(
|
|
409
|
+
.post(url)
|
|
410
|
+
.send({ name, description: 'some', type: 'release' })
|
|
411
|
+
.expect(201);
|
|
412
|
+
const { body } = await app.request
|
|
413
|
+
.put(`${url}/${name}`)
|
|
330
414
|
.send({
|
|
331
|
-
name
|
|
332
|
-
|
|
415
|
+
name,
|
|
416
|
+
description: 'updated',
|
|
417
|
+
type: 'kill-switch',
|
|
418
|
+
project: 'new',
|
|
333
419
|
})
|
|
334
|
-
.
|
|
420
|
+
.expect(200);
|
|
421
|
+
expect(body.project).toBe('default');
|
|
422
|
+
});
|
|
423
|
+
test('Should patch feature toggle', async () => {
|
|
424
|
+
const url = '/api/admin/projects/default/features';
|
|
425
|
+
const name = 'new.toggle.patch';
|
|
426
|
+
await app.request
|
|
427
|
+
.post(url)
|
|
428
|
+
.send({ name, description: 'some', type: 'release' })
|
|
429
|
+
.expect(201);
|
|
430
|
+
await app.request
|
|
431
|
+
.patch(`${url}/${name}`)
|
|
432
|
+
.send([
|
|
433
|
+
{ op: 'replace', path: '/description', value: 'New desc' },
|
|
434
|
+
{ op: 'replace', path: '/type', value: 'kill-switch' },
|
|
435
|
+
])
|
|
436
|
+
.expect(200);
|
|
437
|
+
const { body: toggle } = await app.request.get(`${url}/${name}`);
|
|
438
|
+
expect(toggle.name).toBe(name);
|
|
439
|
+
expect(toggle.description).toBe('New desc');
|
|
440
|
+
expect(toggle.type).toBe('kill-switch');
|
|
441
|
+
expect(toggle.archived).toBeFalsy();
|
|
442
|
+
});
|
|
443
|
+
test('Should archive feature toggle', async () => {
|
|
444
|
+
const url = '/api/admin/projects/default/features';
|
|
445
|
+
const name = 'new.toggle.archive';
|
|
446
|
+
await app.request
|
|
447
|
+
.post(url)
|
|
448
|
+
.send({ name, description: 'some', type: 'release' })
|
|
335
449
|
.expect(201);
|
|
450
|
+
await app.request.delete(`${url}/${name}`);
|
|
451
|
+
await app.request.get(`${url}/${name}`).expect(404);
|
|
452
|
+
const { body } = await app.request
|
|
453
|
+
.get(`/api/admin/archive/features`)
|
|
454
|
+
.expect(200);
|
|
455
|
+
const toggle = body.features.find((f) => f.name === name);
|
|
456
|
+
expect(toggle).toBeDefined();
|
|
457
|
+
});
|
|
458
|
+
test('Can add strategy to feature toggle to a "some-env-2"', async () => {
|
|
459
|
+
const envName = 'some-env-2';
|
|
460
|
+
const featureName = 'feature.strategy.toggle';
|
|
461
|
+
// Create environment
|
|
462
|
+
await db.stores.environmentStore.create({
|
|
463
|
+
name: envName,
|
|
464
|
+
type: 'production',
|
|
465
|
+
});
|
|
336
466
|
// Connect environment to project
|
|
337
467
|
await app.request
|
|
338
468
|
.post('/api/admin/projects/default/environments')
|
|
@@ -340,7 +470,6 @@ test('Can add strategy to feature toggle', async () => {
|
|
|
340
470
|
environment: envName,
|
|
341
471
|
})
|
|
342
472
|
.expect(200);
|
|
343
|
-
const featureName = 'feature.strategy.toggle';
|
|
344
473
|
await app.request
|
|
345
474
|
.post('/api/admin/projects/default/features')
|
|
346
475
|
.send({ name: featureName })
|
|
@@ -357,20 +486,79 @@ test('Can add strategy to feature toggle', async () => {
|
|
|
357
486
|
await app.request
|
|
358
487
|
.get(`/api/admin/projects/default/features/${featureName}`)
|
|
359
488
|
.expect((res) => {
|
|
360
|
-
|
|
489
|
+
const env = res.body.environments.find((e) => e.name === envName);
|
|
490
|
+
expect(env.strategies).toHaveLength(1);
|
|
361
491
|
});
|
|
362
492
|
});
|
|
363
|
-
test('
|
|
364
|
-
const
|
|
365
|
-
|
|
493
|
+
test('Environments are returned in sortOrder', async () => {
|
|
494
|
+
const sortedSecond = 'sortedSecond';
|
|
495
|
+
const sortedLast = 'sortedLast';
|
|
496
|
+
const featureName = 'feature.strategy.toggle.sortOrder';
|
|
497
|
+
// Create environments
|
|
498
|
+
await db.stores.environmentStore.create({
|
|
499
|
+
name: sortedLast,
|
|
500
|
+
type: 'production',
|
|
501
|
+
sortOrder: 8000,
|
|
502
|
+
});
|
|
503
|
+
await db.stores.environmentStore.create({
|
|
504
|
+
name: sortedSecond,
|
|
505
|
+
type: 'production',
|
|
506
|
+
sortOrder: 8,
|
|
507
|
+
});
|
|
508
|
+
// Connect environments to project
|
|
366
509
|
await app.request
|
|
367
|
-
.post('/api/admin/environments')
|
|
510
|
+
.post('/api/admin/projects/default/environments')
|
|
368
511
|
.send({
|
|
369
|
-
|
|
370
|
-
displayName: 'Enable feature for environment',
|
|
512
|
+
environment: sortedSecond,
|
|
371
513
|
})
|
|
372
|
-
.
|
|
514
|
+
.expect(200);
|
|
515
|
+
await app.request
|
|
516
|
+
.post('/api/admin/projects/default/environments')
|
|
517
|
+
.send({
|
|
518
|
+
environment: sortedLast,
|
|
519
|
+
})
|
|
520
|
+
.expect(200);
|
|
521
|
+
/* Create feature toggle */
|
|
522
|
+
await app.request
|
|
523
|
+
.post('/api/admin/projects/default/features')
|
|
524
|
+
.send({ name: featureName })
|
|
373
525
|
.expect(201);
|
|
526
|
+
/* create strategies connected to feature toggle */
|
|
527
|
+
await app.request
|
|
528
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${sortedSecond}/strategies`)
|
|
529
|
+
.send({
|
|
530
|
+
name: 'default',
|
|
531
|
+
parameters: {
|
|
532
|
+
userId: 'string',
|
|
533
|
+
},
|
|
534
|
+
})
|
|
535
|
+
.expect(200);
|
|
536
|
+
await app.request
|
|
537
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${sortedLast}/strategies`)
|
|
538
|
+
.send({
|
|
539
|
+
name: 'default',
|
|
540
|
+
parameters: {
|
|
541
|
+
userId: 'string',
|
|
542
|
+
},
|
|
543
|
+
})
|
|
544
|
+
.expect(200);
|
|
545
|
+
await app.request
|
|
546
|
+
.get(`/api/admin/projects/default/features/${featureName}`)
|
|
547
|
+
.expect(200)
|
|
548
|
+
.expect((res) => {
|
|
549
|
+
expect(res.body.environments).toHaveLength(3);
|
|
550
|
+
expect(res.body.environments[0].name).toBe(constants_1.DEFAULT_ENV);
|
|
551
|
+
expect(res.body.environments[1].name).toBe(sortedSecond);
|
|
552
|
+
expect(res.body.environments[2].name).toBe(sortedLast);
|
|
553
|
+
});
|
|
554
|
+
});
|
|
555
|
+
test('Can get strategies for feature and environment', async () => {
|
|
556
|
+
const envName = 'get-strategy';
|
|
557
|
+
// Create environment
|
|
558
|
+
await db.stores.environmentStore.create({
|
|
559
|
+
name: envName,
|
|
560
|
+
type: 'production',
|
|
561
|
+
});
|
|
374
562
|
// Connect environment to project
|
|
375
563
|
await app.request
|
|
376
564
|
.post('/api/admin/projects/default/environments')
|
|
@@ -413,14 +601,10 @@ test('Getting strategies for environment that does not exist yields 404', async
|
|
|
413
601
|
test('Can update a strategy based on id', async () => {
|
|
414
602
|
const envName = 'feature.update.strategies';
|
|
415
603
|
// Create environment
|
|
416
|
-
await
|
|
417
|
-
.post('/api/admin/environments')
|
|
418
|
-
.send({
|
|
604
|
+
await db.stores.environmentStore.create({
|
|
419
605
|
name: envName,
|
|
420
|
-
|
|
421
|
-
})
|
|
422
|
-
.set('Content-Type', 'application/json')
|
|
423
|
-
.expect(201);
|
|
606
|
+
type: 'production',
|
|
607
|
+
});
|
|
424
608
|
// Connect environment to project
|
|
425
609
|
await app.request
|
|
426
610
|
.post('/api/admin/projects/default/environments')
|
|
@@ -461,14 +645,10 @@ test('Can update a strategy based on id', async () => {
|
|
|
461
645
|
test('Trying to update a non existing feature strategy should yield 404', async () => {
|
|
462
646
|
const envName = 'feature.non.existing.strategy';
|
|
463
647
|
// Create environment
|
|
464
|
-
await
|
|
465
|
-
.post('/api/admin/environments')
|
|
466
|
-
.send({
|
|
648
|
+
await db.stores.environmentStore.create({
|
|
467
649
|
name: envName,
|
|
468
|
-
|
|
469
|
-
})
|
|
470
|
-
.set('Content-Type', 'application/json')
|
|
471
|
-
.expect(201);
|
|
650
|
+
type: 'production',
|
|
651
|
+
});
|
|
472
652
|
// Connect environment to project
|
|
473
653
|
await app.request
|
|
474
654
|
.post('/api/admin/projects/default/environments')
|
|
@@ -486,17 +666,59 @@ test('Trying to update a non existing feature strategy should yield 404', async
|
|
|
486
666
|
.send({ parameters: { fancyField: 'string' } })
|
|
487
667
|
.expect(404);
|
|
488
668
|
});
|
|
489
|
-
test('
|
|
490
|
-
const
|
|
669
|
+
test('Can patch a strategy based on id', async () => {
|
|
670
|
+
const BASE_URI = '/api/admin/projects/default';
|
|
671
|
+
const envName = 'feature.patch.strategies';
|
|
672
|
+
const featureName = 'feature.patch.strategies';
|
|
491
673
|
// Create environment
|
|
674
|
+
await db.stores.environmentStore.create({
|
|
675
|
+
name: envName,
|
|
676
|
+
type: 'test',
|
|
677
|
+
});
|
|
678
|
+
// Connect environment to project
|
|
492
679
|
await app.request
|
|
493
|
-
.post(
|
|
680
|
+
.post(`${BASE_URI}/environments`)
|
|
494
681
|
.send({
|
|
495
|
-
|
|
496
|
-
displayName: 'Enable feature for environment',
|
|
682
|
+
environment: envName,
|
|
497
683
|
})
|
|
498
|
-
.
|
|
684
|
+
.expect(200);
|
|
685
|
+
await app.request
|
|
686
|
+
.post(`${BASE_URI}/features`)
|
|
687
|
+
.send({ name: featureName })
|
|
499
688
|
.expect(201);
|
|
689
|
+
let strategy;
|
|
690
|
+
await app.request
|
|
691
|
+
.post(`${BASE_URI}/features/${featureName}/environments/${envName}/strategies`)
|
|
692
|
+
.send({
|
|
693
|
+
name: 'flexibleRollout',
|
|
694
|
+
parameters: {
|
|
695
|
+
groupId: 'demo',
|
|
696
|
+
rollout: 20,
|
|
697
|
+
stickiness: 'default',
|
|
698
|
+
},
|
|
699
|
+
})
|
|
700
|
+
.expect(200)
|
|
701
|
+
.expect((res) => {
|
|
702
|
+
strategy = res.body;
|
|
703
|
+
});
|
|
704
|
+
await app.request
|
|
705
|
+
.patch(`${BASE_URI}/features/${featureName}/environments/${envName}/strategies/${strategy.id}`)
|
|
706
|
+
.send([{ op: 'replace', path: '/parameters/rollout', value: 42 }])
|
|
707
|
+
.expect(200);
|
|
708
|
+
await app.request
|
|
709
|
+
.get(`${BASE_URI}/features/${featureName}/environments/${envName}/strategies/${strategy.id}`)
|
|
710
|
+
.expect(200)
|
|
711
|
+
.expect((res) => {
|
|
712
|
+
expect(res.body.parameters.rollout).toBe(42);
|
|
713
|
+
});
|
|
714
|
+
});
|
|
715
|
+
test('Trying to get a non existing feature strategy should yield 404', async () => {
|
|
716
|
+
const envName = 'feature.non.existing.strategy.get';
|
|
717
|
+
// Create environment
|
|
718
|
+
await db.stores.environmentStore.create({
|
|
719
|
+
name: envName,
|
|
720
|
+
type: 'production',
|
|
721
|
+
});
|
|
500
722
|
// Connect environment to project
|
|
501
723
|
await app.request
|
|
502
724
|
.post('/api/admin/projects/default/environments')
|
|
@@ -513,4 +735,213 @@ test('Trying to get a non existing feature strategy should yield 404', async ()
|
|
|
513
735
|
.get(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies/some-non-existing-id`)
|
|
514
736
|
.expect(404);
|
|
515
737
|
});
|
|
738
|
+
test('Can not enable environment for feature without strategies', async () => {
|
|
739
|
+
const environment = 'some-env';
|
|
740
|
+
const featureName = 'com.test.enable.environment.disabled';
|
|
741
|
+
// Create environment
|
|
742
|
+
await db.stores.environmentStore.create({
|
|
743
|
+
name: environment,
|
|
744
|
+
type: 'test',
|
|
745
|
+
});
|
|
746
|
+
// Connect environment to project
|
|
747
|
+
await app.request
|
|
748
|
+
.post('/api/admin/projects/default/environments')
|
|
749
|
+
.send({ environment })
|
|
750
|
+
.expect(200);
|
|
751
|
+
// Create feature
|
|
752
|
+
await app.request
|
|
753
|
+
.post('/api/admin/projects/default/features')
|
|
754
|
+
.send({
|
|
755
|
+
name: featureName,
|
|
756
|
+
})
|
|
757
|
+
.set('Content-Type', 'application/json')
|
|
758
|
+
.expect(201);
|
|
759
|
+
await app.request
|
|
760
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${environment}/on`)
|
|
761
|
+
.set('Content-Type', 'application/json')
|
|
762
|
+
.expect(403);
|
|
763
|
+
await app.request
|
|
764
|
+
.get(`/api/admin/projects/default/features/${featureName}`)
|
|
765
|
+
.expect(200)
|
|
766
|
+
.expect('Content-Type', /json/)
|
|
767
|
+
.expect((res) => {
|
|
768
|
+
const enabledFeatureEnv = res.body.environments.find((e) => e.name === environment);
|
|
769
|
+
expect(enabledFeatureEnv.enabled).toBe(false);
|
|
770
|
+
expect(enabledFeatureEnv.type).toBe('test');
|
|
771
|
+
});
|
|
772
|
+
});
|
|
773
|
+
test('Enabling environment creates a FEATURE_ENVIRONMENT_ENABLED event', async () => {
|
|
774
|
+
const environment = 'environment_enabled_env';
|
|
775
|
+
const featureName = 'com.test.enable.environment.event.sent';
|
|
776
|
+
// Create environment
|
|
777
|
+
await db.stores.environmentStore.create({
|
|
778
|
+
name: environment,
|
|
779
|
+
type: 'test',
|
|
780
|
+
});
|
|
781
|
+
// Connect environment to project
|
|
782
|
+
await app.request
|
|
783
|
+
.post('/api/admin/projects/default/environments')
|
|
784
|
+
.send({ environment })
|
|
785
|
+
.expect(200);
|
|
786
|
+
// Create feature
|
|
787
|
+
await app.request
|
|
788
|
+
.post('/api/admin/projects/default/features')
|
|
789
|
+
.send({
|
|
790
|
+
name: featureName,
|
|
791
|
+
})
|
|
792
|
+
.set('Content-Type', 'application/json')
|
|
793
|
+
.expect(201);
|
|
794
|
+
await app.request
|
|
795
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${environment}/strategies`)
|
|
796
|
+
.send({ name: 'default', constraints: [], properties: {} })
|
|
797
|
+
.expect(200);
|
|
798
|
+
await app.request
|
|
799
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${environment}/on`)
|
|
800
|
+
.set('Content-Type', 'application/json')
|
|
801
|
+
.expect(200);
|
|
802
|
+
const events = await db.stores.eventStore.getAll({
|
|
803
|
+
type: events_1.FEATURE_ENVIRONMENT_ENABLED,
|
|
804
|
+
});
|
|
805
|
+
const enabledEvents = events.filter((e) => e.data.name === featureName);
|
|
806
|
+
expect(enabledEvents).toHaveLength(1);
|
|
807
|
+
});
|
|
808
|
+
test('Disabling environment creates a FEATURE_ENVIRONMENT_DISABLED event', async () => {
|
|
809
|
+
const environment = 'environment_disabled_env';
|
|
810
|
+
const featureName = 'com.test.enable.environment_disabled.sent';
|
|
811
|
+
// Create environment
|
|
812
|
+
await db.stores.environmentStore.create({
|
|
813
|
+
name: environment,
|
|
814
|
+
type: 'test',
|
|
815
|
+
});
|
|
816
|
+
// Connect environment to project
|
|
817
|
+
await app.request
|
|
818
|
+
.post('/api/admin/projects/default/environments')
|
|
819
|
+
.send({ environment })
|
|
820
|
+
.expect(200);
|
|
821
|
+
// Create feature
|
|
822
|
+
await app.request
|
|
823
|
+
.post('/api/admin/projects/default/features')
|
|
824
|
+
.send({
|
|
825
|
+
name: featureName,
|
|
826
|
+
})
|
|
827
|
+
.set('Content-Type', 'application/json')
|
|
828
|
+
.expect(201);
|
|
829
|
+
await app.request
|
|
830
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${environment}/strategies`)
|
|
831
|
+
.send({ name: 'default', constraints: [], properties: {} })
|
|
832
|
+
.expect(200);
|
|
833
|
+
await app.request
|
|
834
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${environment}/off`)
|
|
835
|
+
.set('Content-Type', 'application/json')
|
|
836
|
+
.expect(200);
|
|
837
|
+
const events = await db.stores.eventStore.getAll({
|
|
838
|
+
type: events_1.FEATURE_ENVIRONMENT_DISABLED,
|
|
839
|
+
});
|
|
840
|
+
const ourFeatureEvent = events.find((e) => e.data.name === featureName);
|
|
841
|
+
expect(ourFeatureEvent).toBeTruthy();
|
|
842
|
+
});
|
|
843
|
+
test('Can delete strategy from feature toggle', async () => {
|
|
844
|
+
const envName = 'del-strategy';
|
|
845
|
+
const featureName = 'feature.strategy.toggle.delete.strategy';
|
|
846
|
+
// Create environment
|
|
847
|
+
await db.stores.environmentStore.create({
|
|
848
|
+
name: envName,
|
|
849
|
+
type: 'test',
|
|
850
|
+
});
|
|
851
|
+
// Connect environment to project
|
|
852
|
+
await app.request
|
|
853
|
+
.post('/api/admin/projects/default/environments')
|
|
854
|
+
.send({
|
|
855
|
+
environment: envName,
|
|
856
|
+
})
|
|
857
|
+
.expect(200);
|
|
858
|
+
await app.request
|
|
859
|
+
.post('/api/admin/projects/default/features')
|
|
860
|
+
.send({ name: featureName })
|
|
861
|
+
.expect(201);
|
|
862
|
+
await app.request
|
|
863
|
+
.post(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`)
|
|
864
|
+
.send({
|
|
865
|
+
name: 'default',
|
|
866
|
+
parameters: {
|
|
867
|
+
userId: 'string',
|
|
868
|
+
},
|
|
869
|
+
})
|
|
870
|
+
.expect(200);
|
|
871
|
+
const { body } = await app.request.get(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`);
|
|
872
|
+
const strategies = body;
|
|
873
|
+
const strategyId = strategies[0].id;
|
|
874
|
+
await app.request
|
|
875
|
+
.delete(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies/${strategyId}`)
|
|
876
|
+
.expect(200);
|
|
877
|
+
});
|
|
878
|
+
test('List of strategies should respect sortOrder', async () => {
|
|
879
|
+
const envName = 'sortOrderdel-strategy';
|
|
880
|
+
const featureName = 'feature.sort.order.one';
|
|
881
|
+
// Create environment
|
|
882
|
+
await db.stores.environmentStore.create({
|
|
883
|
+
name: envName,
|
|
884
|
+
type: 'test',
|
|
885
|
+
});
|
|
886
|
+
// Connect environment to project
|
|
887
|
+
await app.request
|
|
888
|
+
.post('/api/admin/projects/default/environments')
|
|
889
|
+
.send({
|
|
890
|
+
environment: envName,
|
|
891
|
+
})
|
|
892
|
+
.expect(200);
|
|
893
|
+
await app.request
|
|
894
|
+
.post('/api/admin/projects/default/features')
|
|
895
|
+
.send({ name: featureName })
|
|
896
|
+
.expect(201);
|
|
897
|
+
await addStrategies(featureName, envName);
|
|
898
|
+
const { body } = await app.request.get(`/api/admin/projects/default/features/${featureName}/environments/${envName}/strategies`);
|
|
899
|
+
const strategies = body;
|
|
900
|
+
expect(strategies[0].sortOrder).toBe(sortOrderFirst);
|
|
901
|
+
expect(strategies[1].sortOrder).toBe(sortOrderSecond);
|
|
902
|
+
expect(strategies[2].sortOrder).toBe(sortOrderDefault);
|
|
903
|
+
});
|
|
904
|
+
test('Feature strategies list should respect strategy sortorders for each environment', async () => {
|
|
905
|
+
const envName = 'sort-order-within-environment-one';
|
|
906
|
+
const secondEnv = 'sort-order-within-environment-two';
|
|
907
|
+
const featureName = 'feature.sort.order.environment.list';
|
|
908
|
+
// Create environment
|
|
909
|
+
await db.stores.environmentStore.create({
|
|
910
|
+
name: envName,
|
|
911
|
+
type: 'test',
|
|
912
|
+
});
|
|
913
|
+
await db.stores.environmentStore.create({
|
|
914
|
+
name: secondEnv,
|
|
915
|
+
type: 'test',
|
|
916
|
+
});
|
|
917
|
+
// Connect environment to project
|
|
918
|
+
await app.request
|
|
919
|
+
.post('/api/admin/projects/default/environments')
|
|
920
|
+
.send({
|
|
921
|
+
environment: envName,
|
|
922
|
+
})
|
|
923
|
+
.expect(200);
|
|
924
|
+
await app.request
|
|
925
|
+
.post('/api/admin/projects/default/environments')
|
|
926
|
+
.send({
|
|
927
|
+
environment: secondEnv,
|
|
928
|
+
})
|
|
929
|
+
.expect(200);
|
|
930
|
+
await app.request
|
|
931
|
+
.post('/api/admin/projects/default/features')
|
|
932
|
+
.send({ name: featureName })
|
|
933
|
+
.expect(201);
|
|
934
|
+
await addStrategies(featureName, envName);
|
|
935
|
+
await addStrategies(featureName, secondEnv);
|
|
936
|
+
const response = await app.request.get(`/api/admin/projects/default/features/${featureName}`);
|
|
937
|
+
const { body } = response;
|
|
938
|
+
let { strategies } = body.environments.find((e) => e.name === envName);
|
|
939
|
+
expect(strategies[0].sortOrder).toBe(sortOrderFirst);
|
|
940
|
+
expect(strategies[1].sortOrder).toBe(sortOrderSecond);
|
|
941
|
+
expect(strategies[2].sortOrder).toBe(sortOrderDefault);
|
|
942
|
+
strategies = body.environments.find((e) => e.name === secondEnv).strategies;
|
|
943
|
+
expect(strategies[0].sortOrder).toBe(sortOrderFirst);
|
|
944
|
+
expect(strategies[1].sortOrder).toBe(sortOrderSecond);
|
|
945
|
+
expect(strategies[2].sortOrder).toBe(sortOrderDefault);
|
|
946
|
+
});
|
|
516
947
|
//# sourceMappingURL=feature.strategy.e2e.test.js.map
|