Skip to content

[Rule-based segments] Update tests #862

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 39 commits into from
Apr 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
42cf24d
Update tests to validate expirationDays config
EmilianoSanchez Dec 19, 2024
2dd7820
Add test to validate clearOnInit config
EmilianoSanchez Dec 19, 2024
d97a03f
Prepare rc and update changelog entry
EmilianoSanchez Dec 19, 2024
7c4fc2d
Polishing
EmilianoSanchez Dec 20, 2024
0ab2752
Updated SDK_READY_FROM_CACHE event when using the `LOCALSTORAGE` stor…
EmilianoSanchez Jan 2, 2025
957cbdc
rc
EmilianoSanchez Jan 3, 2025
e6f768f
Merge branch 'master' into cache_expiration
EmilianoSanchez Jan 13, 2025
5cd064a
Merge branch 'cache_expiration' into SDKS-9171_sdk_ready_from_cache
EmilianoSanchez Jan 13, 2025
2bb8006
Merge branch 'SDKS-9171_sdk_ready_from_cache' into release_v11.1.0
EmilianoSanchez Jan 13, 2025
b463726
Fix tests
EmilianoSanchez Jan 13, 2025
aafd396
rc
EmilianoSanchez Jan 13, 2025
833ba1d
Fix test
EmilianoSanchez Jan 13, 2025
75df407
rollback ci-cd
EmilianoSanchez Jan 13, 2025
d072826
Merge branch 'master' into cache_expiration
EmilianoSanchez Jan 17, 2025
e19bb21
Merge branch 'cache_expiration' into SDKS-9171_sdk_ready_from_cache
EmilianoSanchez Jan 17, 2025
7f04526
Merge pull request #854 from splitio/SDKS-9171_sdk_ready_from_cache
EmilianoSanchez Jan 17, 2025
70a1bac
Update tests and mocks
EmilianoSanchez Mar 11, 2025
aecbd2c
Update dep
EmilianoSanchez Mar 20, 2025
afb1ae8
Rename some variables in test suite for readability
EmilianoSanchez Mar 26, 2025
5e2559c
Merge branch 'development' into misc
EmilianoSanchez Mar 26, 2025
768a2ea
Merge pull request #864 from splitio/misc
EmilianoSanchez Mar 26, 2025
303a7ec
E2E tests for standalone mode
EmilianoSanchez Mar 27, 2025
158aafa
E2E tests for consumer mode
EmilianoSanchez Mar 27, 2025
aa0f7ca
rc
EmilianoSanchez Mar 27, 2025
4c6821b
upload CDN rc
EmilianoSanchez Mar 27, 2025
8d08048
Revert "upload CDN rc"
EmilianoSanchez Mar 28, 2025
8c215fc
Merge pull request #865 from splitio/impression_properties
EmilianoSanchez Mar 28, 2025
e113b7e
Merge branch 'development' into cache_expiration
EmilianoSanchez Mar 28, 2025
8eb73ab
rc
EmilianoSanchez Mar 28, 2025
8ea9d82
rc
EmilianoSanchez Mar 28, 2025
4466a55
stable version
EmilianoSanchez Mar 28, 2025
01eca47
Merge pull request #852 from splitio/cache_expiration
EmilianoSanchez Mar 28, 2025
21760e9
Bump tar-fs from 2.1.1 to 2.1.2
dependabot[bot] Mar 28, 2025
7219d06
Merge pull request #867 from splitio/dependabot/npm_and_yarn/tar-fs-2…
EmilianoSanchez Mar 31, 2025
565e0a5
Misc
EmilianoSanchez Apr 3, 2025
844c904
Merge pull request #868 from splitio/misc
EmilianoSanchez Apr 3, 2025
22d56cf
Merge branch 'rb_segments_baseline' into rb_segments_test_updates
EmilianoSanchez Apr 3, 2025
a0a95c4
Merge branch 'rb_segments_baseline' into rb_segments_test_updates
EmilianoSanchez Apr 3, 2025
33e5ea9
Update JS-commons
EmilianoSanchez Apr 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ jobs:

