feat(medusa, utils): Allow object feature flags (#4701)

Feature flags can be set as follows:

**Environment variables**
```
MEDUSA_FF_ANALYTICS=true
MEDUSA_FF_WORKFLOWS=createProducts,addShippingMethods
```

**Project config**
```
{
  featureFlags: {
    analytics: true,
    workflows: {
      createProducts: true,
      addShippingMethods: true,
    }
  }
}
```
This commit is contained in:
Oli Juhl
2023-08-07 11:38:25 +02:00
committed by GitHub
parent 03fb0479c0
commit 5c60aad177
17 changed files with 478 additions and 115 deletions

View File

@@ -6,9 +6,10 @@ import { initDb, useDb } from "../../../../environment-helpers/use-db"
import adminSeeder from "../../../../helpers/admin-seeder"
import productSeeder from "../../../../helpers/product-seeder"
import { simpleSalesChannelFactory } from "../../../../factories"
import { AxiosInstance } from "axios"
import { Modules, ModulesDefinition } from "@medusajs/modules-sdk"
import { Workflows } from "@medusajs/workflows"
import { AxiosInstance } from "axios"
import { simpleSalesChannelFactory } from "../../../../factories"
jest.setTimeout(5000000)
@@ -51,6 +52,16 @@ describe("/admin/products", () => {
).toBeTruthy()
})
it("Should have enabled workflows feature flag", function () {
const flagRouter = medusaContainer.resolve("featureFlagRouter")
const workflowsFlag = flagRouter.isFeatureEnabled({
workflows: Workflows.CreateProducts,
})
expect(workflowsFlag).toBe(true)
})
describe("POST /admin/products", () => {
beforeEach(async () => {
await productSeeder(dbConnection)

View File

@@ -1,4 +1,5 @@
const { Modules } = require("@medusajs/modules-sdk")
const { Workflows } = require("@medusajs/workflows")
const DB_HOST = process.env.DB_HOST
const DB_USERNAME = process.env.DB_USERNAME
const DB_PASSWORD = process.env.DB_PASSWORD
@@ -31,6 +32,11 @@ module.exports = {
cookie_secret: "test",
database_extra: { idle_in_transaction_session_timeout: 0 },
},
featureFlags: {
workflows: {
[Workflows.CreateProducts]: true,
},
},
modules: {
[Modules.STOCK_LOCATION]: {
scope: "internal",