Skip to content

Commit b85269d

Browse files
committed
add error hook test
1 parent 863b402 commit b85269d

File tree

3 files changed

+70
-2
lines changed
  • dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature

3 files changed

+70
-2
lines changed

dev-packages/browser-integration-tests/suites/integrations/featureFlags/openfeature/basic/test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@ sentryTest('Basic test with eviction, update, and no async tasks', async ({ getL
2222
const url = await getLocalTestUrl({ testDir: __dirname, skipDsnRouteHandler: true });
2323
await page.goto(url);
2424

25-
await page.waitForFunction(bufferSize => {
25+
await page.evaluate(bufferSize => {
2626
const client = (window as any).initialize();
2727
for (let i = 1; i <= bufferSize; i++) {
2828
client.getBooleanValue(`feat${i}`, false);
2929
}
3030
client.getBooleanValue(`feat${bufferSize + 1}`, true); // eviction
3131
client.getBooleanValue('feat3', true); // update
32-
return true;
3332
}, FLAG_BUFFER_SIZE);
3433

3534
const reqPromise = waitForErrorRequest(page);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import * as Sentry from '@sentry/browser';
2+
3+
window.Sentry = Sentry;
4+
window.sentryOpenFeatureIntegration = Sentry.openFeatureIntegration();
5+
6+
Sentry.init({
7+
dsn: 'https://[email protected]/1337',
8+
sampleRate: 1.0,
9+
integrations: [window.sentryOpenFeatureIntegration],
10+
});
11+
12+
window.initialize = () => {
13+
return {
14+
getBooleanValue(flag, value) {
15+
let hook = new Sentry.OpenFeatureIntegrationHook();
16+
hook.error({ flagKey: flag, defaultValue: false }, new Error('flag eval error'));
17+
return value;
18+
},
19+
};
20+
};
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { expect } from '@playwright/test';
2+
3+
import { sentryTest } from '../../../../../utils/fixtures';
4+
5+
import { envelopeRequestParser, shouldSkipFeatureFlagsTest, waitForErrorRequest } from '../../../../../utils/helpers';
6+
7+
const FLAG_BUFFER_SIZE = 100; // Corresponds to constant in featureFlags.ts, in browser utils.
8+
9+
sentryTest('Flag evaluation error hook', async ({ getLocalTestUrl, page }) => {
10+
if (shouldSkipFeatureFlagsTest()) {
11+
sentryTest.skip();
12+
}
13+
14+
await page.route('https://dsn.ingest.sentry.io/**/*', route => {
15+
return route.fulfill({
16+
status: 200,
17+
contentType: 'application/json',
18+
body: JSON.stringify({ id: 'test-id' }),
19+
});
20+
});
21+
22+
const url = await getLocalTestUrl({ testDir: __dirname, skipDsnRouteHandler: true });
23+
await page.goto(url);
24+
25+
await page.evaluate(bufferSize => {
26+
const client = (window as any).initialize();
27+
for (let i = 1; i <= bufferSize; i++) {
28+
client.getBooleanValue(`feat${i}`, false);
29+
}
30+
client.getBooleanValue(`feat${bufferSize + 1}`, true); // eviction
31+
client.getBooleanValue('feat3', true); // update
32+
}, FLAG_BUFFER_SIZE);
33+
34+
const reqPromise = waitForErrorRequest(page);
35+
await page.locator('#error').click();
36+
const req = await reqPromise;
37+
const event = envelopeRequestParser(req);
38+
39+
// Default value is mocked as false -- these will all error and use default
40+
// value
41+
const expectedFlags = [{ flag: 'feat2', result: false }];
42+
for (let i = 4; i <= FLAG_BUFFER_SIZE; i++) {
43+
expectedFlags.push({ flag: `feat${i}`, result: false });
44+
}
45+
expectedFlags.push({ flag: `feat${FLAG_BUFFER_SIZE + 1}`, result: false });
46+
expectedFlags.push({ flag: 'feat3', result: false });
47+
48+
expect(event.contexts?.flags?.values).toEqual(expectedFlags);
49+
});

0 commit comments

Comments
 (0)