UNPKG

qa-shadow-report

Version:

npm package that prints formatted test reports into a google sheet or csv file

169 lines (137 loc) 5.42 kB
import { jest } from '@jest/globals'; // Mock the modules before importing const mockProcessWeeklySourceTabTitles = jest.fn(); const mockGetTabIdFromWeeklyTitle = jest.fn(); const mockGetDayIndex = jest.fn(); const mockGetHeaderIndicatorsLength = jest.fn(); const mockInitializeReportColumnMetrics = jest.fn(); const mockFindLongestHeaderWithinWeeklySeries = jest.fn(); const mockFetchLastWeekTabValues = jest.fn(); const mockInitializeWeeklyReportPayload = jest.fn(); jest.unstable_mockModule('./summaryGenerationHelpers.js', () => ({ findLongestHeaderWithinWeeklySeries: mockFindLongestHeaderWithinWeeklySeries.mockResolvedValue(10), processWeeklySourceTabTitles: mockProcessWeeklySourceTabTitles, fetchLastWeekTabValues: mockFetchLastWeekTabValues, initializeWeeklyReportPayload: mockInitializeWeeklyReportPayload.mockReturnValue({ metadata: {}, headerPayload: [], bodyPayload: [], summaryHeaderStylePayload: [], }), })); jest.unstable_mockModule('../google/sheetDataMethods/getSheetInfo.js', () => ({ getTabIdFromWeeklyTitle: mockGetTabIdFromWeeklyTitle, })); jest.unstable_mockModule('../sharedMethods/dateFormatting.js', () => ({ getDayIndex: mockGetDayIndex, })); jest.unstable_mockModule('../sharedMethods/summaryHandler.js', () => ({ getHeaderIndicatorsLength: mockGetHeaderIndicatorsLength, initializeReportColumnMetrics: mockInitializeReportColumnMetrics, })); const { constructWeeklyPayloadForCopyPaste } = await import( './buildSummary.js' ); describe('constructWeeklyPayloadForCopyPaste', () => { beforeEach(() => { jest.clearAllMocks(); // Setup default mock implementations mockGetTabIdFromWeeklyTitle.mockResolvedValue('123'); mockGetDayIndex.mockReturnValue(1); mockGetHeaderIndicatorsLength.mockReturnValue(5); mockInitializeReportColumnMetrics.mockReturnValue({ nextAvailableColumn: 0, defaultHeaderMetricsDestinationColumn: 0, longestHeaderEnd: 0, defaultHeaderMetricsDestinationColumnEnd: 5, }); mockFetchLastWeekTabValues.mockResolvedValue([]); }); it('should construct weekly payload successfully', async () => { const sourceTitles = ['Mar 20, 2024']; const destinationTitle = 'Weekly Summary'; const result = await constructWeeklyPayloadForCopyPaste( sourceTitles, destinationTitle ); expect(result).toBeDefined(); expect(result.metadata.summaryType).toBe('weekly'); expect(result.metadata.startDate).toBeDefined(); expect(result.metadata.endDate).toBeDefined(); }); it('should filter source titles within date range', async () => { const sourceTitles = ['Mar 20, 2024', 'Mar 21, 2024']; const destinationTitle = 'Weekly Summary'; // Mock the current date to be March 20, 2024 const mockDate = new Date('2024-03-20T12:00:00Z'); jest.useFakeTimers(); jest.setSystemTime(mockDate); // Mock getDayIndex to return Monday (1) mockGetDayIndex.mockReturnValue(1); // These titles should be within the week range const expectedFilteredTitles = sourceTitles; mockFetchLastWeekTabValues.mockResolvedValue(expectedFilteredTitles); await constructWeeklyPayloadForCopyPaste(sourceTitles, destinationTitle); expect(mockProcessWeeklySourceTabTitles).toHaveBeenCalledWith( expectedFilteredTitles, '123', expect.any(Object), expect.any(Object), destinationTitle, 5 ); jest.useRealTimers(); }); it('should sort source titles by date', async () => { const unsortedTitles = ['Mar 22, 2024', 'Mar 20, 2024', 'Mar 21, 2024']; const sortedTitles = ['Mar 20, 2024', 'Mar 21, 2024', 'Mar 22, 2024']; const destinationTitle = 'Weekly Summary'; // Mock the current date to be March 22, 2024 const mockDate = new Date('2024-03-22T12:00:00Z'); jest.useFakeTimers(); jest.setSystemTime(mockDate); // Mock getDayIndex to return Monday (1) mockGetDayIndex.mockReturnValue(1); // Mock fetchLastWeekTabValues to return the sorted titles mockFetchLastWeekTabValues.mockResolvedValue(sortedTitles); await constructWeeklyPayloadForCopyPaste(unsortedTitles, destinationTitle); // Verify that processWeeklySourceTabTitles was called with sorted titles expect(mockProcessWeeklySourceTabTitles).toHaveBeenCalledWith( sortedTitles, '123', expect.any(Object), expect.any(Object), destinationTitle, 5 ); jest.useRealTimers(); }); it('should handle empty source titles', async () => { const sourceTitles = []; const destinationTitle = 'Weekly Summary'; mockFetchLastWeekTabValues.mockResolvedValue([]); const result = await constructWeeklyPayloadForCopyPaste( sourceTitles, destinationTitle ); expect(result).toBeDefined(); expect(mockProcessWeeklySourceTabTitles).toHaveBeenCalledWith( [], '123', expect.any(Object), expect.any(Object), destinationTitle, 5 ); }); it('should handle errors gracefully', async () => { const sourceTitles = ['Mar 20, 2024']; const destinationTitle = 'Weekly Summary'; mockGetTabIdFromWeeklyTitle.mockRejectedValue(new Error('Test error')); await expect( constructWeeklyPayloadForCopyPaste(sourceTitles, destinationTitle) ).rejects.toThrow('Error building weekly copy-paste payload.'); }); });