From 80e236caf905cf34fa5d30af9142801a12a7da0e Mon Sep 17 00:00:00 2001 From: Bogdan Mihai-Bucur Date: Thu, 20 Aug 2026 10:49:37 +0300 Subject: [PATCH 1/2] feature: adds the as_of and start/end range query params to the stock report export options object --- src/v2/analytics/reports/stocks.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/v2/analytics/reports/stocks.ts b/src/v2/analytics/reports/stocks.ts index 73b069024ec..bd4afcfb37e 100644 --- a/src/v2/analytics/reports/stocks.ts +++ b/src/v2/analytics/reports/stocks.ts @@ -21,6 +21,9 @@ export interface StocksExportOptions { format?: string branch_number?: number uri?: string + as_of?: string + start?: string + end?: string } export class AnalyticsReportsStocks extends ThAnalyticsBaseHandler { From 806dc32e6a2cea524e6cfe9984a7a07c96a800cc Mon Sep 17 00:00:00 2001 From: Bogdan Mihai-Bucur Date: Thu, 20 Aug 2026 10:49:51 +0300 Subject: [PATCH 2/2] test: updates test to cover new changes --- test/analytics_v2/stocks/index.test.ts | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/test/analytics_v2/stocks/index.test.ts b/test/analytics_v2/stocks/index.test.ts index ace486817a8..0614a9e1f97 100644 --- a/test/analytics_v2/stocks/index.test.ts +++ b/test/analytics_v2/stocks/index.test.ts @@ -91,6 +91,49 @@ describe('v2: AnalyticsReportsStocks', () => { expect(typeof next).toBe('function') }) + it('passes as_of through to the stocks report query string', async () => { + const asOf = '2025-12-31T23:59:00.000Z' + const dataItems = [{ qty_available: 12 }] + + if (process.env.SYSTEM_TEST !== 'true') { + mock + .onGet(new RegExp(`/api/v2/analytics/${legacyId}/reports/stocks\\?as_of=`)) + .reply((config) => { + expect(config.url).toContain(`as_of=${encodeURIComponent(asOf)}`) + return [ + 200, + { + count: 1, + results: [ + { + metric: { job: 'reports_stocks', user: faker.datatype.uuid() }, + count: 1, + values: dataItems + }, + { + metric: { job: 'reports_stocks_meta', user: faker.datatype.uuid() }, + count: 1, + values: [{ count: 1 }] + }, + { + metric: { job: 'reports_stocks_filtered_meta', user: faker.datatype.uuid() }, + count: 1, + values: [{ count: 1 }] + } + ] + } + ] + }) + } + + const th = await initThInstance() + const analyticsReportsStocks = th.analyticsHandlers().analytics.reports.AnalyticsReportsStocks + + const { data } = await analyticsReportsStocks.getAll({ as_of: asOf }) + + expect(data).toEqual(dataItems) + }) + it('can get stocks analytics export', async () => { if (process.env.SYSTEM_TEST !== 'true') { mock