Skip to content

Commit 09f6102

Browse files
Handling invalid semver values
1 parent c2ea719 commit 09f6102

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

package-lock.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"node": ">=6"
4141
},
4242
"dependencies": {
43-
"@splitsoftware/splitio-commons": "1.13.2-rc.3",
43+
"@splitsoftware/splitio-commons": "1.13.2-rc.4",
4444
"@types/google.analytics": "0.0.40",
4545
"@types/ioredis": "^4.28.0",
4646
"bloom-filters": "^3.0.0",

src/__tests__/nodeSuites/evaluations-semver.spec.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,33 +36,38 @@ export default async function (fetchMock, assert) {
3636
assert.equal(client.getTreatment('emi@split.io', 'semver_equalto', { 'version': '1.22.9' }), 'on', 'the rule will return `on` if attribute `version` is equal to `1.22.9`');
3737
assert.equal(client.getTreatment('emi@split.io', 'semver_equalto', { 'version': '1.22.9+build' }), 'off', 'build metadata is not ignored');
3838
assert.equal(client.getTreatment('emi@split.io', 'semver_equalto', { 'version': '1.22.9-rc.0' }), 'off', 'the rule will return `off` if attribute `version` is not equal to `1.22.9`');
39+
assert.equal(client.getTreatment('emi@split.io', 'semver_equalto', { 'version': null }), 'off', 'the rule will return `off` if attribute `version` is not the expected type');
3940

4041
// IN_LIST_SEMVER matcher
4142
assert.equal(client.getTreatment('emi@split.io', 'semver_inlist', { 'version': '2.1.0' }), 'on', 'the rule will return `on` if attribute `version` is in list (`1.22.9`, `2.1.0`)');
4243
assert.equal(client.getTreatment('emi@split.io', 'semver_inlist', { 'version': '1.22.9' }), 'on', 'the rule will return `on` if attribute `version` is in list (`1.22.9`, `2.1.0`)');
4344
assert.equal(client.getTreatment('emi@split.io', 'semver_inlist', { 'version': '1.22.9+build' }), 'off', 'build metadata is not ignored');
4445
assert.equal(client.getTreatment('emi@split.io', 'semver_inlist', { 'version': '1.22.9-rc.0' }), 'off', 'the rule will return `off` if attribute `version` is not in list (`1.22.9`, `2.1.0`)');
46+
assert.equal(client.getTreatment('emi@split.io', 'semver_inlist', { 'version': null }), 'off', 'the rule will return `off` if attribute `version` is not the expected type');
4547

4648
// GREATER_THAN_OR_EQUAL_TO_SEMVER matcher
4749
assert.equal(client.getTreatments({ matchingKey: 'rulo@split.io', bucketingKey: 'some_bucket' }, ['semver_greater_or_equalto'], { 'version': '1.23.9' }).semver_greater_or_equalto, 'on', 'the rule will return `on` if attribute `version` is greater than or equal to `1.22.9`');
4850
assert.equal(client.getTreatments({ matchingKey: 'rulo@split.io', bucketingKey: 'some_bucket' }, ['semver_greater_or_equalto'], { 'version': '1.22.9' }).semver_greater_or_equalto, 'on', 'the rule will return `on` if attribute `version` is greater than or equal to `1.22.9`');
4951
assert.equal(client.getTreatments({ matchingKey: 'rulo@split.io', bucketingKey: 'some_bucket' }, ['semver_greater_or_equalto'], { 'version': '1.22.9+build' }).semver_greater_or_equalto, 'on', 'build metadata is ignored');
5052
assert.equal(client.getTreatments({ matchingKey: 'rulo@split.io', bucketingKey: 'some_bucket' }, ['semver_greater_or_equalto'], { 'version': '1.22.9-rc.0' }).semver_greater_or_equalto, 'off', 'the rule will return `off` if attribute `version` is not greater than or equal to `1.22.9`');
5153
assert.equal(client.getTreatments({ matchingKey: 'rulo@split.io', bucketingKey: 'some_bucket' }, ['semver_greater_or_equalto'], { 'version': '1.21.9' }).semver_greater_or_equalto, 'off', 'the rule will return `off` if attribute `version` is not greater than or equal to `1.22.9`');
54+
assert.equal(client.getTreatments({ matchingKey: 'rulo@split.io', bucketingKey: 'some_bucket' }, ['semver_greater_or_equalto'], { 'version': false }).semver_greater_or_equalto, 'off', 'the rule will return `off` if attribute `version` is not the expected type');
5255

5356
// LESS_THAN_OR_EQUAL_TO_SEMVER matcher
5457
assert.deepEqual(client.getTreatmentWithConfig('emi@split.io', 'semver_less_or_equalto', { 'version': '1.22.11' }), { treatment: 'off', config: null }, 'the rule will return `off` if attribute `version` is not less than or equal to `1.22.9`');
5558
assert.deepEqual(client.getTreatmentWithConfig('emi@split.io', 'semver_less_or_equalto', { 'version': '1.22.9' }), { treatment: 'on', config: null }, 'the rule will return `on` if attribute `version` is less than or equal to `1.22.9`');
5659
assert.deepEqual(client.getTreatmentWithConfig('emi@split.io', 'semver_less_or_equalto', { 'version': '1.22.9+build' }), { treatment: 'on', config: null }, 'build metadata is ignored');
5760
assert.deepEqual(client.getTreatmentWithConfig('emi@split.io', 'semver_less_or_equalto', { 'version': '1.22.9-rc.0' }), { treatment: 'on', config: null }, 'the rule will return `on` if attribute `version` is less than or equal to `1.22.9`');
5861
assert.deepEqual(client.getTreatmentWithConfig('emi@split.io', 'semver_less_or_equalto', { 'version': '1.21.9' }), { treatment: 'on', config: null }, 'the rule will return `on` if attribute `version` is less than or equal to `1.22.9`');
62+
assert.deepEqual(client.getTreatmentWithConfig('emi@split.io', 'semver_less_or_equalto', { 'version': {} }), { treatment: 'off', config: null }, 'the rule will return `off` if attribute `version` is not the expected type');
5963

6064
// BETWEEN_SEMVER matcher
6165
assert.deepEqual(client.getTreatmentsWithConfig('emi@split.io', ['semver_between'], { 'version': '2.1.1' }).semver_between, { treatment: 'off', config: null }, 'the rule will return `off` if attribute `version` is not between `1.22.9` and `2.1.0`');
6266
assert.deepEqual(client.getTreatmentsWithConfig('emi@split.io', ['semver_between'], { 'version': '2.1.0+build' }).semver_between, { treatment: 'on', config: null }, 'build metadata is ignored');
6367
assert.deepEqual(client.getTreatmentsWithConfig('emi@split.io', ['semver_between'], { 'version': '1.25.0' }).semver_between, { treatment: 'on', config: null }, 'the rule will return `on` if attribute `version` is between `1.22.9` and `2.1.0`');
6468
assert.deepEqual(client.getTreatmentsWithConfig('emi@split.io', ['semver_between'], { 'version': '1.22.9' }).semver_between, { treatment: 'on', config: null }, 'the rule will return `on` if attribute `version` is between `1.22.9` and `2.1.0`');
6569
assert.deepEqual(client.getTreatmentsWithConfig('emi@split.io', ['semver_between'], { 'version': '1.22.9-rc.0' }).semver_between, { treatment: 'off', config: null }, 'the rule will return `off` if attribute `version` is not between `1.22.9` and `2.1.0`');
70+
assert.deepEqual(client.getTreatmentsWithConfig('emi@split.io', ['semver_between'], { 'version': [] }).semver_between, { treatment: 'off', config: null }, 'the rule will return `off` if attribute `version` is not the expected type');
6671

6772
// Evaluation of a flag with unsupported matcher
6873
assert.equal(client.getTreatment('any-key', 'flag_with_unsupported_matcher'), 'control', 'evaluation of a flag with an unsupported matcher should return control');
@@ -80,11 +85,11 @@ export default async function (fetchMock, assert) {
8085
assert.equal(impressions.filter((imp) => imp.r === expectedLabel && imp.t === expectedTreatment).length, expectedOnCount, `${expectedOnCount} impression with 'on' treatment and label ${expectedLabel}`);
8186
}
8287

83-
validateImpressionData('semver_equalto', 3, 1, 'equal to semver');
84-
validateImpressionData('semver_inlist', 4, 2, 'in list semver');
85-
validateImpressionData('semver_greater_or_equalto', 5, 3, 'greater than or equal to semver');
86-
validateImpressionData('semver_less_or_equalto', 5, 4, 'less than or equal to semver');
87-
validateImpressionData('semver_between', 5, 3, 'between semver');
88+
validateImpressionData('semver_equalto', 4, 1, 'equal to semver');
89+
validateImpressionData('semver_inlist', 5, 2, 'in list semver');
90+
validateImpressionData('semver_greater_or_equalto', 6, 3, 'greater than or equal to semver');
91+
validateImpressionData('semver_less_or_equalto', 6, 4, 'less than or equal to semver');
92+
validateImpressionData('semver_between', 6, 3, 'between semver');
8893
validateImpressionData('flag_with_unsupported_matcher', 1, 1, 'unsupported matcher type', 'control');
8994

9095
POSTED_IMPRESSIONS_COUNT = payload.reduce((acc, curr) => acc + curr.i.length, 0);

0 commit comments

Comments
 (0)