From 2e591afaf6968d2f3bdbb49000466e93244756ba Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Fri, 13 Mar 2026 11:51:28 +0530 Subject: [PATCH] fix: use IANA --- app/javascript/dashboard/api/reports.js | 5 ++ .../dashboard/api/specs/reports.spec.js | 6 +++ .../api/specs/summaryReports.spec.js | 47 +++++++++++++++++++ .../dashboard/api/summaryReports.js | 11 +++++ 4 files changed, 69 insertions(+) create mode 100644 app/javascript/dashboard/api/specs/summaryReports.spec.js diff --git a/app/javascript/dashboard/api/reports.js b/app/javascript/dashboard/api/reports.js index 00f040f8e..7093ec0d0 100644 --- a/app/javascript/dashboard/api/reports.js +++ b/app/javascript/dashboard/api/reports.js @@ -2,6 +2,7 @@ import ApiClient from './ApiClient'; const getTimeOffset = () => -new Date().getTimezoneOffset() / 60; +const getTimeZone = () => Intl.DateTimeFormat().resolvedOptions().timeZone; class ReportsAPI extends ApiClient { constructor() { @@ -26,6 +27,7 @@ class ReportsAPI extends ApiClient { id, group_by: groupBy, business_hours: businessHours, + timezone: getTimeZone(), timezone_offset: getTimeOffset(), }, }); @@ -41,6 +43,7 @@ class ReportsAPI extends ApiClient { id, group_by: groupBy, business_hours: businessHours, + timezone: getTimeZone(), timezone_offset: getTimeOffset(), }, }); @@ -105,6 +108,8 @@ class ReportsAPI extends ApiClient { type: 'account', group_by: groupBy, business_hours: businessHours, + timezone: getTimeZone(), + timezone_offset: getTimeOffset(), }, }); } diff --git a/app/javascript/dashboard/api/specs/reports.spec.js b/app/javascript/dashboard/api/specs/reports.spec.js index e458633d0..de81729b9 100644 --- a/app/javascript/dashboard/api/specs/reports.spec.js +++ b/app/javascript/dashboard/api/specs/reports.spec.js @@ -2,6 +2,8 @@ import reportsAPI from '../reports'; import ApiClient from '../ApiClient'; describe('#Reports API', () => { + const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; + it('creates correct instance', () => { expect(reportsAPI).toBeInstanceOf(ApiClient); expect(reportsAPI.apiVersion).toBe('/api/v2'); @@ -46,6 +48,7 @@ describe('#Reports API', () => { since: 1621103400, until: 1621621800, type: 'account', + timezone, timezone_offset: -0, }, }); @@ -59,6 +62,7 @@ describe('#Reports API', () => { group_by: undefined, id: undefined, since: 1621103400, + timezone, timezone_offset: -0, type: 'account', until: 1621621800, @@ -140,6 +144,8 @@ describe('#Reports API', () => { type: 'account', group_by: 'date', business_hours: true, + timezone, + timezone_offset: -0, }, } ); diff --git a/app/javascript/dashboard/api/specs/summaryReports.spec.js b/app/javascript/dashboard/api/specs/summaryReports.spec.js new file mode 100644 index 000000000..27bc56fbc --- /dev/null +++ b/app/javascript/dashboard/api/specs/summaryReports.spec.js @@ -0,0 +1,47 @@ +import summaryReportsAPI from '../summaryReports'; +import ApiClient from '../ApiClient'; + +describe('#Summary Reports API', () => { + const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; + + it('creates correct instance', () => { + expect(summaryReportsAPI).toBeInstanceOf(ApiClient); + expect(summaryReportsAPI.apiVersion).toBe('/api/v2'); + }); + + describe('API calls', () => { + const originalAxios = window.axios; + const axiosMock = { + get: vi.fn(() => Promise.resolve()), + }; + + beforeEach(() => { + window.axios = axiosMock; + }); + + afterEach(() => { + window.axios = originalAxios; + }); + + it('includes timezone data in summary report requests', () => { + summaryReportsAPI.getAgentReports({ + since: 1621103400, + until: 1621621800, + businessHours: true, + }); + + expect(axiosMock.get).toHaveBeenCalledWith( + '/api/v2/summary_reports/agent', + { + params: { + since: 1621103400, + until: 1621621800, + business_hours: true, + timezone, + timezone_offset: -0, + }, + } + ); + }); + }); +}); diff --git a/app/javascript/dashboard/api/summaryReports.js b/app/javascript/dashboard/api/summaryReports.js index fad26bf6f..1773afbe5 100644 --- a/app/javascript/dashboard/api/summaryReports.js +++ b/app/javascript/dashboard/api/summaryReports.js @@ -1,6 +1,9 @@ /* global axios */ import ApiClient from './ApiClient'; +const getTimeOffset = () => -new Date().getTimezoneOffset() / 60; +const getTimeZone = () => Intl.DateTimeFormat().resolvedOptions().timeZone; + class SummaryReportsAPI extends ApiClient { constructor() { super('summary_reports', { accountScoped: true, apiVersion: 'v2' }); @@ -12,6 +15,8 @@ class SummaryReportsAPI extends ApiClient { since, until, business_hours: businessHours, + timezone: getTimeZone(), + timezone_offset: getTimeOffset(), }, }); } @@ -22,6 +27,8 @@ class SummaryReportsAPI extends ApiClient { since, until, business_hours: businessHours, + timezone: getTimeZone(), + timezone_offset: getTimeOffset(), }, }); } @@ -32,6 +39,8 @@ class SummaryReportsAPI extends ApiClient { since, until, business_hours: businessHours, + timezone: getTimeZone(), + timezone_offset: getTimeOffset(), }, }); } @@ -42,6 +51,8 @@ class SummaryReportsAPI extends ApiClient { since, until, business_hours: businessHours, + timezone: getTimeZone(), + timezone_offset: getTimeOffset(), }, }); }