From 9108ea141add6ceadf5ed15117214ec51747a426 Mon Sep 17 00:00:00 2001 From: Zhiyuan Liang <141655842+zhiyuanliang-ms@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:38:33 +0800 Subject: [PATCH] Update browser test (#45) * update browser test * fix lint * update * update * update --- test/browser/browser.test.ts | 3 +- test/browser/index.html | 2 +- test/browser/testcases.js | 125 +++++++++++++++++++++++------------ 3 files changed, 85 insertions(+), 45 deletions(-) diff --git a/test/browser/browser.test.ts b/test/browser/browser.test.ts index e6b137c..b7e71be 100644 --- a/test/browser/browser.test.ts +++ b/test/browser/browser.test.ts @@ -7,16 +7,15 @@ test("Testcase can pass in browser environment", async ({ page }) => { const filePath = path.join(__dirname, "index.html"); let hasPageError = false; - page.on("pageerror", (err) => { hasPageError = true; console.log(`Page Error: ${err.message}`); }); await page.goto(`file:${filePath}`); + await page.waitForTimeout(10000); const failures = await page.evaluate(() => (window as any).mochaFailures); - chai.expect(failures).to.equal(0); chai.expect(hasPageError).to.be.false; }); diff --git a/test/browser/index.html b/test/browser/index.html index 57df7fd..5c07b7e 100644 --- a/test/browser/index.html +++ b/test/browser/index.html @@ -19,7 +19,7 @@ diff --git a/test/browser/testcases.js b/test/browser/testcases.js index ba865ed..a31cd04 100644 --- a/test/browser/testcases.js +++ b/test/browser/testcases.js @@ -1,63 +1,104 @@ const ConfigurationObjectFeatureFlagProvider = FeatureManagement.ConfigurationObjectFeatureFlagProvider; const FeatureManager = FeatureManagement.FeatureManager; -describe("feature manager", () => { - it("should load from json string", - async () => { - const jsonObject = { - "feature_management": { - "feature_flags": [ +const jsonObject = { + "feature_management": { + "feature_flags": [ + { + "id": "ComplexTargeting", + "description": "A feature flag using a targeting filter, that will return true for Alice, Stage1, and 50% of Stage2. Dave and Stage3 are excluded. The default rollout percentage is 25%.", + "enabled": true, + "conditions": { + "client_filters": [ { - "id": "ComplexTargeting", - "description": "A feature flag using a targeting filter, that will return true for Alice, Stage1, and 50% of Stage2. Dave and Stage3 are excluded. The default rollout percentage is 25%.", - "enabled": true, - "conditions": { - "client_filters": [ - { - "name": "Microsoft.Targeting", - "parameters": { - "Audience": { - "Users": [ - "Alice" - ], - "Groups": [ - { - "Name": "Stage1", - "RolloutPercentage": 100 - }, - { - "Name": "Stage2", - "RolloutPercentage": 50 - } - ], - "DefaultRolloutPercentage": 25, - "Exclusion": { - "Users": ["Dave"], - "Groups": ["Stage3"] - } - } + "name": "Microsoft.Targeting", + "parameters": { + "Audience": { + "Users": [ + "Alice" + ], + "Groups": [ + { + "Name": "Stage1", + "RolloutPercentage": 100 + }, + { + "Name": "Stage2", + "RolloutPercentage": 50 } + ], + "DefaultRolloutPercentage": 25, + "Exclusion": { + "Users": ["Dave"], + "Groups": ["Stage3"] } - ] + } } } ] } - }; - - const provider = new ConfigurationObjectFeatureFlagProvider(jsonObject); - const featureManager = new FeatureManager(provider); + } + ] + } +}; + +const provider = new ConfigurationObjectFeatureFlagProvider(jsonObject); +const featureManager = new FeatureManager(provider); + +describe("feature manager", () => { + it("should not target user Aiden in default rollout", + async () => { chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Aiden" })).to.eq(false); + } + ).timeout(1000);; + + it("should target user Bloosom in default rollout", + async () => { chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Blossom" })).to.eq(true); + } + ).timeout(1000);; + + it("should target user Alice", + async () => { chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Alice" })).to.eq(true); + } + ).timeout(1000);; + + it("should target user Aiden in group Stage1", + async () => { chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Aiden", groups: ["Stage1"] })).to.eq(true); + } + ).timeout(1000);; + + it("should not target user Dave in group Stage1", + async () => { + chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Dave", groups: ["Stage1"] })).to.eq(false); + } + ).timeout(1000);; + + it("should not target empty user in group Stage2", + async () => { chai.expect(await featureManager.isEnabled("ComplexTargeting", { groups: ["Stage2"] })).to.eq(false); + } + ).timeout(1000);; + + it("should target user Aiden in group Stage2", + async () => { chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Aiden", groups: ["Stage2"] })).to.eq(true); + } + ).timeout(1000);; + + it("should not target user Chris in group Stage2", + async () => { chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Chris", groups: ["Stage2"] })).to.eq(false); - chai.expect(await featureManager.isEnabled("ComplexTargeting", { groups: ["Stage3"] })).to.eq(false), + } + ).timeout(1000);; + + it("should not target group Stage3", + async () => { + chai.expect(await featureManager.isEnabled("ComplexTargeting", { groups: ["Stage3"] })).to.eq(false); chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Alice", groups: ["Stage3"] })).to.eq(false); chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Blossom", groups: ["Stage3"] })).to.eq(false); - chai.expect(await featureManager.isEnabled("ComplexTargeting", { userId: "Dave", groups: ["Stage1"] })).to.eq(false); } - ); + ).timeout(1000); });