From 49445258220ddbceb233fa2cc8559d5ea6a4390e Mon Sep 17 00:00:00 2001 From: Valya Bullions Date: Thu, 12 Jan 2023 14:29:50 +0100 Subject: [PATCH 1/2] fix: test failing for toDate from string extension test --- .../DateExtensions.test.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts b/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts index 5084fca09a538..5012aabe67a53 100644 --- a/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts +++ b/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts @@ -47,7 +47,29 @@ describe('Data Transformation Functions', () => { }); test('.toDate() should work on a string', () => { - expect(evaluate('={{ "2022-01-03T00:00:00.000+00:00".toDate() }}')).toEqual(new Date(2022, 0, 3)); + const offsetToString = (input: number) => { + let output = '-'; + if (input < 0) { + output = '+'; + input = -input; + } + + output += Math.floor(input / 60) + .toString() + .padStart(2, '0'); + output += ':'; + output += (input % 60).toString().padStart(2, '0'); + + return output; + }; + + expect( + evaluate( + `={{ "2022-01-03T00:00:00.000${offsetToString( + new Date().getTimezoneOffset(), + )}".toDate() }}`, + ), + ).toEqual(new Date(2022, 0, 3)); }); }); }); From 4ad81a578342acb3136f5735d2369bfaf22370bf Mon Sep 17 00:00:00 2001 From: Valya Bullions Date: Thu, 12 Jan 2023 14:46:54 +0000 Subject: [PATCH 2/2] fix: make whole timestamp from util function --- .../DateExtensions.test.ts | 27 +++---------------- .../test/ExpressionExtensions/Helpers.ts | 9 +++++++ 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts b/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts index 5012aabe67a53..bd51a5cdff6f9 100644 --- a/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts +++ b/packages/workflow/test/ExpressionExtensions/DateExtensions.test.ts @@ -4,7 +4,7 @@ import { extend } from '@/Extensions'; import { dateExtensions } from '@/Extensions/DateExtensions'; -import { evaluate } from './Helpers'; +import { evaluate, getLocalISOString } from './Helpers'; describe('Data Transformation Functions', () => { describe('Date Data Transformation Functions', () => { @@ -47,29 +47,8 @@ describe('Data Transformation Functions', () => { }); test('.toDate() should work on a string', () => { - const offsetToString = (input: number) => { - let output = '-'; - if (input < 0) { - output = '+'; - input = -input; - } - - output += Math.floor(input / 60) - .toString() - .padStart(2, '0'); - output += ':'; - output += (input % 60).toString().padStart(2, '0'); - - return output; - }; - - expect( - evaluate( - `={{ "2022-01-03T00:00:00.000${offsetToString( - new Date().getTimezoneOffset(), - )}".toDate() }}`, - ), - ).toEqual(new Date(2022, 0, 3)); + const date = new Date(2022, 0, 3); + expect(evaluate(`={{ "${getLocalISOString(date)}".toDate() }}`)).toEqual(date); }); }); }); diff --git a/packages/workflow/test/ExpressionExtensions/Helpers.ts b/packages/workflow/test/ExpressionExtensions/Helpers.ts index 9d5307bdeca72..1a36df85a6bf7 100644 --- a/packages/workflow/test/ExpressionExtensions/Helpers.ts +++ b/packages/workflow/test/ExpressionExtensions/Helpers.ts @@ -31,3 +31,12 @@ export const evaluate = (value: string, values?: INodeExecutionData[]) => 'America/New_York', {}, ); + +export const getLocalISOString = (date: Date) => { + const offset = date.getTimezoneOffset(); + const offsetAbs = Math.abs(offset); + const isoString = new Date(date.getTime() - offset * 60 * 1000).toISOString(); + const hours = String(Math.floor(offsetAbs / 60)).padStart(2, '0'); + const minutes = String(offsetAbs % 60).padStart(2, '0'); + return `${isoString.slice(0, -1)}${offset > 0 ? '-' : '+'}${hours}:${minutes}`; +};