From 8079e75e9cfed62c35c562cc255815f2d8cdd013 Mon Sep 17 00:00:00 2001 From: eric Date: Thu, 21 Jan 2021 12:08:35 -0800 Subject: [PATCH] feat: enforce 0.01 lower bound for widthTolerance (#211) * feat: enforce 0.01 lower bound for widthTolerance * test: assert min/max values for large widthTolerance --- src/validators.mjs | 4 ++-- test/test-buildSrcSet.mjs | 21 +++++++++++++++++++++ test/test-validators.mjs | 17 +++++++++++++---- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/validators.mjs b/src/validators.mjs index f55fd7dd..d9601b85 100644 --- a/src/validators.mjs +++ b/src/validators.mjs @@ -40,9 +40,9 @@ export function validateRange(min, max) { } export function validateWidthTolerance(widthTolerance) { - if (typeof widthTolerance != 'number' || widthTolerance <= 0) { + if (typeof widthTolerance != 'number' || widthTolerance < 0.01) { throw new Error( - 'The srcset widthTolerance argument can only be passed a positive scalar number', + 'The srcset widthTolerance must be a number greater than or equal to 0.01', ); } } diff --git a/test/test-buildSrcSet.mjs b/test/test-buildSrcSet.mjs index 8d2bd444..c2d20729 100644 --- a/test/test-buildSrcSet.mjs +++ b/test/test-buildSrcSet.mjs @@ -1074,6 +1074,27 @@ describe('SrcSet Builder:', function describeSuite() { }, Error); }); + it('produces srcset with min and max widths when widthTolerance is large', function testSpec() { + const srcset = new ImgixClient({ + domain: 'testing.imgix.net', + }).buildSrcSet('image.jpg', {}, { widthTolerance: 999999.999 }); + + const srcsetSplit = srcset.split(','); + const actualLength = srcsetSplit.length; + + const srcsetMin = Number.parseFloat( + srcsetSplit[0].split(' ')[1].slice(0, -1), + ); + + const srcsetMax = Number.parseFloat( + srcsetSplit[srcsetSplit.length - 1].split(' ')[1].slice(0, -1), + ); + + assert.strictEqual(actualLength, 2); + assert.strictEqual(srcsetMin, 100); + assert.strictEqual(srcsetMax, 8192); + }); + it('memoizes generated srcset width pairs', function testSpec() { let DEFAULT_MIN_WIDTH = 100; let DEFAULT_MAX_WIDTH = 8192; diff --git a/test/test-validators.mjs b/test/test-validators.mjs index d2bb8544..881d229e 100644 --- a/test/test-validators.mjs +++ b/test/test-validators.mjs @@ -85,9 +85,9 @@ describe('Validators:', function () { }); }); - it('throws if widthTolerance is <= 0', () => { + it('throws if widthTolerance is < 0.01', () => { assert.throws(() => { - validateWidthTolerance(0); + validateWidthTolerance(0.00999999999); }); }); @@ -103,8 +103,17 @@ describe('Validators:', function () { }); }); - // TODO: should fail. - it('widthTolerance === 0.001', () => {}); + it('does not throw on valid lower bound of 0.01', () => { + assert.doesNotThrow(() => { + validateWidthTolerance(0.01); + }); + }); + + it('does not throw when passed a large value', () => { + assert.doesNotThrow(() => { + validateWidthTolerance(99999999.99); + }); + }); }); describe('Testing validateVariableQuality', function () {