Skip to content
This repository has been archived by the owner on May 30, 2024. It is now read-only.

Commit

Permalink
use varargs semantics for TestFlagBuilder.variations() and add it to …
Browse files Browse the repository at this point in the history
…the TS interface (#230)
  • Loading branch information
eli-darkly authored Dec 9, 2021
1 parent 9ef8b01 commit a8b19f3
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 11 deletions.
12 changes: 12 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1425,6 +1425,18 @@ declare module 'launchdarkly-node-server-sdk/integrations' {
*/
booleanFlag(): TestDataFlagBuilder;

/**
* Sets the allowable variation values for the flag.
*
* The values may be of any JSON-compatible type: boolean, number, string, array,
* or object. For instance, a boolean flag normally has `variations(true, false)`;
* a string-valued flag might have `variations("red", "green")`; etc.
*
* @param values any number of variation values
* @return the flag builder
*/
variations(...values: any[]): TestDataFlagBuilder;

/**
* Sets targeting to be on or off for this flag.
*
Expand Down
15 changes: 11 additions & 4 deletions test/test_data-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ describe('TestData', function() {
const res = await promisifySingle(store.all)(dataKind.features);
expect(res).toEqual({});

await promisifySingle(td.update)(td.flag('new-flag').variationForAllUsers(true));
await td.update(td.flag('new-flag').variationForAllUsers(true));

const postUpdateRes = await promisifySingle(store.all)(dataKind.features);
expect(postUpdateRes).toEqual({
Expand All @@ -66,7 +66,7 @@ describe('TestData', function() {
expect(res).toEqual({});

tds.stop();
await promisifySingle(td.update)(td.flag('new-flag').variationForAllUsers(true));
await td.update(td.flag('new-flag').variationForAllUsers(true));

const postUpdateRes = await promisifySingle(store.all)(dataKind.features);
expect(postUpdateRes).toEqual({});
Expand All @@ -78,7 +78,7 @@ describe('TestData', function() {
const tds = td({featureStore: store});
await promisifySingle(tds.start)();

await promisifySingle(td.update)(td.flag('new-flag').variationForAllUsers(true));
await td.update(td.flag('new-flag').variationForAllUsers(true));
const res = await promisifySingle(store.all)(dataKind.features);
expect(res).toEqual({
'new-flag': {
Expand All @@ -93,7 +93,7 @@ describe('TestData', function() {
}
});

await promisifySingle(td.update)(td.flag('new-flag').variationForAllUsers(false));
await td.update(td.flag('new-flag').variationForAllUsers(false));
const res2 = await promisifySingle(store.all)(dataKind.features);
expect(res2).toEqual({
'new-flag': {
Expand Down Expand Up @@ -131,6 +131,13 @@ describe('TestData', function() {
expect(flag2.isBooleanFlag()).toBe(false)
});

it('FlagBuilder can set variations', function() {
const td = TestData();
const flag = td.flag('test-flag');
flag.variations('a', 'b');
expect(flag.build(0).variations).toEqual([ 'a', 'b' ]);
});

it('can handle boolean values for *Variation setters', function() {
const td = TestData();
const flag = td.flag('test-flag').fallthroughVariation(false);
Expand Down
12 changes: 5 additions & 7 deletions test_data.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ function TestData() {
}
};

td.update = (flagBuilder, cb) => {
td.update = flagBuilder => {
const oldItem = currentFlags[flagBuilder._key];
const oldVersion = oldItem ? oldItem.version : 0;
const newFlag = flagBuilder.build(oldVersion + 1);
currentFlags[flagBuilder._key] = newFlag;
existingFlagBuilders[flagBuilder._key] = flagBuilder.copy();

Promise.all(dataSourceImpls.map(impl => promisify(impl.upsert)(newFlag))).then(cb);
return Promise.all(dataSourceImpls.map(impl => promisify(impl.upsert)(newFlag)));
};

return td;
Expand Down Expand Up @@ -95,9 +95,7 @@ TestDataFlagBuilder.prototype.booleanFlag = function () {
if (this.isBooleanFlag()) {
return this;
} else {
return this.variations([true, false])
.fallthroughVariation(TRUE_VARIATION_INDEX)
.offVariation(FALSE_VARIATION_INDEX);
return this.variations(true, false).fallthroughVariation(TRUE_VARIATION_INDEX).offVariation(FALSE_VARIATION_INDEX);
}
};

Expand All @@ -124,7 +122,7 @@ TestDataFlagBuilder.prototype.offVariation = function (variation) {
return this;
};

TestDataFlagBuilder.prototype.variations = function (values) {
TestDataFlagBuilder.prototype.variations = function (...values) {
this._variations = [...values];
return this;
};
Expand All @@ -144,7 +142,7 @@ TestDataFlagBuilder.prototype.variationForAllUsers = function (variation) {
};

TestDataFlagBuilder.prototype.valueForAllUsers = function (value) {
return this.variations([value]).variationForAllUsers(0);
return this.variations(value).variationForAllUsers(0);
};

TestDataFlagBuilder.prototype.variationForUser = function (userKey, variation) {
Expand Down

0 comments on commit a8b19f3

Please sign in to comment.