Skip to content

Commit 12eb78f

Browse files
Evaluation tests
1 parent 9241e6d commit 12eb78f

5 files changed

Lines changed: 63 additions & 19 deletions

File tree

src/__tests__/browserSuites/evaluations.spec.js

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,37 @@ export default function (config, fetchMock, assert) {
362362

363363
};
364364

365+
const evaluationsWithRuleBasedSegments = async (splitio) => {
366+
fetchMock.getOnce('https://sdk.split.io/api/memberships/emi%40split.io', { status: 200, body: { ms: { k: [{ n: 'segment_excluded_by_rbs' }] } } });
367+
fetchMock.getOnce('https://sdk.split.io/api/memberships/mauro%40split.io', { status: 200, body: { ms: {} } });
368+
fetchMock.getOnce('https://sdk.split.io/api/memberships/bilal%40split.io', { status: 200, body: { ms: {} } });
369+
fetchMock.getOnce('https://sdk.split.io/api/memberships/other_key', { status: 200, body: { ms: {} } });
370+
371+
const client1 = splitio.client('emi@split.io');
372+
await client1.ready();
373+
assert.equal(client1.getTreatment('rbs_test_flag'), 'v2', 'key in excluded segment');
374+
assert.equal(client1.getTreatment('rbs_test_flag_negated'), 'v1', 'key in excluded segment');
375+
await client1.destroy();
376+
377+
const client2 = splitio.client('mauro@split.io');
378+
await client2.ready();
379+
assert.equal(client2.getTreatment('rbs_test_flag'), 'v2', 'excluded key');
380+
assert.equal(client2.getTreatment('rbs_test_flag_negated'), 'v1', 'excluded key');
381+
await client2.destroy();
382+
383+
const client3 = splitio.client('bilal@split.io');
384+
await client3.ready();
385+
assert.equal(client3.getTreatment('rbs_test_flag'), 'v1', 'key satisfies the rbs condition');
386+
assert.equal(client3.getTreatment('rbs_test_flag_negated'), 'v2', 'key satisfies the rbs condition');
387+
await client3.destroy();
388+
389+
const client4 = splitio.client('other_key');
390+
await client4.ready();
391+
assert.equal(client4.getTreatment('rbs_test_flag'), 'v2', 'key not in segment');
392+
assert.equal(client4.getTreatment('rbs_test_flag_negated'), 'v1', 'key not in segment');
393+
await client4.destroy();
394+
};
395+
365396
for (i; i < SDK_INSTANCES_TO_TEST; i++) {
366397
let splitio = SplitFactory(config);
367398

@@ -376,13 +407,16 @@ export default function (config, fetchMock, assert) {
376407
getTreatmentsTests(client);
377408
getTreatmentsWithConfigTests(client);
378409
getTreatmentsWithInMemoryAttributes(client);
379-
clientTABucket1.destroy();
380-
client.destroy();
381-
tested++;
382410

383-
if (tested === SDK_INSTANCES_TO_TEST) {
384-
assert.end();
385-
}
411+
evaluationsWithRuleBasedSegments(splitio).then(() => {
412+
clientTABucket1.destroy();
413+
client.destroy();
414+
tested++;
415+
416+
if (tested === SDK_INSTANCES_TO_TEST) {
417+
assert.end();
418+
}
419+
});
386420
});
387421
}
388422
}

