UNPKG

newman-reporter-slackreporter

Version:
162 lines (143 loc) 7.16 kB
const axios = require('axios').default; const { slackUtils } = require('../slackUtils'); const prettyms = require('pretty-ms'); jest.mock('axios'); describe('slackUtils', () => { describe('send()', () => { test('should not send slack notification if error', async () => { axios.mockRejectedValue(new Error('test error')); const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => { }); const result = await slackUtils.send('test', '{"test":"test"}'); expect(result).toEqual(false); expect(consoleErrorSpy).toBeCalled(); }); test('should send slack notification if no error', async () => { const mockPayload = { method: 'POST', url: 'testurl', data: '{"test":"test"}', headers: { 'content-type': 'application/json', 'Authorization': 'Bearer ' }, }; const mockResponse = { data: 'Hello' } axios.mockResolvedValue(mockResponse); const result = await slackUtils.send('testurl', '{"test":"test"}', '') expect(result).toEqual(mockResponse); expect(axios).toBeCalledWith(mockPayload); }); test('should send slack notification with token', async () => { const mockPayload = { method: 'POST', url: 'https://slack.com/api/chat.postMessage', data: '{"test":"test"}', headers: { 'content-type': 'application/json', 'Authorization': 'Bearer faketoken' }, }; const mockResponse = { data: 'Hello' } axios.mockResolvedValue(mockResponse); const result = await slackUtils.send('https://slack.com/api/chat.postMessage', '{"test":"test"}', 'faketoken') expect(result).toEqual(mockResponse); expect(axios).toBeCalledWith(mockPayload); }); }); describe('slackMessage()', () => { const mockFail = [{ "error": { "name": "AssertionError", "index": 0, "test": "Status code is 400", "message": "expected response to have status code 400 but got 200", "stack": "AssertionError: expected response to have status code 400 but got 200\n at Object.eval sandbox-script.js:1:2)", }, "source": { "name": "footest" } }, { "error": { "name": "AssertionError", "index": 0, "test": "Test fail", "message": "expected 'footest' fail", "stack": "AssertionError: expected response to have status code 400 but got 200\n at Object.eval sandbox-script.js:1:2)", }, "source": { "name": "footest" } }, { "error": { "name": "AssertionError", "index": 0, "test": "Status code is 500", "message": "expected response to have status code 500 but got 200 test more than 100 characters blah blah blah blah blah blah blah", "stack": "AssertionError: expected response to have status code 500 but got 200\n at Object.eval sandbox-script.js:1:2)", }, "source": { "name": "footest2" } } ] const mockTimings = { started: 1593395581284, completed: 1593395582633 } const mockFailStats = { requests: { total: 4, pending: 0, failed: 2 }, assertions: { total: 2, failed: 1 } } const mockPassStats = { requests: { total: 4, pending: 0, failed: 0 }, assertions: { total: 2, failed: 0 } } test('should return good result', () => { const result = slackUtils.slackMessage(mockPassStats, mockTimings, [], 100, '', '', '#general'); const duration = prettyms(mockTimings.completed - mockTimings.started) // should include channel name if given for channel override expect(result).toContain(`"channel":"#general"`); // successful message expect(result).toContain(`{"type":"mrkdwn","text":"Total Tests:"},{"type":"mrkdwn","text":"4"}`); expect(result).toContain(`{"type":"mrkdwn","text":"Test Failed:"},{"type":"mrkdwn","text":"0"}`); expect(result).toContain(`{"type":"mrkdwn","text":"Test Duration:"},{"type":"mrkdwn","text":"${duration}"}`); expect(result).toContain(`:white_check_mark: All Passed :white_check_mark:`); }); test('should return message with collection and environment', () => { const collectionFileName = 'testCollection' const environmentFileName = 'testEnvironment'; const result = slackUtils.slackMessage(mockFailStats, mockTimings, [], 100, collectionFileName, environmentFileName); expect(result).toContain(`{"type":"mrkdwn","text":"Collection: ${collectionFileName} \\n Environment: ${environmentFileName}"}}`) }); test('should return message truncate by message size', () => { const result = slackUtils.slackMessage(mockFailStats, mockTimings, mockFail, 106); expect(result).toContain(`Expected - response to have status code 500 but got 200 test more than 100 characters blah blah blah blah ...`); }); test('should return failure result', () => { const result = slackUtils.slackMessage(mockFailStats, mockTimings, mockFail, 100); const duration = prettyms(mockTimings.completed - mockTimings.started) expect(result).toContain(`{"type":"mrkdwn","text":"Total Tests:"},{"type":"mrkdwn","text":"4"}`); expect(result).toContain(`{"type":"mrkdwn","text":"Test Failed:"},{"type":"mrkdwn","text":"2"}`); expect(result).toContain(`{"type":"mrkdwn","text":"Test Duration:"},{"type":"mrkdwn","text":"${duration}"}`); //failures expect(result).toContain(`:fire: Failures :fire:`); expect(result).toContain(`footest`); expect(result).toContain(`1. AssertionError - Status code is 400`); expect(result).toContain(`2. AssertionError - Test fail`); expect(result).toContain(`Expected - response to have status code 400 but got 200`); // should expect clean error message expect(result).toContain(`Expected - footest fail`); expect(result).toContain(`footest2`); expect(result).toContain(`1. AssertionError - Status code is 500`); // should truncate error message expect(result).toContain(`Expected - response to have status code 500 but got 200 test more than 100 characters blah blah blah...`); }); }); afterEach(() => { jest.clearAllMocks(); }); });