From fb9ff82f8edd15aaeddbe8d1fc4f804de31afd6f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 21:16:56 +0000 Subject: [PATCH 1/2] Initial plan From 051561949c945d51e1142e8919ae496ea7c48880 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 21:26:01 +0000 Subject: [PATCH 2/2] fix(foxy-report-form): align preset ranges to period boundaries Agent-Logs-Url: https://github.com/Foxy/foxy-elements/sessions/8b0bff2f-b887-4a05-90e9-c99de8687eff Co-authored-by: pheekus <47783757+pheekus@users.noreply.github.com> --- .../public/ReportForm/ReportForm.test.ts | 37 ++++++++++++++++++- src/elements/public/ReportForm/utils.ts | 24 ++++++------ 2 files changed, 48 insertions(+), 13 deletions(-) diff --git a/src/elements/public/ReportForm/ReportForm.test.ts b/src/elements/public/ReportForm/ReportForm.test.ts index 61b076f66..91fd6c1b7 100644 --- a/src/elements/public/ReportForm/ReportForm.test.ts +++ b/src/elements/public/ReportForm/ReportForm.test.ts @@ -5,7 +5,17 @@ import { ReportForm as Form } from './ReportForm'; import { InternalSelectControl } from '../../internal/InternalSelectControl/InternalSelectControl'; import { InternalNativeDateControl } from '../../internal/InternalNativeDateControl/InternalNativeDateControl'; import { InternalSwitchControl } from '../../internal/InternalSwitchControl/InternalSwitchControl'; -import { getCurrentMonth, toAPIDateTime } from './utils'; +import { + getCurrentMonth, + getCurrentQuarter, + getCurrentYear, + getLast30Days, + getLast365Days, + getPreviousMonth, + getPreviousQuarter, + getPreviousYear, + toAPIDateTime, +} from './utils'; import { getTestData } from '../../../testgen/getTestData'; import { stub } from 'sinon'; @@ -156,6 +166,31 @@ describe('ReportForm', () => { expect(control.getValue()).to.equal('4'); // 'this_month' preset }); + it('uses calendar-aligned boundaries for all report date range presets', () => { + const now = new Date(2026, 3, 17, 12, 34, 56); + const cases = [ + { range: getPreviousQuarter(now), start: '2026-01-01T00:00:00', end: '2026-03-31T23:59:59' }, + { range: getCurrentQuarter(now), start: '2026-04-01T00:00:00', end: '2026-06-30T23:59:59' }, + { range: getPreviousMonth(now), start: '2026-03-01T00:00:00', end: '2026-03-31T23:59:59' }, + { range: getCurrentMonth(now), start: '2026-04-01T00:00:00', end: '2026-04-30T23:59:59' }, + { range: getPreviousYear(now), start: '2025-01-01T00:00:00', end: '2025-12-31T23:59:59' }, + { range: getCurrentYear(now), start: '2026-01-01T00:00:00', end: '2026-12-31T23:59:59' }, + { range: getLast365Days(now), start: '2025-04-17T00:00:00', end: '2026-04-17T23:59:59' }, + { range: getLast30Days(now), start: '2026-03-18T00:00:00', end: '2026-04-17T23:59:59' }, + ]; + + cases.forEach(({ range, start, end }) => { + expect(toAPIDateTime(range.start)).to.equal(start); + expect(toAPIDateTime(range.end)).to.equal(end); + }); + }); + + it('uses previous year when previous quarter crosses year boundary', () => { + const { start, end } = getPreviousQuarter(new Date(2026, 0, 7, 9, 0, 0)); + expect(toAPIDateTime(start)).to.equal('2025-10-01T00:00:00'); + expect(toAPIDateTime(end)).to.equal('2025-12-31T23:59:59'); + }); + it('uses custom setValue for preset control to set datetime_start and datetime_end', async () => { const element = await fixture