upload-stage:
name: Upload assets
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
needs: build
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/development' }}
strategy:
Expand Down Expand Up @@ -105,7 +105,7 @@ jobs:

upload-prod:
name: Upload assets
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
needs: build
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
strategy:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sonar-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
fetch-depth: 0

- name: Set up Node.js
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'npm'
Expand Down
8 changes: 8 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
11.2.0 (March 28, 2025)
- Added a new optional argument to the client `getTreatment` methods to allow passing additional evaluation options, such as a map of properties to append to the generated impressions sent to Split backend. Read more in our docs.
- Added two new configuration options for the SDK's `LOCALSTORAGE` storage type to control the behavior of the persisted rollout plan cache in the browser:
- `storage.expirationDays` to specify the validity period of the rollout plan cache in days.
- `storage.clearOnInit` to clear the rollout plan cache on SDK initialization.
- Updated SDK_READY_FROM_CACHE event when using the `LOCALSTORAGE` storage type to be emitted alongside the SDK_READY event if it has not already been emitted.
- Updated @splitsoftware/splitio-commons package to version 2.2.0.

11.1.0 (January 17, 2025)
- Added support for the new impressions tracking toggle available on feature flags, both respecting the setting and including the new field being returned on `SplitView` type objects. Read more in our docs.
- Updated @splitsoftware/splitio-commons package to version 2.1.0.
Expand Down
32 changes: 17 additions & 15 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@splitsoftware/splitio",
"version": "11.1.0",
"version": "11.2.0",
"description": "Split SDK",
"files": [
"README.md",
Expand Down Expand Up @@ -38,7 +38,7 @@
"node": ">=14.0.0"
},
"dependencies": {
"@splitsoftware/splitio-commons": "2.1.0",
"@splitsoftware/splitio-commons": "2.2.1-rc.1",
"bloom-filters": "^3.0.4",
"ioredis": "^4.28.0",
"js-yaml": "^3.13.1",
Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/browserSuites/evaluations-semver.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ const config = {

export default async function (fetchMock, assert) {

fetchMock.getOnce(config.urls.sdk + '/splitChanges?s=1.2&since=-1', { status: 200, body: splitChangesMock1 });
fetchMock.getOnce(config.urls.sdk + '/splitChanges?s=1.2&since=1675259356568', { status: 200, body: { splits: [], since: 1675259356568, till: 1675259356568 } });
fetchMock.getOnce(config.urls.sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1', { status: 200, body: splitChangesMock1 });
fetchMock.getOnce(config.urls.sdk + '/splitChanges?s=1.3&since=1675259356568&rbSince=-1', { status: 200, body: { ff: { d: [], s: 1675259356568, t: 1675259356568 } } });
fetchMock.getOnce(config.urls.sdk + '/memberships/emi%40split.io', { status: 200, body: { ms: {} } });
fetchMock.getOnce(config.urls.sdk + '/memberships/2nd', { status: 200, body: { ms: {} } });

Expand Down
12 changes: 6 additions & 6 deletions src/__tests__/browserSuites/fetch-specific-splits.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ export function fetchSpecificSplits(fetchMock, assert) {
const queryString = queryStrings[i] || '';
let factory;

fetchMock.getOnce(urls.sdk + '/splitChanges?s=1.2&since=-1' + queryString, { status: 200, body: { splits: [], since: -1, till: 1457552620999 } });
fetchMock.getOnce(urls.sdk + '/splitChanges?s=1.2&since=1457552620999' + queryString, { status: 200, body: { splits: [], since: 1457552620999, till: 1457552620999 } });
fetchMock.getOnce(urls.sdk + '/splitChanges?s=1.2&since=1457552620999' + queryString, function () {
fetchMock.getOnce(urls.sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1' + queryString, { status: 200, body: { ff: { d: [], s: -1, t: 1457552620999 } } });
fetchMock.getOnce(urls.sdk + '/splitChanges?s=1.3&since=1457552620999&rbSince=-1' + queryString, { status: 200, body: { ff: { d: [], s: 1457552620999, t: 1457552620999 } } });
fetchMock.getOnce(urls.sdk + '/splitChanges?s=1.3&since=1457552620999&rbSince=-1' + queryString, function () {
factory.client().destroy().then(() => {
assert.pass(`splitFilters #${i}`);
});
return { status: 200, body: { splits: [], since: 1457552620999, till: 1457552620999 } };
return { status: 200, body: { ff: { d: [], s: 1457552620999, t: 1457552620999 } } };
});
fetchMock.get(urls.sdk + '/memberships/nicolas%40split.io', { status: 200, body: { 'ms': {} } });

Expand Down Expand Up @@ -70,8 +70,8 @@ export function fetchSpecificSplitsForFlagSets(fetchMock, assert) {
const queryString = '&sets=4_valid,set_2,set_3,set_ww,set_x';
fetchMock.get(baseUrls.sdk + '/memberships/nicolas%40split.io', { status: 200, body: { 'ms': {} } });

fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=-1' + queryString, { status: 200, body: { splits: [], since: 1457552620999, till: 1457552620999 }});
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1457552620999' + queryString, async function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1' + queryString, { status: 200, body: { ff: { d: [], s: 1457552620999, t: 1457552620999 } }});
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1457552620999&rbSince=-1' + queryString, async function () {
t.pass('flag set query correctly formed');
t.true(logSpy.calledWithExactly('[WARN] splitio => settings: bySet filter value "set_x " has extra whitespace, trimming.'));
t.true(logSpy.calledWithExactly('[WARN] splitio => settings: you passed invalid+, flag set must adhere to the regular expressions /^[a-z0-9][_a-z0-9]{0,49}$/. This means a flag set must start with a letter or number, be in lowercase, alphanumeric and have a max length of 50 characters. invalid+ was discarded.'));
Expand Down
24 changes: 12 additions & 12 deletions src/__tests__/browserSuites/flag-sets.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ export default function flagSets(fetchMock, t) {
let manager;

// Receive split change with 1 split belonging to set_1 & set_2 and one belonging to set_3
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=-1&sets=set_1,set_2', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1&sets=set_1,set_2', function () {
return { status: 200, body: splitChange2};
});

// Receive split change with 1 split belonging to set_1 only
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602796638344&sets=set_1,set_2', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602796638344&rbSince=-1&sets=set_1,set_2', function () {
// stored feature flags before update
const storedFlags = manager.splits();
assert.true(storedFlags.length === 1, 'only one feature flag should be added');
Expand All @@ -41,7 +41,7 @@ export default function flagSets(fetchMock, t) {
});

// Receive split change with 1 split belonging to set_3 only
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602797638344&sets=set_1,set_2', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602797638344&rbSince=-1&sets=set_1,set_2', function () {
// stored feature flags before update
const storedFlags = manager.splits();
assert.true(storedFlags.length === 1);
Expand All @@ -52,7 +52,7 @@ export default function flagSets(fetchMock, t) {
return { status: 200, body: splitChange0};
});

fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602798638344&sets=set_1,set_2', async function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602798638344&rbSince=-1&sets=set_1,set_2', async function () {
// stored feature flags before update
const storedFlags = manager.splits();
assert.true(storedFlags.length === 0, 'the feature flag should be removed');
Expand All @@ -75,12 +75,12 @@ export default function flagSets(fetchMock, t) {
let manager;

// Receive split change with 1 split belonging to set_1 & set_2 and one belonging to set_3
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=-1', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1', function () {
return { status: 200, body: splitChange2};
});

// Receive split change with 1 split belonging to set_1 only
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602796638344', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602796638344&rbSince=-1', function () {
// stored feature flags before update
const storedFlags = manager.splits();
assert.true(storedFlags.length === 2, 'every feature flag should be added');
Expand All @@ -94,7 +94,7 @@ export default function flagSets(fetchMock, t) {
});

// Receive split change with 1 split belonging to set_3 only
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602797638344', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602797638344&rbSince=-1', function () {
// stored feature flags before update
const storedFlags = manager.splits();
assert.true(storedFlags.length === 2);
Expand All @@ -107,7 +107,7 @@ export default function flagSets(fetchMock, t) {
return { status: 200, body: splitChange0};
});

fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602798638344', async function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602798638344&rbSince=-1', async function () {
// stored feature flags before update
const storedFlags = manager.splits();
assert.true(storedFlags.length === 2);
Expand Down Expand Up @@ -137,11 +137,11 @@ export default function flagSets(fetchMock, t) {

fetchMock.get(baseUrls.sdk + '/memberships/nicolas%40split.io', { status: 200, body: { 'ms': {} } });
// Receive split change with 1 split belonging to set_1 & set_2 and one belonging to set_3
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=-1&sets=set_1', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1&sets=set_1', function () {
return { status: 200, body: splitChange2};
});

fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602796638344&sets=set_1', async function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602796638344&rbSince=-1&sets=set_1', async function () {
// stored feature flags before update
assert.deepEqual(client.getTreatmentsByFlagSet('set_1'), {workm: 'on'}, 'only the flag in set_1 can be evaluated');
assert.deepEqual(client.getTreatmentsByFlagSet('set_2'), {}, 'only the flag in set_1 can be evaluated');
Expand Down Expand Up @@ -174,11 +174,11 @@ export default function flagSets(fetchMock, t) {

fetchMock.get(baseUrls.sdk + '/memberships/nicolas%40split.io', { status: 200, body: { 'ms': {} } });
// Receive split change with 1 split belonging to set_1 & set_2 and one belonging to set_3
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=-1', function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=-1&rbSince=-1', function () {
return { status: 200, body: splitChange2};
});

fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.2&since=1602796638344', async function () {
fetchMock.getOnce(baseUrls.sdk + '/splitChanges?s=1.3&since=1602796638344&rbSince=-1', async function () {
// stored feature flags before update
assert.deepEqual(client.getTreatmentsByFlagSet('set_1'), {workm: 'on'}, 'all flags can be evaluated');
assert.deepEqual(client.getTreatmentsByFlagSet('set_2'), {workm: 'on'}, 'all flags can be evaluated');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@ export default function (fetchMock, assert) {

// Mock GET endpoints before creating the client
const settings = settingsFactory(config);
fetchMock.getOnce(url(settings, '/splitChanges?s=1.2&since=-1'), { status: 200, body: splitChangesMock1 });
fetchMock.getOnce(url(settings, '/splitChanges?s=1.2&since=1457552620999'), { status: 200, body: { splits: [], since: 1457552620999, till: 1457552620999 } });
fetchMock.getOnce(url(settings, '/splitChanges?s=1.3&since=-1&rbSince=-1'), { status: 200, body: splitChangesMock1 });
fetchMock.getOnce(url(settings, '/splitChanges?s=1.3&since=1457552620999&rbSince=-1'), { status: 200, body: { ff: { d: [], s: 1457552620999, t: 1457552620999 } } });
fetchMock.getOnce(url(settings, `/memberships/${encodeURIComponent(config.core.key)}`), { status: 200, body: { ms: {} } });

// Init Split client
Expand Down
7 changes: 4 additions & 3 deletions src/__tests__/browserSuites/impressions-listener.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export default function (assert) {
const testAttrs = { is_test: true };

// Impression listener is shared across all client instances and does not get affected by configurations.
client.getTreatment('hierarchical_splits_test');
client.getTreatment('hierarchical_splits_test', undefined, { properties: { prop1: 'prop-value' } });
client2.getTreatment('qc_team');
client2.getTreatmentWithConfig('qc_team'); // Validate that the impression is the same.
client3.getTreatment('qc_team', testAttrs);
Expand All @@ -58,7 +58,8 @@ export default function (assert) {
treatment: 'no',
bucketingKey: 'impr_bucketing_2',
label: 'default rule',
pt: undefined
pt: undefined,
properties: undefined
};

assert.equal(listener.logImpression.callCount, 4, 'Impression listener logImpression method should be called after we call client.getTreatment, once per each impression generated.');
Expand All @@ -71,7 +72,7 @@ export default function (assert) {
bucketingKey: undefined,
label: 'expected label',
changeNumber: 2828282828,
pt: undefined
properties: '{"prop1":"prop-value"}'
},
attributes: undefined,
...metaData
Expand Down
Loading