Skip to content

Commit 44f95c4

Browse files
committed
feat: removing build dependencies and using testcontainers for container spin up
Signed-off-by: Simon Schrottner <[email protected]>
1 parent 58f61fe commit 44f95c4

File tree

12 files changed

+3136
-26
lines changed

12 files changed

+3136
-26
lines changed

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@buf:registry=https://buf.build/gen/npm/v1/

libs/providers/flagd-web/jest.config.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
export default {
33
displayName: 'providers-flagd-web',
44
preset: '../../../jest.preset.js',
5-
globals: {
6-
'ts-jest': {
7-
tsconfig: '<rootDir>/tsconfig.spec.json',
8-
},
9-
},
5+
moduleDirectories: ["node_modules", "src"],
106
transform: {
11-
'^.+\\.[tj]s$': 'ts-jest',
7+
'^.+\\.[tj]s$': ['ts-jest', {
8+
tsconfig: '<rootDir>/tsconfig.spec.json'
9+
}]
1210
},
11+
transformIgnorePatterns: [
12+
'node_modules/(?!@buf/.*)'
13+
],
1314
testEnvironment: 'jsdom',
1415
moduleFileExtensions: ['ts', 'js', 'html'],
1516
// ignore e2e path

libs/providers/flagd-web/package-lock.json

Lines changed: 2345 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

libs/providers/flagd-web/package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,12 @@
77
},
88
"peerDependencies": {
99
"@openfeature/web-sdk": "^1.0.0"
10+
},
11+
"dependencies": {
12+
"@buf/open-feature_flagd.bufbuild_es": "^1.10.0-20240215170432-1e611e2999cc.1",
13+
"@buf/open-feature_flagd.connectrpc_es": "^1.4.0-20240215170432-1e611e2999cc.3"
14+
},
15+
"devDependencies": {
16+
"testcontainers": "^10.10.0"
1017
}
1118
}

libs/providers/flagd-web/project.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@
2020
"executor": "nx:run-commands",
2121
"options": {
2222
"commands": [
23-
"git submodule update --init schemas",
24-
"rm -f -r ./src/proto",
25-
"cd schemas && buf generate buf.build/open-feature/flagd --template protobuf/buf.gen.ts-connect.yaml",
26-
"mv -v ./proto ./src"
23+
"git submodule update --init schemas"
2724
],
2825
"cwd": "libs/providers/flagd-web",
2926
"parallel": false
@@ -76,7 +73,7 @@
7673
"executor": "nx:run-commands",
7774
"options": {
7875
"commands": [
79-
"npx jest"
76+
"npx jest --forceExit"
8077
],
8178
"cwd": "libs/providers/flagd-web/src/e2e",
8279
"parallel": false

libs/providers/flagd-web/src/e2e/jest.config.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
export default {
22
displayName: 'providers-flagd-web-e2e',
3+
moduleDirectories: ["node_modules", "src"],
34
transform: {
4-
'^.+\\.[tj]s$': ['ts-jest', { tsConfig: './tsconfig.lib.json' }],
5+
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: './tsconfig.lib.json' }],
56
},
67
moduleNameMapper: {
78
'^(.*)\\.js$': ['$1.js', '$1.ts', '$1'],
89
},
10+
transformIgnorePatterns: [
11+
'node_modules/(?!@buf/.*)'
12+
],
913
testEnvironment: 'node',
1014
preset: 'ts-jest',
1115
clearMocks: true,

libs/providers/flagd-web/src/e2e/setup.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import assert from 'assert';
22
import { FlagdWebProvider } from '../lib/flagd-web-provider';
33
import { OpenFeature } from '@openfeature/web-sdk';
44

5-
const FLAGD_WEB_NAME = 'flagd-web';
5+
export const FLAGD_WEB_NAME = 'flagd-web';
6+
/*
67
78
// register the flagd provider before the tests.
89
console.log('Setting flagd web provider...');
@@ -11,11 +12,11 @@ OpenFeature.setProvider(
1112
host: 'localhost',
1213
port: 8013,
1314
tls: false,
14-
maxRetries: -1,
1515
}),
1616
);
1717
assert(
1818
OpenFeature.providerMetadata.name === FLAGD_WEB_NAME,
1919
new Error(`Expected ${FLAGD_WEB_NAME} provider to be configured, instead got: ${OpenFeature.providerMetadata.name}`),
2020
);
2121
console.log('flagd web provider configured!');
22+
*/

libs/providers/flagd-web/src/e2e/step-definitions/evaluation.spec.ts

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,19 @@ import {
66
OpenFeature,
77
ProviderEvents,
88
ResolutionDetails,
9-
StandardResolutionReasons,
9+
StandardResolutionReasons
1010
} from '@openfeature/web-sdk';
1111
import { defineFeature, loadFeature } from 'jest-cucumber';
12+
import {
13+
ContainerRuntimeClient,
14+
GenericContainer,
15+
getContainerRuntimeClient,
16+
StartedTestContainer,
17+
TestContainer
18+
} from 'testcontainers';
19+
import { FlagdWebProvider } from '../../lib/flagd-web-provider';
20+
import assert from 'assert';
21+
import { FLAGD_WEB_NAME } from '../setup';
1222

1323
// load the feature file.
1424
const feature = loadFeature('features/evaluation.feature');
@@ -17,19 +27,43 @@ const feature = loadFeature('features/evaluation.feature');
1727
const client = OpenFeature.getClient();
1828

1929
const givenAnOpenfeatureClientIsRegistered = (
20-
given: (stepMatcher: string, stepDefinitionCallback: () => void) => void,
30+
given: (stepMatcher: string, stepDefinitionCallback: () => void) => void
2131
) => {
2232
given('a provider is registered', () => undefined);
2333
};
2434

2535
defineFeature(feature, (test) => {
36+
const container: TestContainer = new GenericContainer('ghcr.io/open-feature/flagd-testbed:v0.5.4');
37+
let startedContainer: StartedTestContainer;
2638
beforeAll((done) => {
2739
client.addHandler(ProviderEvents.Ready, async () => {
2840
done();
2941
});
30-
});
42+
43+
container
44+
.withExposedPorts(8013)
45+
.start()
46+
.then(c => {
47+
startedContainer = c
48+
49+
console.log('Setting flagd web provider...');
50+
OpenFeature.setProvider(
51+
new FlagdWebProvider({
52+
host: startedContainer.getHost(),
53+
port: startedContainer.getMappedPort(8013),
54+
tls: false,
55+
}),
56+
);
57+
assert(
58+
OpenFeature.providerMetadata.name === FLAGD_WEB_NAME,
59+
new Error(`Expected ${FLAGD_WEB_NAME} provider to be configured, instead got: ${OpenFeature.providerMetadata.name}`),
60+
);
61+
console.log('flagd web provider configured!');
62+
});
63+
}, 60000);
3164

3265
afterAll(async () => {
66+
await startedContainer.stop();
3367
await OpenFeature.close();
3468
});
3569

@@ -294,7 +328,7 @@ defineFeature(feature, (test) => {
294328
flagKey = key;
295329
fallbackValue = defaultValue;
296330
details = client.getStringDetails(flagKey, defaultValue);
297-
},
331+
}
298332
);
299333

