123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 |
- const Reporter = require('../lib/reporter');
- const semver = require('semver');
- const os = require('os');
- const path = require('path');
- let osVersion = `${os.platform()}-${os.arch()}-${os.release()}`;
- let getReleaseChannel = version => {
- return version.indexOf('beta') > -1
- ? 'beta'
- : version.indexOf('dev') > -1
- ? 'dev'
- : 'stable';
- };
- // describe('Reporter', () => {
- // let reporter,
- // requests,
- // initialStackTraceLimit,
- // initialHomeDirectory,
- // mockActivePackages;
- //
- // beforeEach(() => {
- // reporter = new Reporter({
- // request: (url, options) => requests.push(Object.assign({ url }, options)),
- // alwaysReport: true,
- // reportPreviousErrors: false
- // });
- // requests = [];
- // mockActivePackages = [];
- // spyOn(atom.packages, 'getActivePackages').andCallFake(
- // () => mockActivePackages
- // );
- //
- // initialStackTraceLimit = Error.stackTraceLimit;
- // Error.stackTraceLimit = 1;
- //
- // initialHomeDirectory = process.env.HOME;
- // });
- //
- // afterEach(() => {
- // process.env.HOME = initialHomeDirectory;
- // Error.stackTraceLimit = initialStackTraceLimit;
- // });
- //
- // describe('.reportUncaughtException(error)', () => {
- // it('posts errors originated inside Pulsar Core to BugSnag', () => {
- // const repositoryRootPath = path.join(__dirname, '..');
- // reporter = new Reporter({
- // request: (url, options) =>
- // requests.push(Object.assign({ url }, options)),
- // alwaysReport: true,
- // reportPreviousErrors: false,
- // resourcePath: repositoryRootPath
- // });
- //
- // let error = new Error();
- // Error.captureStackTrace(error);
- // reporter.reportUncaughtException(error);
- // let [lineNumber, columnNumber] = error.stack
- // .match(/.js:(\d+):(\d+)/)
- // .slice(1)
- // .map(s => parseInt(s));
- //
- // expect(requests.length).toBe(1);
- // let [request] = requests;
- // expect(request.method).toBe('POST');
- // expect(request.url).toBe('https://notify.bugsnag.com');
- // expect(request.headers.get('Content-Type')).toBe('application/json');
- // let body = JSON.parse(request.body);
- // // Delete `inProject` field because tests may fail when run as part of Pulsar Core
- // // (i.e. when this test file will be located under `node_modules/exception-reporting/spec`)
- // delete body.events[0].exceptions[0].stacktrace[0].inProject;
- //
- // expect(body).toEqual({
- // apiKey: Reporter.API_KEY,
- // notifier: {
- // name: 'Atom',
- // version: Reporter.LIB_VERSION,
- // url: 'https://www.atom.io'
- // },
- // events: [
- // {
- // payloadVersion: '2',
- // exceptions: [
- // {
- // errorClass: 'Error',
- // message: '',
- // stacktrace: [
- // {
- // method: semver.gt(process.versions.electron, '1.6.0')
- // ? 'Spec.<anonymous>'
- // : '<anonymous>',
- // file: 'spec/reporter-spec.js',
- // lineNumber: lineNumber,
- // columnNumber: columnNumber
- // }
- // ]
- // }
- // ],
- // severity: 'error',
- // user: {},
- // app: {
- // version: atom.getVersion(),
- // releaseStage: getReleaseChannel(atom.getVersion())
- // },
- // device: {
- // osVersion: osVersion
- // }
- // }
- // ]
- // });
- // });
- //
- // it('posts errors originated outside Pulsar Core to BugSnag', () => {
- // process.env.HOME = path.join(__dirname, '..', '..');
- //
- // let error = new Error();
- // Error.captureStackTrace(error);
- // reporter.reportUncaughtException(error);
- // let [lineNumber, columnNumber] = error.stack
- // .match(/.js:(\d+):(\d+)/)
- // .slice(1)
- // .map(s => parseInt(s));
- //
- // expect(requests.length).toBe(1);
- // let [request] = requests;
- // expect(request.method).toBe('POST');
- // expect(request.url).toBe('https://notify.bugsnag.com');
- // expect(request.headers.get('Content-Type')).toBe('application/json');
- // let body = JSON.parse(request.body);
- // // Delete `inProject` field because tests may fail when run as part of Pulsar Core
- // // (i.e. when this test file will be located under `node_modules/exception-reporting/spec`)
- // delete body.events[0].exceptions[0].stacktrace[0].inProject;
- //
- // expect(body).toEqual({
- // apiKey: Reporter.API_KEY,
- // notifier: {
- // name: 'Atom',
- // version: Reporter.LIB_VERSION,
- // url: 'https://www.atom.io'
- // },
- // events: [
- // {
- // payloadVersion: '2',
- // exceptions: [
- // {
- // errorClass: 'Error',
- // message: '',
- // stacktrace: [
- // {
- // method: semver.gt(process.versions.electron, '1.6.0')
- // ? 'Spec.<anonymous>'
- // : '<anonymous>',
- // file: '~/exception-reporting/spec/reporter-spec.js',
- // lineNumber: lineNumber,
- // columnNumber: columnNumber
- // }
- // ]
- // }
- // ],
- // severity: 'error',
- // user: {},
- // app: {
- // version: atom.getVersion(),
- // releaseStage: getReleaseChannel(atom.getVersion())
- // },
- // device: {
- // osVersion: osVersion
- // }
- // }
- // ]
- // });
- // });
- //
- // describe('when the error object has `privateMetadata` and `privateMetadataDescription` fields', () => {
- // let [error, notification] = [];
- //
- // beforeEach(() => {
- // atom.notifications.clear();
- // spyOn(atom.notifications, 'addInfo').andCallThrough();
- //
- // error = new Error();
- // Error.captureStackTrace(error);
- //
- // error.metadata = { foo: 'bar' };
- // error.privateMetadata = { baz: 'quux' };
- // error.privateMetadataDescription = 'The contents of baz';
- // });
- //
- // it('posts a notification asking for consent', () => {
- // reporter.reportUncaughtException(error);
- // expect(atom.notifications.addInfo).toHaveBeenCalled();
- // });
- //
- // it('submits the error with the private metadata if the user consents', () => {
- // spyOn(reporter, 'reportUncaughtException').andCallThrough();
- // reporter.reportUncaughtException(error);
- // reporter.reportUncaughtException.reset();
- //
- // notification = atom.notifications.getNotifications()[0];
- //
- // let notificationOptions = atom.notifications.addInfo.argsForCall[0][1];
- // expect(notificationOptions.buttons[1].text).toMatch(/Yes/);
- //
- // notificationOptions.buttons[1].onDidClick();
- // expect(reporter.reportUncaughtException).toHaveBeenCalledWith(error);
- // expect(reporter.reportUncaughtException.callCount).toBe(1);
- // expect(error.privateMetadata).toBeUndefined();
- // expect(error.privateMetadataDescription).toBeUndefined();
- // expect(error.metadata).toEqual({ foo: 'bar', baz: 'quux' });
- //
- // expect(notification.isDismissed()).toBe(true);
- // });
- //
- // it('submits the error without the private metadata if the user does not consent', () => {
- // spyOn(reporter, 'reportUncaughtException').andCallThrough();
- // reporter.reportUncaughtException(error);
- // reporter.reportUncaughtException.reset();
- //
- // notification = atom.notifications.getNotifications()[0];
- //
- // let notificationOptions = atom.notifications.addInfo.argsForCall[0][1];
- // expect(notificationOptions.buttons[0].text).toMatch(/No/);
- //
- // notificationOptions.buttons[0].onDidClick();
- // expect(reporter.reportUncaughtException).toHaveBeenCalledWith(error);
- // expect(reporter.reportUncaughtException.callCount).toBe(1);
- // expect(error.privateMetadata).toBeUndefined();
- // expect(error.privateMetadataDescription).toBeUndefined();
- // expect(error.metadata).toEqual({ foo: 'bar' });
- //
- // expect(notification.isDismissed()).toBe(true);
- // });
- //
- // it('submits the error without the private metadata if the user dismisses the notification', () => {
- // spyOn(reporter, 'reportUncaughtException').andCallThrough();
- // reporter.reportUncaughtException(error);
- // reporter.reportUncaughtException.reset();
- //
- // notification = atom.notifications.getNotifications()[0];
- // notification.dismiss();
- //
- // expect(reporter.reportUncaughtException).toHaveBeenCalledWith(error);
- // expect(reporter.reportUncaughtException.callCount).toBe(1);
- // expect(error.privateMetadata).toBeUndefined();
- // expect(error.privateMetadataDescription).toBeUndefined();
- // expect(error.metadata).toEqual({ foo: 'bar' });
- // });
- // });
- //
- // it('treats packages located in atom.packages.getPackageDirPaths as user packages', () => {
- // mockActivePackages = [
- // {
- // name: 'user-1',
- // path: '/Users/user/.atom/packages/user-1',
- // metadata: { version: '1.0.0' }
- // },
- // {
- // name: 'user-2',
- // path: '/Users/user/.atom/packages/user-2',
- // metadata: { version: '1.2.0' }
- // },
- // {
- // name: 'bundled-1',
- // path:
- // '/Applications/Atom.app/Contents/Resources/app.asar/node_modules/bundled-1',
- // metadata: { version: '1.0.0' }
- // },
- // {
- // name: 'bundled-2',
- // path:
- // '/Applications/Atom.app/Contents/Resources/app.asar/node_modules/bundled-2',
- // metadata: { version: '1.2.0' }
- // }
- // ];
- //
- // const packageDirPaths = ['/Users/user/.atom/packages'];
- //
- // spyOn(atom.packages, 'getPackageDirPaths').andReturn(packageDirPaths);
- //
- // let error = new Error();
- // Error.captureStackTrace(error);
- // reporter.reportUncaughtException(error);
- //
- // expect(error.metadata.userPackages).toEqual({
- // 'user-1': '1.0.0',
- // 'user-2': '1.2.0'
- // });
- // expect(error.metadata.bundledPackages).toEqual({
- // 'bundled-1': '1.0.0',
- // 'bundled-2': '1.2.0'
- // });
- // });
- //
- // it('adds previous error messages and assertion failures to the reported metadata', () => {
- // reporter.reportPreviousErrors = true;
- //
- // reporter.reportUncaughtException(new Error('A'));
- // reporter.reportUncaughtException(new Error('B'));
- // reporter.reportFailedAssertion(new Error('X'));
- // reporter.reportFailedAssertion(new Error('Y'));
- //
- // reporter.reportUncaughtException(new Error('C'));
- //
- // expect(requests.length).toBe(5);
- //
- // const lastRequest = requests[requests.length - 1];
- // const body = JSON.parse(lastRequest.body);
- //
- // console.log(body);
- // expect(body.events[0].metaData.previousErrors).toEqual(['A', 'B']);
- // expect(body.events[0].metaData.previousAssertionFailures).toEqual([
- // 'X',
- // 'Y'
- // ]);
- // });
- // });
- //
- // describe('.reportFailedAssertion(error)', () => {
- // it('posts warnings to bugsnag', () => {
- // process.env.HOME = path.join(__dirname, '..', '..');
- //
- // let error = new Error();
- // Error.captureStackTrace(error);
- // reporter.reportFailedAssertion(error);
- // let [lineNumber, columnNumber] = error.stack
- // .match(/.js:(\d+):(\d+)/)
- // .slice(1)
- // .map(s => parseInt(s));
- //
- // expect(requests.length).toBe(1);
- // let [request] = requests;
- // expect(request.method).toBe('POST');
- // expect(request.url).toBe('https://notify.bugsnag.com');
- // expect(request.headers.get('Content-Type')).toBe('application/json');
- // let body = JSON.parse(request.body);
- // // Delete `inProject` field because tests may fail when run as part of Pulsar Core
- // // (i.e. when this test file will be located under `node_modules/exception-reporting/spec`)
- // delete body.events[0].exceptions[0].stacktrace[0].inProject;
- //
- // expect(body).toEqual({
- // apiKey: Reporter.API_KEY,
- // notifier: {
- // name: 'Atom',
- // version: Reporter.LIB_VERSION,
- // url: 'https://www.atom.io'
- // },
- // events: [
- // {
- // payloadVersion: '2',
- // exceptions: [
- // {
- // errorClass: 'Error',
- // message: '',
- // stacktrace: [
- // {
- // method: semver.gt(process.versions.electron, '1.6.0')
- // ? 'Spec.<anonymous>'
- // : '<anonymous>',
- // file: '~/exception-reporting/spec/reporter-spec.js',
- // lineNumber: lineNumber,
- // columnNumber: columnNumber
- // }
- // ]
- // }
- // ],
- // severity: 'warning',
- // user: {},
- // app: {
- // version: atom.getVersion(),
- // releaseStage: getReleaseChannel(atom.getVersion())
- // },
- // device: {
- // osVersion: osVersion
- // }
- // }
- // ]
- // });
- // });
- //
- // describe('when the error object has `privateMetadata` and `privateMetadataDescription` fields', () => {
- // let [error, notification] = [];
- //
- // beforeEach(() => {
- // atom.notifications.clear();
- // spyOn(atom.notifications, 'addInfo').andCallThrough();
- //
- // error = new Error();
- // Error.captureStackTrace(error);
- //
- // error.metadata = { foo: 'bar' };
- // error.privateMetadata = { baz: 'quux' };
- // error.privateMetadataDescription = 'The contents of baz';
- // });
- //
- // it('posts a notification asking for consent', () => {
- // reporter.reportFailedAssertion(error);
- // expect(atom.notifications.addInfo).toHaveBeenCalled();
- // });
- //
- // it('submits the error with the private metadata if the user consents', () => {
- // spyOn(reporter, 'reportFailedAssertion').andCallThrough();
- // reporter.reportFailedAssertion(error);
- // reporter.reportFailedAssertion.reset();
- //
- // notification = atom.notifications.getNotifications()[0];
- //
- // let notificationOptions = atom.notifications.addInfo.argsForCall[0][1];
- // expect(notificationOptions.buttons[1].text).toMatch(/Yes/);
- //
- // notificationOptions.buttons[1].onDidClick();
- // expect(reporter.reportFailedAssertion).toHaveBeenCalledWith(error);
- // expect(reporter.reportFailedAssertion.callCount).toBe(1);
- // expect(error.privateMetadata).toBeUndefined();
- // expect(error.privateMetadataDescription).toBeUndefined();
- // expect(error.metadata).toEqual({ foo: 'bar', baz: 'quux' });
- //
- // expect(notification.isDismissed()).toBe(true);
- // });
- //
- // it('submits the error without the private metadata if the user does not consent', () => {
- // spyOn(reporter, 'reportFailedAssertion').andCallThrough();
- // reporter.reportFailedAssertion(error);
- // reporter.reportFailedAssertion.reset();
- //
- // notification = atom.notifications.getNotifications()[0];
- //
- // let notificationOptions = atom.notifications.addInfo.argsForCall[0][1];
- // expect(notificationOptions.buttons[0].text).toMatch(/No/);
- //
- // notificationOptions.buttons[0].onDidClick();
- // expect(reporter.reportFailedAssertion).toHaveBeenCalledWith(error);
- // expect(reporter.reportFailedAssertion.callCount).toBe(1);
- // expect(error.privateMetadata).toBeUndefined();
- // expect(error.privateMetadataDescription).toBeUndefined();
- // expect(error.metadata).toEqual({ foo: 'bar' });
- //
- // expect(notification.isDismissed()).toBe(true);
- // });
- //
- // it('submits the error without the private metadata if the user dismisses the notification', () => {
- // spyOn(reporter, 'reportFailedAssertion').andCallThrough();
- // reporter.reportFailedAssertion(error);
- // reporter.reportFailedAssertion.reset();
- //
- // notification = atom.notifications.getNotifications()[0];
- // notification.dismiss();
- //
- // expect(reporter.reportFailedAssertion).toHaveBeenCalledWith(error);
- // expect(reporter.reportFailedAssertion.callCount).toBe(1);
- // expect(error.privateMetadata).toBeUndefined();
- // expect(error.privateMetadataDescription).toBeUndefined();
- // expect(error.metadata).toEqual({ foo: 'bar' });
- // });
- //
- // it("only notifies the user once for a given 'privateMetadataRequestName'", () => {
- // let fakeStorage = {};
- // spyOn(global.localStorage, 'setItem').andCallFake(
- // (key, value) => (fakeStorage[key] = value)
- // );
- // spyOn(global.localStorage, 'getItem').andCallFake(
- // key => fakeStorage[key]
- // );
- //
- // error.privateMetadataRequestName = 'foo';
- //
- // reporter.reportFailedAssertion(error);
- // expect(atom.notifications.addInfo).toHaveBeenCalled();
- // atom.notifications.addInfo.reset();
- //
- // reporter.reportFailedAssertion(error);
- // expect(atom.notifications.addInfo).not.toHaveBeenCalled();
- //
- // let error2 = new Error();
- // Error.captureStackTrace(error2);
- // error2.privateMetadataDescription = 'Something about you';
- // error2.privateMetadata = { baz: 'quux' };
- // error2.privateMetadataRequestName = 'bar';
- //
- // reporter.reportFailedAssertion(error2);
- // expect(atom.notifications.addInfo).toHaveBeenCalled();
- // });
- // });
- //
- // it('treats packages located in atom.packages.getPackageDirPaths as user packages', () => {
- // mockActivePackages = [
- // {
- // name: 'user-1',
- // path: '/Users/user/.atom/packages/user-1',
- // metadata: { version: '1.0.0' }
- // },
- // {
- // name: 'user-2',
- // path: '/Users/user/.atom/packages/user-2',
- // metadata: { version: '1.2.0' }
- // },
- // {
- // name: 'bundled-1',
- // path:
- // '/Applications/Atom.app/Contents/Resources/app.asar/node_modules/bundled-1',
- // metadata: { version: '1.0.0' }
- // },
- // {
- // name: 'bundled-2',
- // path:
- // '/Applications/Atom.app/Contents/Resources/app.asar/node_modules/bundled-2',
- // metadata: { version: '1.2.0' }
- // }
- // ];
- //
- // const packageDirPaths = ['/Users/user/.atom/packages'];
- //
- // spyOn(atom.packages, 'getPackageDirPaths').andReturn(packageDirPaths);
- //
- // let error = new Error();
- // Error.captureStackTrace(error);
- // reporter.reportFailedAssertion(error);
- //
- // expect(error.metadata.userPackages).toEqual({
- // 'user-1': '1.0.0',
- // 'user-2': '1.2.0'
- // });
- // expect(error.metadata.bundledPackages).toEqual({
- // 'bundled-1': '1.0.0',
- // 'bundled-2': '1.2.0'
- // });
- // });
- //
- // it('adds previous error messages and assertion failures to the reported metadata', () => {
- // reporter.reportPreviousErrors = true;
- //
- // reporter.reportUncaughtException(new Error('A'));
- // reporter.reportUncaughtException(new Error('B'));
- // reporter.reportFailedAssertion(new Error('X'));
- // reporter.reportFailedAssertion(new Error('Y'));
- //
- // reporter.reportFailedAssertion(new Error('C'));
- //
- // expect(requests.length).toBe(5);
- //
- // const lastRequest = requests[requests.length - 1];
- // const body = JSON.parse(lastRequest.body);
- //
- // expect(body.events[0].metaData.previousErrors).toEqual(['A', 'B']);
- // expect(body.events[0].metaData.previousAssertionFailures).toEqual([
- // 'X',
- // 'Y'
- // ]);
- // });
- // });
- // });
|