Skip to content

Commit

Permalink
tests for core
Browse files Browse the repository at this point in the history
  • Loading branch information
prklm10 committed Oct 19, 2023
1 parent 22adb18 commit de59242
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 7 deletions.
2 changes: 1 addition & 1 deletion packages/client/test/client.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1335,7 +1335,7 @@ describe('PercyClient', () => {

describe('sendFailedEvents', () => {
it('should send failed event with default values', async () => {
await expectAsync(client.sendFailedEvents(123, {})).toBeResolved();
await expectAsync(client.sendFailedEvents(123)).toBeResolved();
expect(api.requests['/builds/123/failed-events']).toBeDefined();
expect(api.requests['/builds/123/failed-events'][0].method).toBe('POST');
expect(api.requests['/builds/123/failed-events'][0].body).toEqual({
Expand Down
7 changes: 2 additions & 5 deletions packages/core/src/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import path from 'path';
import { createRequire } from 'module';
import logger from '@percy/logger';
import { normalize } from '@percy/config/utils';
import { getPackageJSON, Server, percyAutomateRequestHandler, percyFailedRequestHandler } from './utils.js';
import { getPackageJSON, Server, percyAutomateRequestHandler, percyFailedEventHandler } from './utils.js';
import WebdriverUtils from '@percy/webdriver-utils';
// need require.resolve until import.meta.resolve can be transpiled
export const PERCY_DOM = createRequire(import.meta.url).resolve('@percy/dom');
Expand Down Expand Up @@ -123,10 +123,7 @@ export function createPercyServer(percy, port) {
})
// Recieves events from sdk's.
.route('post', '/percy/events', async (req, res) => {
percyFailedRequestHandler(req);
console.log(`percy: ${JSON.stringify(percy.build)}`);
console.log(`body: ${JSON.stringify(req.body)}`);
req.body.errorKind = 'sdk';
percyFailedEventHandler(req, pkg.version);
await percy.client.sendFailedEvents(percy.build.id, req.body);
res.json(200, { success: true });
})
Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export function percyAutomateRequestHandler(req, percy) {
}

// Returns the body for failedEvent structure
export function percyFailedRequestHandler(req) {
export function percyFailedEventHandler(req, cliVersion) {
if (req.body.clientInfo) {
const [client, clientVersion] = req.body.clientInfo.split('/');

Expand All @@ -72,6 +72,7 @@ export function percyFailedRequestHandler(req) {
// Remove the original clientInfo field
delete req.body.clientInfo;
}
req.body.cliVersion = cliVersion;
let pkg = getPackageJSON(import.meta.url);
req.body.cliVersion = pkg.version;
}
Expand Down
55 changes: 55 additions & 0 deletions packages/core/test/api.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,61 @@ describe('API Server', () => {
resolve(); // no hanging promises
});

it('has a /events endpoint that calls #sendFailedEvents() async with provided options with clientInfo present', async () => {
let { getPackageJSON } = await import('@percy/client/utils');
let pkg = getPackageJSON(import.meta.url);
let resolve, test = new Promise(r => (resolve = r));
// spyOn(percy.client, 'sendFailedEvents').and.returnValue(test);
// let mockWebdriverUtilResponse = 'TODO: mocked response';
let sendFailedEventsSpy = spyOn(percy.client, 'sendFailedEvents').and.resolveTo('some response');

await percy.start();

await expectAsync(request('/percy/events', {
body: {
errorMessage: 'some error',
clientInfo: 'percy-appium-dotnet/3.0.1'
},
method: 'post'
})).toBeResolvedTo({ success: true });

expect(sendFailedEventsSpy).toHaveBeenCalledOnceWith(percy.build.id, jasmine.objectContaining({
errorMessage: 'some error',
client: 'percy-appium-dotnet',
clientVersion: '3.0.1',
cliVersion: pkg.version
}));

await expectAsync(test).toBePending();
resolve(); // no hanging promises
});

it('has a /events endpoint that calls #sendFailedEvents() async with provided options with clientInfo absent', async () => {
let { getPackageJSON } = await import('@percy/client/utils');
let pkg = getPackageJSON(import.meta.url);
let resolve, test = new Promise(r => (resolve = r));
// spyOn(percy.client, 'sendFailedEvents').and.returnValue(test);
// let mockWebdriverUtilResponse = 'TODO: mocked response';
let sendFailedEventsSpy = spyOn(percy.client, 'sendFailedEvents').and.resolveTo('some response');

await percy.start();

await expectAsync(request('/percy/events', {
body: {
errorMessage: 'some error'
},
method: 'post'
})).toBeResolvedTo({ success: true });

expect(sendFailedEventsSpy).toHaveBeenCalledOnceWith(percy.build.id, jasmine.objectContaining({
errorMessage: 'some error',
cliVersion: pkg.version
}));

await expectAsync(test).toBePending();
resolve(); // no hanging promises
});

it('returns a 500 error when an endpoint throws', async () => {
spyOn(percy, 'snapshot').and.rejectWith(new Error('test error'));
await percy.start();
Expand Down

0 comments on commit de59242

Please sign in to comment.