WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit d577f09

Browse files
goncalvesnelsonAmericas
authored andcommitted
Restore original BigNumber.DEBUG value after the asserts
1 parent b59ae2e commit d577f09

8 files changed

+156
-12
lines changed

src/asserts/big-number-assert.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ module.exports = function bigNumberAssert({ validateSignificantDigits = true } =
2525
throw new Error('BigNumber is not installed');
2626
}
2727

28-
BigNumber.DEBUG = !!validateSignificantDigits;
29-
3028
/**
3129
* Class name.
3230
*/
@@ -38,6 +36,10 @@ module.exports = function bigNumberAssert({ validateSignificantDigits = true } =
3836
*/
3937

4038
this.validate = value => {
39+
const originalDebug = BigNumber.DEBUG;
40+
41+
BigNumber.DEBUG = !!validateSignificantDigits;
42+
4143
try {
4244
const number = new BigNumber(value);
4345

@@ -50,6 +52,8 @@ module.exports = function bigNumberAssert({ validateSignificantDigits = true } =
5052
}
5153

5254
throw new Violation(this, value);
55+
} finally {
56+
BigNumber.DEBUG = originalDebug;
5357
}
5458

5559
return true;

src/asserts/big-number-equal-to-assert.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ module.exports = function bigNumberEqualToAssert(value, { validateSignificantDig
2727
throw new Error('BigNumber is not installed');
2828
}
2929

30-
BigNumber.DEBUG = !!validateSignificantDigits;
31-
3230
/**
3331
* Extend `Assert` with `BigNumberAssert`.
3432
*/

src/asserts/big-number-greater-than-assert.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ module.exports = function bigNumberGreaterThanAssert(threshold, { validateSignif
2727
throw new Error('BigNumber is not installed');
2828
}
2929

30-
BigNumber.DEBUG = !!validateSignificantDigits;
31-
3230
/**
3331
* Extend `Assert` with `BigNumberAssert`.
3432
*/

src/asserts/big-number-greater-than-or-equal-to-assert.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ module.exports = function bigNumberGreaterThanOrEqualToAssert(threshold, { valid
2727
throw new Error('BigNumber is not installed');
2828
}
2929

30-
BigNumber.DEBUG = !!validateSignificantDigits;
31-
3230
/**
3331
* Extend `Assert` with `BigNumberAssert`.
3432
*/

src/asserts/big-number-less-than-assert.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ module.exports = function bigNumberLessThan(threshold, { validateSignificantDigi
2727
throw new Error('BigNumber is not installed');
2828
}
2929

30-
BigNumber.DEBUG = !!validateSignificantDigits;
31-
3230
/**
3331
* Extend `Assert` with `BigNumberAssert`.
3432
*/

src/asserts/big-number-less-than-or-equal-to-assert.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ module.exports = function bigNumberLessThanOrEqualToAssert(threshold, { validate
2727
throw new Error('BigNumber is not installed');
2828
}
2929

30-
BigNumber.DEBUG = !!validateSignificantDigits;
31-
3230
/**
3331
* Extend `Assert` with `BigNumberAssert`.
3432
*/

test/asserts/big-number-assert.test.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,4 +91,36 @@ describe('BigNumberAssert', () => {
9191
}
9292
});
9393
});
94+
95+
it('should restore the original BigNumber.DEBUG value after validation', ({ assert }) => {
96+
const BigNumber = require('bignumber.js');
97+
98+
BigNumber.DEBUG = false;
99+
100+
Assert.bigNumber({ validateSignificantDigits: true }).validate('1.01');
101+
102+
assert.equal(BigNumber.DEBUG, false);
103+
104+
BigNumber.DEBUG = true;
105+
106+
Assert.bigNumber({ validateSignificantDigits: false }).validate('1.01');
107+
108+
assert.equal(BigNumber.DEBUG, true);
109+
});
110+
111+
it('should restore the original BigNumber.DEBUG value even when validation fails', ({ assert }) => {
112+
const BigNumber = require('bignumber.js');
113+
114+
BigNumber.DEBUG = false;
115+
116+
try {
117+
Assert.bigNumber({ validateSignificantDigits: true }).validate('invalid');
118+
119+
assert.fail();
120+
} catch (e) {
121+
assert.ok(e instanceof Violation);
122+
}
123+
124+
assert.equal(BigNumber.DEBUG, false);
125+
});
94126
});
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
'use strict';
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
const { Assert: BaseAssert, Violation } = require('validator.js');
8+
const { describe, it } = require('node:test');
9+
const BigNumber = require('bignumber.js');
10+
const BigNumberEqualToAssert = require('../../src/asserts/big-number-equal-to-assert.js');
11+
const BigNumberGreaterThanAssert = require('../../src/asserts/big-number-greater-than-assert.js');
12+
const BigNumberGreaterThanOrEqualToAssert = require('../../src/asserts/big-number-greater-than-or-equal-to-assert.js');
13+
const BigNumberLessThanAssert = require('../../src/asserts/big-number-less-than-assert.js');
14+
const BigNumberLessThanOrEqualToAssert = require('../../src/asserts/big-number-less-than-or-equal-to-assert.js');
15+
16+
/**
17+
* Extend `Assert` with all BigNumber asserts.
18+
*/
19+
20+
const Assert = BaseAssert.extend({
21+
BigNumberEqualTo: BigNumberEqualToAssert,
22+
BigNumberGreaterThan: BigNumberGreaterThanAssert,
23+
BigNumberGreaterThanOrEqualTo: BigNumberGreaterThanOrEqualToAssert,
24+
BigNumberLessThan: BigNumberLessThanAssert,
25+
BigNumberLessThanOrEqualTo: BigNumberLessThanOrEqualToAssert
26+
});
27+
28+
/**
29+
* Test BigNumber asserts regression - BigNumber.DEBUG preservation.
30+
*/
31+
32+
describe('BigNumber DEBUG Regression', () => {
33+
const asserts = [
34+
{
35+
constructor: options => Assert.bigNumberEqualTo(10, options),
36+
invalidValue: 5,
37+
name: 'BigNumberEqualTo',
38+
validValue: 10
39+
},
40+
{
41+
constructor: options => Assert.bigNumberGreaterThan(10, options),
42+
invalidValue: 5,
43+
name: 'BigNumberGreaterThan',
44+
validValue: 11
45+
},
46+
{
47+
constructor: options => Assert.bigNumberGreaterThanOrEqualTo(10, options),
48+
invalidValue: 5,
49+
name: 'BigNumberGreaterThanOrEqualTo',
50+
validValue: 10
51+
},
52+
{
53+
constructor: options => Assert.bigNumberLessThan(10, options),
54+
invalidValue: 15,
55+
name: 'BigNumberLessThan',
56+
validValue: 9
57+
},
58+
{
59+
constructor: options => Assert.bigNumberLessThanOrEqualTo(10, options),
60+
invalidValue: 15,
61+
name: 'BigNumberLessThanOrEqualTo',
62+
validValue: 10
63+
}
64+
];
65+
66+
const debugValues = [true, false];
67+
const validateSignificantDigitsOptions = [true, false];
68+
69+
asserts.forEach(({ constructor, invalidValue, name, validValue }) => {
70+
describe(name, () => {
71+
debugValues.forEach(initialDebugValue => {
72+
validateSignificantDigitsOptions.forEach(validateSignificantDigits => {
73+
describe(`with DEBUG=${initialDebugValue} and validateSignificantDigits=${validateSignificantDigits}`, () => {
74+
it('should restore original BigNumber.DEBUG value after successful validation', ({ assert }) => {
75+
BigNumber.DEBUG = initialDebugValue;
76+
77+
assert.equal(BigNumber.DEBUG, initialDebugValue);
78+
79+
constructor({ validateSignificantDigits }).validate(validValue);
80+
81+
assert.equal(BigNumber.DEBUG, initialDebugValue);
82+
});
83+
84+
it('should restore original BigNumber.DEBUG value after failed validation', ({ assert }) => {
85+
BigNumber.DEBUG = initialDebugValue;
86+
87+
assert.equal(BigNumber.DEBUG, initialDebugValue);
88+
89+
try {
90+
constructor({ validateSignificantDigits }).validate(invalidValue);
91+
assert.fail();
92+
} catch (e) {
93+
assert.ok(e instanceof Violation);
94+
}
95+
96+
assert.equal(BigNumber.DEBUG, initialDebugValue);
97+
});
98+
99+
it('should restore original BigNumber.DEBUG value after validation with invalid input', ({ assert }) => {
100+
BigNumber.DEBUG = initialDebugValue;
101+
102+
assert.equal(BigNumber.DEBUG, initialDebugValue);
103+
104+
try {
105+
constructor({ validateSignificantDigits }).validate('invalid');
106+
assert.fail();
107+
} catch (e) {
108+
assert.ok(e instanceof Violation);
109+
}
110+
111+
assert.equal(BigNumber.DEBUG, initialDebugValue);
112+
});
113+
});
114+
});
115+
});
116+
});
117+
});
118+
});

0 commit comments

Comments
 (0)