From 2508d209726aba0baeaba85df8f656107417a50f Mon Sep 17 00:00:00 2001 From: Michal Michalowski Date: Thu, 17 Apr 2025 17:34:19 +0200 Subject: [PATCH] feat(fields): do not pass NaN in FinF [CLK-656138] If a formula is a variable to another formula, we can't use NaN to indicate the impossibility to calculate it (for example because of a missing variable value). In such cases, we must provide null to indicate missing value as with normal variables. Fix added and a test case for it. --- src/clickup/clickupParser.ts | 7 +++++++ test/unit/clickup/clickupParser.test.ts | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/clickup/clickupParser.ts b/src/clickup/clickupParser.ts index 758cb9b..224b0b6 100644 --- a/src/clickup/clickupParser.ts +++ b/src/clickup/clickupParser.ts @@ -66,6 +66,13 @@ export class ClickUpParser { if (error) { throw new Error(error); } + + if (Number.isNaN(result)) { + // this formula could not be calculated, but is used as a variable + // for another formula. Formulas do not accept NaN, so we need to + // map this to null + return null; + } return result; } diff --git a/test/unit/clickup/clickupParser.test.ts b/test/unit/clickup/clickupParser.test.ts index d02a750..03499d9 100644 --- a/test/unit/clickup/clickupParser.test.ts +++ b/test/unit/clickup/clickupParser.test.ts @@ -29,6 +29,22 @@ describe('ClickUpParser', () => { expect(result).toEqual({ error: null, result: 110 }); }); + it('should handle empty variables in internal formulas', () => { + const parser = ClickUpParser.create(); + // empty variable + parser.setVariable(CF_1, null); + // formula using empty variable + // this formula would normally return NaN, but called from a formula + // we need to return null or we get #VALUE! error + parser.setVariable(CF_2, `${CF_1} * 2`, true); + // set variable + parser.setVariable(CF_3, 50); + // formula using set variable and a formula using empty variable + const formula = `${CF_3} - ${CF_2}`; + const result = parser.parse(formula); + expect(result).toEqual({ error: null, result: Number.NaN }); + }); + it('should return error if formula variable is invalid', () => { const parser = ClickUpParser.create(); parser.setVariable(CF_1, '100/0', true);