src/__tests__/mocks/splitchanges.since.-1.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"trafficTypeName": "user",
1111
"excluded": {
1212
"keys": [ "mauro@split.io", "gaston@split.io" ],
13-
"segments": [ "segment_test" ]
13+
"segments": [ "segment_excluded_by_rbs" ]
1414
},
1515
"conditions": [
1616
{

src/__tests__/nodeSuites/evaluations.spec.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,17 @@ export default async function (config, key, assert) {
164164
assert.equal(client.getTreatment('aaaaaaklmnbv', 'ta_bucket1_test'), 'rollout_treatment');
165165
// With a higher bucket it's ok to get default treatment
166166
assert.equal(client.getTreatment('nico_test', 'ta_bucket1_test'), 'default_treatment');
167+
168+
// Rule-based segments
169+
assert.equal(client.getTreatment('emi@split.io', 'rbs_test_flag'), 'v2', 'key in excluded segment');
170+
assert.equal(client.getTreatment('mauro@split.io', 'rbs_test_flag'), 'v2', 'excluded key');
171+
assert.equal(client.getTreatment('bilal@split.io', 'rbs_test_flag'), 'v1', 'key satisfies the rbs condition');
172+
assert.equal(client.getTreatment('other_key', 'rbs_test_flag'), 'v2', 'key not in segment');
173+
174+
assert.equal(client.getTreatment('emi@split.io', 'rbs_test_flag_negated'), 'v1', 'key in excluded segment');
175+
assert.equal(client.getTreatment('mauro@split.io', 'rbs_test_flag_negated'), 'v1', 'excluded key');
176+
assert.equal(client.getTreatment('bilal@split.io', 'rbs_test_flag_negated'), 'v2', 'key satisfies the rbs condition');
177+
assert.equal(client.getTreatment('other_key', 'rbs_test_flag_negated'), 'v1', 'key not in segment');
167178
};
168179

169180
const getTreatmentsTests = (client, sdkInstance) => {

src/__tests__/nodeSuites/telemetry.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default async function telemetryNodejsSuite(key, fetchMock, assert) {
5555
// Validate http and method latencies
5656
const getLatencyCount = buckets => buckets ? buckets.reduce((accum, entry) => accum + entry, 0) : 0;
5757
assert.equal(getLatencyCount(data.hL.sp), 2, 'Two latency metrics for splitChanges GET request');
58-
assert.equal(getLatencyCount(data.hL.se), 6, 'Six latency metrics for segmentChanges GET request');
58+
assert.equal(getLatencyCount(data.hL.se), 8, 'Six latency metrics for segmentChanges GET request');
5959
assert.equal(getLatencyCount(data.hL.te), 1, 'One latency metric for telemetry config POST request');
6060
assert.equal(getLatencyCount(data.mL.t), 2, 'Two latency metrics for getTreatment (one not ready usage');
6161
assert.equal(getLatencyCount(data.mL.ts), 1, 'One latency metric for getTreatments');
@@ -66,7 +66,7 @@ export default async function telemetryNodejsSuite(key, fetchMock, assert) {
6666

6767
// @TODO check if iDe value is correct
6868
assert.deepEqual(data, {
69-
mE: {}, hE: { sp: { 500: 1 } }, tR: 0, aR: 0, iQ: 4, iDe: 1, iDr: 0, spC: 35, seC: 3, skC: 3, eQ: 1, eD: 0, sE: [], t: [], ufs: {}
69+
mE: {}, hE: { sp: { 500: 1 } }, tR: 0, aR: 0, iQ: 4, iDe: 1, iDr: 0, spC: 35, seC: 4, skC: 4, eQ: 1, eD: 0, sE: [], t: [], ufs: {}
7070
}, 'metrics/usage JSON payload should be the expected');
7171

7272
finish.next();
@@ -85,7 +85,7 @@ export default async function telemetryNodejsSuite(key, fetchMock, assert) {
8585
// @TODO check if iDe value is correct
8686
assert.deepEqual(data, {
8787
mL: {}, mE: {}, hE: {}, hL: {}, // errors and latencies were popped
88-
tR: 0, aR: 0, iQ: 4, iDe: 1, iDr: 0, spC: 35, seC: 3, skC: 3, eQ: 1, eD: 0, sE: [], t: [], ufs: {}
88+
tR: 0, aR: 0, iQ: 4, iDe: 1, iDr: 0, spC: 35, seC: 4, skC: 4, eQ: 1, eD: 0, sE: [], t: [], ufs: {}
8989
}, '2nd metrics/usage JSON payload should be the expected');
9090
return 200;
9191
});

src/__tests__/online/node.spec.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,14 @@ const key = 'facundo@split.io';
4141

4242
fetchMock.get(url(settings, '/splitChanges?s=1.3&since=-1&rbSince=-1'), { status: 200, body: splitChangesMock1 });
4343
fetchMock.get(url(settings, '/splitChanges?s=1.3&since=1457552620999&rbSince=100'), { status: 200, body: splitChangesMock2 });
44-
fetchMock.get(new RegExp(`${url(settings, '/segmentChanges')}/*`), {
45-
status: 200, body: {
46-
'name': 'segment',
47-
'added': [],
48-
'removed': [],
49-
'since': 1,
50-
'till': 1
51-
}
52-
});
44+
45+
const emptySegmentResponse = { added: [], removed: [], since: 1, till: 1 };
46+
fetchMock.get(new RegExp(`${url(settings, '/segmentChanges/employees')}*`), { status: 200, body: emptySegmentResponse });
47+
fetchMock.get(new RegExp(`${url(settings, '/segmentChanges/splitters')}*`), { status: 200, body: emptySegmentResponse });
48+
fetchMock.get(new RegExp(`${url(settings, '/segmentChanges/developers')}*`), { status: 200, body: emptySegmentResponse });
49+
fetchMock.get(url(settings, '/segmentChanges/segment_excluded_by_rbs?since=-1'), { status: 200, body: { added: ['emi@split.io'], removed: [], since: -1, till: 1 } });
50+
fetchMock.get(url(settings, '/segmentChanges/segment_excluded_by_rbs?since=1'), { status: 200, body: { added: [], removed: [], since: 1, till: 1 } });
51+
5352
fetchMock.post(url(settings, '/testImpressions/bulk'), 200);
5453
fetchMock.post(url(settings, '/testImpressions/count'), 200);
5554
fetchMock.post(url(settings, '/v1/metrics/config'), 200);

0 commit comments

Comments
 (0)