Skip to content

Commit 5f11be8

Browse files
committed
Add GrpcFetch and InProcess Unit Tests
Signed-off-by: marcozabel <[email protected]>
1 parent 95b4211 commit 5f11be8

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

libs/providers/flagd/src/lib/service/in-process/grpc/grpc-fetch.spec.ts

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const disconnectCallback = jest.fn();
1818
const removeAllListeners = jest.fn();
1919
const cancel = jest.fn();
2020
const destroy = jest.fn();
21+
const setSyncContext = jest.fn();
2122

2223
let onDataCallback: (data: SyncFlagsResponse) => void = () => ({});
2324
let onErrorCallback: (err: Error) => void = () => ({});
@@ -59,11 +60,12 @@ describe('grpc fetch', () => {
5960

6061
it('should handle data sync and emit callbacks', (done) => {
6162
const flagConfiguration = '{"flags":{}}';
62-
const fetch = new GrpcFetch(cfg, serviceMock);
63+
const fetch = new GrpcFetch(cfg, setSyncContext, serviceMock);
6364
fetch
6465
.connect(dataCallback, reconnectCallback, jest.fn(), disconnectCallback)
6566
.then(() => {
6667
try {
68+
expect(setSyncContext).toHaveBeenCalledTimes(0);
6769
expect(dataCallback).toHaveBeenCalledTimes(1);
6870
expect(dataCallback).toHaveBeenCalledWith(flagConfiguration);
6971
expect(changedCallback).toHaveBeenCalledTimes(0);
@@ -80,14 +82,40 @@ describe('grpc fetch', () => {
8082
onDataCallback({ flagConfiguration });
8183
});
8284

85+
it('should handle SyncContext from SyncFlagsResponse', (done) => {
86+
const initFlagConfig = '{"flags":{}}';
87+
const syncContext = {"test": "example"};
88+
89+
const fetch = new GrpcFetch(cfg, setSyncContext, serviceMock);
90+
fetch
91+
.connect(dataCallback, reconnectCallback, changedCallback, disconnectCallback)
92+
.then(() => {
93+
try {
94+
// Callback assertions
95+
expect(setSyncContext).toHaveBeenCalledTimes(1);
96+
expect(setSyncContext).toHaveBeenCalledWith(syncContext);
97+
98+
done();
99+
} catch (err) {
100+
done(err);
101+
}
102+
})
103+
.catch((err) => {
104+
done(err);
105+
});
106+
107+
// First connection
108+
onDataCallback({ flagConfiguration: initFlagConfig, syncContext: syncContext });
109+
});
110+
83111
it('should handle data sync reconnection', (done) => {
84112
const initFlagConfig = '{"flags":{}}';
85113
const updatedFlagConfig =
86114
'{"flags":{"test":{"state":"ENABLED","variants":{"on":true,"off":false},"defaultVariant":"off"}}}';
87115
const reconnectFlagConfig =
88116
'{"flags":{"test":{"state":"ENABLED","variants":{"on":true,"off":false},"defaultVariant":"on"}}}';
89117

90-
const fetch = new GrpcFetch(cfg, serviceMock);
118+
const fetch = new GrpcFetch(cfg, jest.fn(), serviceMock);
91119
fetch
92120
.connect(dataCallback, reconnectCallback, changedCallback, disconnectCallback)
93121
.then(() => {
@@ -128,7 +156,7 @@ describe('grpc fetch', () => {
128156
});
129157

130158
it('should handle error and watch channel for reconnect', (done) => {
131-
const fetch = new GrpcFetch(cfg, serviceMock);
159+
const fetch = new GrpcFetch(cfg, jest.fn(), serviceMock);
132160
fetch.connect(jest.fn(), jest.fn(), jest.fn(), disconnectCallback).catch((err) => {
133161
try {
134162
expect(err).toBeInstanceOf(Error);

libs/providers/flagd/src/lib/service/in-process/in-process-service.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ describe('In-process-service', () => {
1313

1414
it('should sync and allow to resolve flags', async () => {
1515
// given
16-
const service = new InProcessService({ deadlineMs: 500, host: '', port: 0, tls: false }, dataFetcher);
16+
const service = new InProcessService({ deadlineMs: 500, host: '', port: 0, tls: false }, jest.fn(), dataFetcher);
1717

1818
// when
1919
await service.connect(jest.fn, jest.fn, jest.fn);
@@ -31,7 +31,7 @@ describe('In-process-service', () => {
3131
it('should include scope as flag metadata', async () => {
3232
// given
3333
const selector = 'devFlags';
34-
const service = new InProcessService({ deadlineMs: 500, host: '', port: 0, tls: false, selector }, dataFetcher);
34+
const service = new InProcessService({ deadlineMs: 500, host: '', port: 0, tls: false, selector }, jest.fn(), dataFetcher);
3535

3636
// when
3737
await service.connect(jest.fn, jest.fn, jest.fn);
@@ -44,7 +44,7 @@ describe('In-process-service', () => {
4444
it('should not override existing scope in flag metadata', async () => {
4545
// given
4646
const selector = 'devFlags';
47-
const service = new InProcessService({ deadlineMs: 500, host: '', port: 0, tls: false, selector }, dataFetcher);
47+
const service = new InProcessService({ deadlineMs: 500, host: '', port: 0, tls: false, selector }, jest.fn(), dataFetcher);
4848

4949
// when
5050
await service.connect(jest.fn, jest.fn, jest.fn);

0 commit comments

Comments
 (0)