diff --git a/.eslintrc b/.eslintrc index b676b19..67846ac 100644 --- a/.eslintrc +++ b/.eslintrc @@ -19,6 +19,7 @@ "es6": true, "jest": true }, + "ignorePatterns": ["__tests__/**/*"], "rules": { "valid-jsdoc": ["error", { "requireReturn": false }], "consistent-return": 0, diff --git a/__tests__/report-portal-client.spec.js b/__tests__/report-portal-client.spec.js index b715aef..e0ced6e 100644 --- a/__tests__/report-portal-client.spec.js +++ b/__tests__/report-portal-client.spec.js @@ -876,6 +876,108 @@ describe('ReportPortal javascript client', () => { }); }); + it('should automatically add NOT_ISSUE when status is SKIPPED and skippedIsNotIssue is true', function (done) { + const mockClient = new RPClient( + { + apiKey: 'test', + endpoint: 'https://reportportal-stub-url', + launch: 'test launch', + project: 'test project', + skippedIsNotIssue: true, + }, + { name: 'test', version: '1.0.0' }, + ); + + const spyFinishTestItemPromiseStart = jest + .spyOn(mockClient, 'finishTestItemPromiseStart') + .mockImplementation(() => {}); + + mockClient.map = { + testItemId: { + children: [], + finishSend: false, + promiseFinish: Promise.resolve(), + resolveFinish: () => {}, + }, + }; + + const finishTestItemRQ = { + status: 'skipped', + }; + + mockClient.finishTestItem('testItemId', finishTestItemRQ); + + setTimeout(() => { + try { + expect(spyFinishTestItemPromiseStart).toHaveBeenCalledWith( + expect.any(Object), + 'testItemId', + expect.objectContaining({ + status: 'skipped', + issue: { issueType: 'NOT_ISSUE' }, + }), + ); + done(); + } catch (error) { + done(error); + } + }, 50); + }); + + it('should not add NOT_ISSUE when status is SKIPPED and skippedIsNotIssue is false', function (done) { + const mockClient = new RPClient( + { + apiKey: 'test', + endpoint: 'https://reportportal-stub-url', + launch: 'test launch', + project: 'test project', + skippedIsNotIssue: false, + }, + { name: 'test', version: '1.0.0' }, + ); + + const spyFinishTestItemPromiseStart = jest + .spyOn(mockClient, 'finishTestItemPromiseStart') + .mockImplementation(() => {}); + + mockClient.map = { + testItemId: { + children: [], + finishSend: false, + promiseFinish: Promise.resolve(), + resolveFinish: () => {}, + }, + }; + + const finishTestItemRQ = { + status: 'skipped', + }; + + mockClient.finishTestItem('testItemId', finishTestItemRQ); + + setTimeout(() => { + try { + expect(spyFinishTestItemPromiseStart).toHaveBeenCalledWith( + expect.any(Object), + 'testItemId', + expect.objectContaining({ + status: 'skipped', + }), + ); + expect(spyFinishTestItemPromiseStart).not.toHaveBeenCalledWith( + expect.any(Object), + 'testItemId', + expect.objectContaining({ + issue: expect.anything(), + }), + ); + done(); + } catch (error) { + done(error); + } + }, 100); + }); + describe('saveLog', () => { it('should return object with tempId and promise', () => { const client = new RPClient({ apiKey: 'any', endpoint: 'https://rp.api', project: 'prj' }); diff --git a/index.d.ts b/index.d.ts index 5a40901..8c7e993 100644 --- a/index.d.ts +++ b/index.d.ts @@ -155,6 +155,7 @@ declare module '@reportportal/client-javascript' { launchUuidPrintOutput?: string; restClientConfig?: RestClientConfig; token?: string; + skippedIsNotIssue?: boolean; /** * OAuth 2.0 configuration object. When provided, OAuth authentication will be used instead of API key. */ diff --git a/lib/commons/config.js b/lib/commons/config.js index 1fdd042..0700b92 100644 --- a/lib/commons/config.js +++ b/lib/commons/config.js @@ -115,6 +115,7 @@ const getClientConfig = (options) => { description: options.description, launchUuidPrint: options.launchUuidPrint, launchUuidPrintOutput, + skippedIsNotIssue: !!options.skippedIsNotIssue, }; } catch (error) { // don't throw the error up to not break the entire process diff --git a/lib/report-portal-client.js b/lib/report-portal-client.js index 9869cf4..fcb4b57 100644 --- a/lib/report-portal-client.js +++ b/lib/report-portal-client.js @@ -201,6 +201,14 @@ class RPClient { this.launchUuid = launchDataRQ.id; } else { const systemAttr = helpers.getSystemAttribute(); + if (this.config.skippedIsNotIssue === true) { + const skippedIsNotIssueAttribute = { + key: 'skippedIssue', + value: 'false', + system: true, + }; + systemAttr.push(skippedIsNotIssueAttribute); + } const attributes = Array.isArray(launchDataRQ.attributes) ? launchDataRQ.attributes.concat(systemAttr) : systemAttr; @@ -611,6 +619,13 @@ class RPClient { ...finishTestItemRQ, }; + if ( + finishTestItemData.status === RP_STATUSES.SKIPPED && + this.config.skippedIsNotIssue === true + ) { + finishTestItemData.issue = { issueType: 'NOT_ISSUE' }; + } + itemObj.finishSend = true; this.logDebug(`Finish all children for test item with tempId ${itemTempId}`); Promise.allSettled( diff --git a/package.json b/package.json index 66feaaa..a83c719 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "build": "npm run clean && tsc", "clean": "rimraf ./build", - "lint": "eslint ./statistics/**/* ./lib/**/* ./__tests__/**/*", + "lint": "eslint ./statistics/**/* ./lib/**/*", "format": "npm run lint -- --fix", "test": "jest", "test:coverage": "jest --coverage"