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);
});