300334
then(/^the default string value should be returned$/, () => {
@@ -306,7 +340,7 @@ defineFeature(feature, (test) => {
306340
(errorCode: string) => {
307341
expect(details.reason).toEqual(StandardResolutionReasons.ERROR);
308342
expect(details.errorCode).toEqual(errorCode);
309-
},
343+
}
310344
);
311345
});
312346

@@ -323,7 +357,7 @@ defineFeature(feature, (test) => {
323357
flagKey = key;
324358
fallbackValue = Number.parseInt(defaultValue);
325359
details = client.getNumberDetails(flagKey, Number.parseInt(defaultValue));
326-
},
360+
}
327361
);
328362

329363
then(/^the default integer value should be returned$/, () => {
@@ -335,7 +369,7 @@ defineFeature(feature, (test) => {
335369
(errorCode: string) => {
336370
expect(details.reason).toEqual(StandardResolutionReasons.ERROR);
337371
expect(details.errorCode).toEqual(errorCode);
338-
},
372+
}
339373
);
340374
});
341375
});

libs/providers/flagd-web/src/lib/flagd-web-provider.spec.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,14 @@ import {
1010
StandardResolutionReasons,
1111
} from '@openfeature/web-sdk';
1212
import fetchMock from 'jest-fetch-mock';
13-
import { Service } from '../proto/ts/flagd/evaluation/v1/evaluation_connect';
14-
import { AnyFlag, EventStreamResponse, ResolveAllResponse } from '../proto/ts/flagd/evaluation/v1/evaluation_pb';
1513
import { FlagdWebProvider } from './flagd-web-provider';
14+
import {
15+
EventStreamResponse,
16+
ResolveAllResponse
17+
} from '@buf/open-feature_flagd.bufbuild_es/flagd/evaluation/v1/evaluation_pb';
18+
import { Service } from '@buf/open-feature_flagd.connectrpc_es/schema/v1/schema_connect';
19+
import { AnyFlag } from '@buf/open-feature_flagd.bufbuild_es/schema/v1/schema_pb';
20+
1621

1722
const EVENT_CONFIGURATION_CHANGE = 'configuration_change';
1823
const EVENT_PROVIDER_READY = 'provider_ready';

libs/providers/flagd-web/src/lib/flagd-web-provider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import {
1616
StandardResolutionReasons,
1717
TypeMismatchError,
1818
} from '@openfeature/web-sdk';
19-
import { Service } from '../proto/ts/flagd/evaluation/v1/evaluation_connect';
20-
import { AnyFlag } from '../proto/ts/flagd/evaluation/v1/evaluation_pb';
2119
import { FlagdProviderOptions, getOptions } from './options';
20+
import { AnyFlag } from '@buf/open-feature_flagd.bufbuild_es/schema/v1/schema_pb';
21+
import { Service } from '@buf/open-feature_flagd.connectrpc_es/schema/v1/schema_connect';
2222

2323
export const ERROR_DISABLED = 'DISABLED';
2424

0 commit comments

Comments
 (0)