UNPKG

qa-shadow-report

Version:

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

199 lines (170 loc) 6.23 kB
import { sortPayload } from './sortDailyReportRows.js'; import { PAYLOAD_TEST_DATA, TEST_OBJECTS, } from '../../../__tests__/data/testData'; describe('sortPayload', () => { // Test Data Setup const createPayloadItem = (area, spec, testName) => ({ area, spec, testName, }); const createPayload = (items) => ({ bodyPayload: items, }); // Basic Functionality Tests describe('Basic Functionality', () => { it('should sort payload items by area, spec, and testName', () => { const payload = createPayload([ createPayloadItem('B', 'Y', 'Z'), createPayloadItem('A', 'X', 'Y'), createPayloadItem('A', 'X', 'Z'), createPayloadItem('A', 'Y', 'X'), createPayloadItem('B', 'X', 'Y'), ]); const expected = createPayload([ createPayloadItem('A', 'X', 'Y'), createPayloadItem('A', 'X', 'Z'), createPayloadItem('A', 'Y', 'X'), createPayloadItem('B', 'X', 'Y'), createPayloadItem('B', 'Y', 'Z'), ]); sortPayload(payload); expect(payload).toEqual(expected); }); it('should maintain stable sorting for equal items', () => { const payload = createPayload([ createPayloadItem('A', 'X', 'Y'), createPayloadItem('A', 'X', 'Y'), createPayloadItem('A', 'X', 'Y'), ]); const originalOrder = [...payload.bodyPayload]; sortPayload(payload); // Verify that items with equal values maintain their relative order expect(payload.bodyPayload).toEqual(originalOrder); }); }); // Edge Cases describe('Edge Cases', () => { it('should handle empty payload array', () => { const payload = createPayload([]); sortPayload(payload); expect(payload.bodyPayload).toEqual([]); }); it('should handle single item payload', () => { const payload = createPayload([createPayloadItem('A', 'X', 'Y')]); sortPayload(payload); expect(payload.bodyPayload).toEqual([createPayloadItem('A', 'X', 'Y')]); }); it('should handle special characters in strings', () => { const payload = createPayload([ createPayloadItem('A', 'X', 'Test!'), createPayloadItem('A', 'X', 'Test#'), createPayloadItem('A', 'X', 'Test$'), ]); const expected = createPayload([ createPayloadItem('A', 'X', 'Test!'), createPayloadItem('A', 'X', 'Test#'), createPayloadItem('A', 'X', 'Test$'), ]); sortPayload(payload); expect(payload).toEqual(expected); }); it.skip('should handle case sensitivity correctly', () => { const payload = createPayload([ createPayloadItem('a', 'x', 'y'), createPayloadItem('A', 'X', 'Y'), createPayloadItem('b', 'y', 'z'), createPayloadItem('B', 'Y', 'Z'), ]); const expected = createPayload([ createPayloadItem('A', 'X', 'Y'), createPayloadItem('a', 'x', 'y'), createPayloadItem('B', 'Y', 'Z'), createPayloadItem('b', 'y', 'z'), ]); sortPayload(payload); expect(payload).toEqual(expected); }); }); // Input Validation describe('Input Validation', () => { it('should throw an error if payload is not an object', () => { expect(() => sortPayload(null)).toThrow( 'Invalid payload: Expected an object.' ); expect(() => sortPayload('invalid')).toThrow( 'Invalid payload: Expected an object.' ); expect(() => sortPayload(undefined)).toThrow( 'Invalid payload: Expected an object.' ); expect(() => sortPayload(123)).toThrow( 'Invalid payload: Expected an object.' ); }); it('should throw an error if bodyPayload is not an array', () => { expect(() => sortPayload({})).toThrow( 'Invalid payload: Expected an object with a bodyPayload array.' ); expect(() => sortPayload({ bodyPayload: 'not an array' })).toThrow( 'Invalid payload: Expected an object with a bodyPayload array.' ); expect(() => sortPayload({ bodyPayload: null })).toThrow( 'Invalid payload: Expected an object with a bodyPayload array.' ); }); it('should throw an error if bodyPayload items do not have the required properties', () => { expect(() => sortPayload({ bodyPayload: [{ area: 'A', spec: 'X' }] }) ).toThrow( 'Invalid payload item: Each item in bodyPayload should have area, spec, and testName as strings.' ); expect(() => sortPayload({ bodyPayload: [{ area: 'A', spec: 123, testName: 'Y' }] }) ).toThrow( 'Invalid payload item: Each item in bodyPayload should have area, spec, and testName as strings.' ); expect(() => sortPayload({ bodyPayload: [{ area: 'A', spec: 'X', testName: null }] }) ).toThrow( 'Invalid payload item: Each item in bodyPayload should have area, spec, and testName as strings.' ); }); }); // Performance Tests describe('Performance', () => { it('should sort large payloads efficiently', () => { const largePayload = createPayload( Array(1000) .fill(null) .map((_, i) => createPayloadItem(`Area${i % 10}`, `Spec${i % 20}`, `Test${i}`) ) ); const startTime = performance.now(); sortPayload(largePayload); const endTime = performance.now(); expect(endTime - startTime).toBeLessThan(100); // Should complete within 100ms }); }); // Error Handling describe('Error Handling', () => { it('should handle sorting errors gracefully', () => { const payload = createPayload([ createPayloadItem('A', 'X', 'Y'), createPayloadItem('A', 'X', 'Z'), createPayloadItem('A', 'Y', 'X'), ]); // Mock localeCompare to throw an error const originalLocaleCompare = String.prototype.localeCompare; String.prototype.localeCompare = () => { throw new Error('Test error'); }; expect(() => sortPayload(payload)).toThrow('Test error'); // Restore original localeCompare String.prototype.localeCompare = originalLocaleCompare; }); }); });