From dd51ed2e74b0a3e586c4451c08cc7f430155628e Mon Sep 17 00:00:00 2001 From: Theodore Kruczek Date: Sat, 13 Jan 2024 01:12:02 -0500 Subject: [PATCH] fix: :bug: fix time object being mutated --- src/body/Moon.ts | 23 +++++++++---------- .../__snapshots__/sun-moon.test.ts.snap | 6 ++--- test/sun-moon/sun-moon.test.ts | 10 ++++++-- test/transforms/transforms.test.ts | 3 --- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/body/Moon.ts b/src/body/Moon.ts index d0e1b9c..a481845 100644 --- a/src/body/Moon.ts +++ b/src/body/Moon.ts @@ -310,17 +310,20 @@ export class Moon { * calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article */ static getMoonTimes(date: Date, lat: Degrees, lon: Degrees, isUtc = false) { + // Clone the date so we don't change the original + const date_ = new Date(date); + if (isUtc) { - date.setUTCHours(0, 0, 0, 0); + date_.setUTCHours(0, 0, 0, 0); } else { - date.setHours(0, 0, 0, 0); + date_.setHours(0, 0, 0, 0); } - const { rise, set, ye } = Moon.calculateRiseSetTimes_(date, lat, lon); + const { rise, set, ye } = Moon.calculateRiseSetTimes_(date_, lat, lon); const result = { - rise: NaN as Date | number, - set: NaN as Date | number, + rise: null as Date | null, + set: null as Date | null, ye: null as number | null, alwaysUp: null as boolean | null, alwaysDown: null as boolean | null, @@ -328,15 +331,11 @@ export class Moon { }; if (rise) { - result.rise = new Date(Moon.hoursLater_(date, rise)); - } else { - result.rise = NaN; + result.rise = new Date(Moon.hoursLater_(date_, rise)); } if (set) { - result.set = new Date(Moon.hoursLater_(date, set)); - } else { - result.set = NaN; + result.set = new Date(Moon.hoursLater_(date_, set)); } if (!rise && !set) { @@ -350,7 +349,7 @@ export class Moon { } else if (rise && set) { result.alwaysUp = false; result.alwaysDown = false; - result.highest = new Date(Moon.hoursLater_(date, Math.min(rise, set) + Math.abs(set - rise) / 2)); + result.highest = new Date(Moon.hoursLater_(date_, Math.min(rise, set) + Math.abs(set - rise) / 2)); } else { result.alwaysUp = false; result.alwaysDown = false; diff --git a/test/sun-moon/__snapshots__/sun-moon.test.ts.snap b/test/sun-moon/__snapshots__/sun-moon.test.ts.snap index 54fec88..7b5b54b 100644 --- a/test/sun-moon/__snapshots__/sun-moon.test.ts.snap +++ b/test/sun-moon/__snapshots__/sun-moon.test.ts.snap @@ -41,8 +41,8 @@ Object { exports[`Sun and Moon getMoonIllumination returns fraction and angle of moons illuminated limb and phase 1`] = ` Object { - "angle": 1.870981046981252, - "fraction": 0.09702945670419616, + "angle": 2.0187380462851525, + "fraction": 0.04918501150967336, "next": Object { "date": "2022-08-27T06:46:57.840Z", "firstQuarter": Object { @@ -74,6 +74,6 @@ Object { "to": 0.966136806691289, "weight": 6.3825, }, - "phaseValue": 0.8991701089962825, + "phaseValue": 0.9288143180691704, } `; diff --git a/test/sun-moon/sun-moon.test.ts b/test/sun-moon/sun-moon.test.ts index f55315e..9579354 100644 --- a/test/sun-moon/sun-moon.test.ts +++ b/test/sun-moon/sun-moon.test.ts @@ -31,9 +31,15 @@ describe('Sun and Moon', () => { test('Moon Unit Tests', () => { expect(Moon.getMoonIllumination(dateObj)).toMatchSnapshot(); + // eslint-disable-next-line no-console + console.log('dateObj', dateObj); + Moon.rae(dateObj, 0 as Degrees, 0 as Degrees); Moon.getMoonTimes(dateObj, 0 as Degrees, 0 as Degrees, true); Moon.getMoonTimes(dateObj, -10 as Degrees, -10 as Degrees, false); + + // eslint-disable-next-line no-console + console.log('dateObj', dateObj); }); test('getMoonIllumination returns fraction and angle of moons illuminated limb and phase', () => { @@ -170,8 +176,8 @@ describe('Suncalc.js tests', () => { test('getMoonTimes returns moon rise and set times', () => { const moonTimes = Moon.getMoonTimes(new Date('2013-03-04UTC'), lat as Degrees, lon as Degrees, true); - expect(moonTimes.rise.toUTCString()).toEqual('Mon, 04 Mar 2013 23:54:29 GMT'); - expect(moonTimes.set.toUTCString()).toEqual('Mon, 04 Mar 2013 07:47:58 GMT'); + expect(moonTimes.rise?.toUTCString()).toEqual('Mon, 04 Mar 2013 23:54:29 GMT'); + expect(moonTimes.set?.toUTCString()).toEqual('Mon, 04 Mar 2013 07:47:58 GMT'); }); }); diff --git a/test/transforms/transforms.test.ts b/test/transforms/transforms.test.ts index fd4b848..89bd2a3 100644 --- a/test/transforms/transforms.test.ts +++ b/test/transforms/transforms.test.ts @@ -143,9 +143,6 @@ describe('Rae2Ecf', () => { }; const rae = ecf2rae(lla, ecf); - // eslint-disable-next-line no-console - console.warn(rae); - const ecfCoordinates = rae2ecf(rae, lla); expect(ecfCoordinates.x).toBeCloseTo(ecf.x);