fix: return metadata for the bound provider in hookContext (#883)
Clients were incorrectly populating the hook context provider metadata field with metadata from the default provider instead of the one bound to the client. Signed-off-by: Federico Bond <federicobond@gmail.com>
This commit is contained in:
parent
fc4867799d
commit
fd84025bdf
|
|
@ -201,7 +201,7 @@ export class OpenFeatureClient implements Client {
|
||||||
defaultValue,
|
defaultValue,
|
||||||
flagValueType: flagType,
|
flagValueType: flagType,
|
||||||
clientMetadata: this.metadata,
|
clientMetadata: this.metadata,
|
||||||
providerMetadata: OpenFeature.providerMetadata,
|
providerMetadata: this._provider.metadata,
|
||||||
context,
|
context,
|
||||||
logger: this._logger,
|
logger: this._logger,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,39 @@ describe('Hooks', () => {
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
it('client metadata and provider metadata must match the client and provider used to resolve the flag', (done) => {
|
||||||
|
const provider: Provider = {
|
||||||
|
metadata: {
|
||||||
|
name: 'mock-my-domain-provider',
|
||||||
|
},
|
||||||
|
resolveBooleanEvaluation: jest.fn((): Promise<ResolutionDetails<boolean>> => {
|
||||||
|
return Promise.resolve({
|
||||||
|
value: BOOLEAN_VALUE,
|
||||||
|
variant: BOOLEAN_VARIANT,
|
||||||
|
reason: REASON,
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
} as unknown as Provider;
|
||||||
|
|
||||||
|
OpenFeature.setProvider('my-domain', provider);
|
||||||
|
const client = OpenFeature.getClient('my-domain');
|
||||||
|
|
||||||
|
client.getBooleanValue(FLAG_KEY, false, {
|
||||||
|
hooks: [
|
||||||
|
{
|
||||||
|
before: (hookContext) => {
|
||||||
|
try {
|
||||||
|
expect(hookContext.providerMetadata).toEqual(provider.metadata);
|
||||||
|
expect(hookContext.clientMetadata).toEqual(client.metadata);
|
||||||
|
done();
|
||||||
|
} catch (err) {
|
||||||
|
done(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Requirement 4.1.3', () => {
|
describe('Requirement 4.1.3', () => {
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,7 @@ export class OpenFeatureClient implements Client, ManageContext<OpenFeatureClien
|
||||||
defaultValue,
|
defaultValue,
|
||||||
flagValueType: flagType,
|
flagValueType: flagType,
|
||||||
clientMetadata: this.metadata,
|
clientMetadata: this.metadata,
|
||||||
providerMetadata: OpenFeature.providerMetadata,
|
providerMetadata: this._provider.metadata,
|
||||||
context: mergedContext,
|
context: mergedContext,
|
||||||
logger: this._logger,
|
logger: this._logger,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,39 @@ describe('Hooks', () => {
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
it('client metadata and provider metadata must match the client and provider used to resolve the flag', (done) => {
|
||||||
|
const provider: Provider = {
|
||||||
|
metadata: {
|
||||||
|
name: 'mock-my-domain-provider',
|
||||||
|
},
|
||||||
|
resolveBooleanEvaluation: jest.fn((): Promise<ResolutionDetails<boolean>> => {
|
||||||
|
return Promise.resolve({
|
||||||
|
value: BOOLEAN_VALUE,
|
||||||
|
variant: BOOLEAN_VARIANT,
|
||||||
|
reason: REASON,
|
||||||
|
});
|
||||||
|
}),
|
||||||
|
} as unknown as Provider;
|
||||||
|
|
||||||
|
OpenFeature.setProvider('my-domain', provider);
|
||||||
|
const client = OpenFeature.getClient('my-domain');
|
||||||
|
|
||||||
|
client.getBooleanValue(FLAG_KEY, false, undefined, {
|
||||||
|
hooks: [
|
||||||
|
{
|
||||||
|
before: (hookContext) => {
|
||||||
|
try {
|
||||||
|
expect(hookContext.providerMetadata).toEqual(provider.metadata);
|
||||||
|
expect(hookContext.clientMetadata).toEqual(client.metadata);
|
||||||
|
done();
|
||||||
|
} catch (err) {
|
||||||
|
done(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Requirement 4.1.3', () => {
|
describe('Requirement 4.1.3', () => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue