From 2dd1257a698507414b6d18fa1285007c0f97775c Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Sun, 26 Feb 2023 17:46:33 +0100 Subject: [PATCH 1/4] chore(test): migrate to `node:test` Co-authored-by: Moshe Atlow --- package.json | 5 ++--- test/.eslintrc | 6 ------ test/unit/auth.test.js | 1 + test/unit/cache.test.js | 1 + test/unit/ci_failure_parser.test.js | 1 + test/unit/ci_result_parser.test.js | 1 + test/unit/ci_start.test.js | 1 + test/unit/ci_type_parser.test.js | 1 + test/unit/cli.test.js | 1 + test/unit/collaborators.test.js | 1 + test/unit/comp.test.js | 1 + test/unit/links.test.js | 1 + test/unit/metadata_gen.test.js | 1 + test/unit/pr_checker.test.js | 1 + test/unit/pr_data.test.js | 1 + test/unit/pr_summary.test.js | 1 + test/unit/prepare_release.test.js | 1 + test/unit/reviews.test.js | 1 + test/unit/team_info.test.js | 1 + 19 files changed, 19 insertions(+), 9 deletions(-) delete mode 100644 test/.eslintrc diff --git a/package.json b/package.json index 3623db68f..a7d1fa611 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ }, "scripts": { "test": "npm run test-unit && npm run lint", - "test-unit": "mocha --timeout 60000 test/unit/*.test.js --exit", - "test-all": "mocha --timeout 60000 test/**/*.test.js --exit", + "test-unit": "node --test test/unit", + "test-all": "node --test", "coverage": "c8 --reporter=html --reporter=text --reporter=text-summary npm test", "coverage-all": "c8 --reporter=lcov --reporter=text --reporter=text-summary npm run test-all", "lint": "eslint . --cache", @@ -61,7 +61,6 @@ "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^15.6.1", "eslint-plugin-promise": "^6.1.1", - "mocha": "^10.2.0", "sinon": "^15.0.1" } } diff --git a/test/.eslintrc b/test/.eslintrc deleted file mode 100644 index 8a30ebae0..000000000 --- a/test/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "env": { - "node": true, - "mocha": true - } -} diff --git a/test/unit/auth.test.js b/test/unit/auth.test.js index 6e13b9dc1..63b387113 100644 --- a/test/unit/auth.test.js +++ b/test/unit/auth.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import { spawn } from 'node:child_process'; import path from 'node:path'; import fs from 'node:fs'; diff --git a/test/unit/cache.test.js b/test/unit/cache.test.js index 4461b6516..4b5182069 100644 --- a/test/unit/cache.test.js +++ b/test/unit/cache.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import path from 'node:path'; import fs from 'node:fs'; import assert from 'node:assert'; diff --git a/test/unit/ci_failure_parser.test.js b/test/unit/ci_failure_parser.test.js index 7ad63233e..3db73546e 100644 --- a/test/unit/ci_failure_parser.test.js +++ b/test/unit/ci_failure_parser.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import CIFailureParser from '../../lib/ci/ci_failure_parser.js'; diff --git a/test/unit/ci_result_parser.test.js b/test/unit/ci_result_parser.test.js index 20489c512..2450bcc5c 100644 --- a/test/unit/ci_result_parser.test.js +++ b/test/unit/ci_result_parser.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import { fileURLToPath } from 'node:url'; import path from 'node:path'; diff --git a/test/unit/ci_start.test.js b/test/unit/ci_start.test.js index 65154f5ac..4c8eea9fa 100644 --- a/test/unit/ci_start.test.js +++ b/test/unit/ci_start.test.js @@ -1,3 +1,4 @@ +import { describe, it, before } from 'node:test'; import assert from 'assert'; import sinon from 'sinon'; diff --git a/test/unit/ci_type_parser.test.js b/test/unit/ci_type_parser.test.js index 50c28c53c..89eaceb23 100644 --- a/test/unit/ci_type_parser.test.js +++ b/test/unit/ci_type_parser.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import { diff --git a/test/unit/cli.test.js b/test/unit/cli.test.js index cdbb0cfef..6125ab6fc 100644 --- a/test/unit/cli.test.js +++ b/test/unit/cli.test.js @@ -1,3 +1,4 @@ +import { describe, it, beforeEach, afterEach } from 'node:test'; import assert from 'node:assert'; import CLI from '../../lib/cli.js'; diff --git a/test/unit/collaborators.test.js b/test/unit/collaborators.test.js index 754efe7fc..89baff89c 100644 --- a/test/unit/collaborators.test.js +++ b/test/unit/collaborators.test.js @@ -1,3 +1,4 @@ +import { describe, it, beforeEach } from 'node:test'; import { fileURLToPath } from 'node:url'; import assert from 'node:assert'; diff --git a/test/unit/comp.test.js b/test/unit/comp.test.js index cef5373cd..5469560f1 100644 --- a/test/unit/comp.test.js +++ b/test/unit/comp.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import { ascending, descending } from '../../lib/utils.js'; diff --git a/test/unit/links.test.js b/test/unit/links.test.js index 71d582af8..d3b064b6b 100644 --- a/test/unit/links.test.js +++ b/test/unit/links.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import { LinkParser, parsePRFromURL } from '../../lib/links.js'; diff --git a/test/unit/metadata_gen.test.js b/test/unit/metadata_gen.test.js index 790db37f3..8eda702df 100644 --- a/test/unit/metadata_gen.test.js +++ b/test/unit/metadata_gen.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import MetadataGenerator from '../../lib/metadata_gen.js'; diff --git a/test/unit/pr_checker.test.js b/test/unit/pr_checker.test.js index 441200e50..b577a1aa7 100644 --- a/test/unit/pr_checker.test.js +++ b/test/unit/pr_checker.test.js @@ -1,3 +1,4 @@ +import { describe, it, before, after, afterEach } from 'node:test'; import assert from 'node:assert'; import sinon from 'sinon'; diff --git a/test/unit/pr_data.test.js b/test/unit/pr_data.test.js index 638dffe58..f2468e0d6 100644 --- a/test/unit/pr_data.test.js +++ b/test/unit/pr_data.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import sinon from 'sinon'; diff --git a/test/unit/pr_summary.test.js b/test/unit/pr_summary.test.js index 6d846f2ef..cb1f760cd 100644 --- a/test/unit/pr_summary.test.js +++ b/test/unit/pr_summary.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import PRSummary from '../../lib/pr_summary.js'; import { diff --git a/test/unit/prepare_release.test.js b/test/unit/prepare_release.test.js index 950c1aa76..318802f68 100644 --- a/test/unit/prepare_release.test.js +++ b/test/unit/prepare_release.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import { readFileSync } from 'node:fs'; diff --git a/test/unit/reviews.test.js b/test/unit/reviews.test.js index f72c66866..1295a0633 100644 --- a/test/unit/reviews.test.js +++ b/test/unit/reviews.test.js @@ -1,3 +1,4 @@ +import { describe, it } from 'node:test'; import assert from 'node:assert'; import { ReviewAnalyzer } from '../../lib/reviews.js'; diff --git a/test/unit/team_info.test.js b/test/unit/team_info.test.js index b9b34bf0c..5ba5b1fe0 100644 --- a/test/unit/team_info.test.js +++ b/test/unit/team_info.test.js @@ -1,3 +1,4 @@ +import { describe, it, before, after } from 'node:test'; import assert from 'node:assert'; import sinon from 'sinon'; From f12d06bb03ae35604d5cc36ac7ab9a7bec01856e Mon Sep 17 00:00:00 2001 From: Moshe Atlow Date: Wed, 15 Mar 2023 21:52:54 +0200 Subject: [PATCH 2/4] fixes --- test/unit/auth.test.js | 12 ------------ test/unit/cli.test.js | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/test/unit/auth.test.js b/test/unit/auth.test.js index 63b387113..3bc7d9488 100644 --- a/test/unit/auth.test.js +++ b/test/unit/auth.test.js @@ -19,7 +19,6 @@ const MOCKED_TOKEN = JSON.stringify({ describe('auth', async function() { it('asks for auth data if no ncurc is found', async function() { - this.timeout(2000); await runAuthScript( undefined, [FIRST_TIME_MSG, MOCKED_TOKEN] @@ -27,7 +26,6 @@ describe('auth', async function() { }); it('asks for auth data if ncurc is invalid json', async function() { - this.timeout(2000); await runAuthScript( { HOME: 'this is not json' }, [FIRST_TIME_MSG, MOCKED_TOKEN] @@ -35,7 +33,6 @@ describe('auth', async function() { }); it('returns ncurc data if valid in HOME', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: 'nyancat', token: '0123456789abcdef' } }, [MOCKED_TOKEN] @@ -43,7 +40,6 @@ describe('auth', async function() { }); it('returns ncurc data if valid in XDG_CONFIG_HOME', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: 'nyancat', token: '0123456789abcdef' } }, [MOCKED_TOKEN] @@ -51,7 +47,6 @@ describe('auth', async function() { }); it('prefers XDG_CONFIG_HOME/ncurc to HOME/.ncurc', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: 'notnyancat', token: 'somewrongtoken' }, @@ -62,7 +57,6 @@ describe('auth', async function() { }); it("prints an error message if it can't generate a token", async function() { - this.timeout(2000); await runAuthScript( {}, [FIRST_TIME_MSG], @@ -71,7 +65,6 @@ describe('auth', async function() { }); it('does not accept a non-string username', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: {}, token: '0123456789abcdef' } }, [], @@ -80,7 +73,6 @@ describe('auth', async function() { }); it('does not accept a non-string token', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: 'nyancat', token: 42 } }, [], @@ -89,7 +81,6 @@ describe('auth', async function() { }); it('does not accept an invalid username format', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: ' ^^^ ', token: '0123456789abcdef' } }, [], @@ -99,7 +90,6 @@ describe('auth', async function() { }); it('does not accept an invalid token format', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: 'nyancat', token: '@fhqwhgads' } }, [], @@ -108,7 +98,6 @@ describe('auth', async function() { }); it('permits capital letters in token format', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: 'nyancat', token: '0123456789ABCDEF' } }, ['{"github":"bnlhbmNhdDowMTIzNDU2Nzg5QUJDREVG"}'] @@ -116,7 +105,6 @@ describe('auth', async function() { }); it('permits underscores in token format', async function() { - this.timeout(2000); await runAuthScript( { HOME: { username: 'nyancat', token: 'ghp_0123456789ABCDEF' } }, ['{"github":"bnlhbmNhdDpnaHBfMDEyMzQ1Njc4OUFCQ0RFRg=="}'] diff --git a/test/unit/cli.test.js b/test/unit/cli.test.js index 6125ab6fc..fc13ec7df 100644 --- a/test/unit/cli.test.js +++ b/test/unit/cli.test.js @@ -41,6 +41,8 @@ describe('cli', () => { describe('spinners', () => { beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); cli.startSpinner('foo'); }); @@ -59,13 +61,23 @@ describe('cli', () => { }); describe('write', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should write in stream', () => { + const stream = new LogStream(); + const cli = new CLI(stream); cli.write('Getting commits...'); - assert.strictEqual(logResult(), 'Getting commits...'); + assert.strictEqual(strip(stream.toString()), 'Getting commits...'); }); }); describe('log', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should write in stream', () => { cli.log('Getting commits...'); assert.strictEqual(logResult(), 'Getting commits...\n'); @@ -73,6 +85,10 @@ describe('cli', () => { }); describe('table', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should print the first element with bold style and padding', () => { cli.table('Title', 'description'); assert.strictEqual(logResult(), @@ -81,6 +97,10 @@ describe('cli', () => { }); describe('separator', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should print a separator line with the specified text', () => { cli.separator('Separator'); assert.strictEqual( @@ -106,6 +126,10 @@ describe('cli', () => { }); describe('ok', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should print a success message', () => { cli.ok('Perfect!'); assert.strictEqual(logResult(), ` ${success} Perfect!\n`); @@ -119,6 +143,10 @@ describe('cli', () => { }); describe('warn', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should print a warning message', () => { cli.warn('Warning!'); assert.strictEqual(logResult(), ` ${warning} Warning!\n`); @@ -132,6 +160,10 @@ describe('cli', () => { }); describe('info', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should print an info message', () => { cli.info('Info!'); assert.strictEqual(logResult(), ` ${info} Info!\n`); @@ -144,6 +176,10 @@ describe('cli', () => { }); describe('error', () => { + beforeEach(() => { + stream = new LogStream(); + cli = new CLI(stream); + }); it('should print an error message', () => { cli.error('Error!'); assert.strictEqual(logResult(), ` ${error} Error!\n`); @@ -184,6 +220,7 @@ describe('cli', () => { questionType: cli.QUESTION_TYPE.INPUT }); assert.strictEqual(cli.spinner.isSpinning, true); + cli.stopSpinner('foo'); }); }); From c739e6f6dd73d51cc7bf4bf9676b3691b7388299 Mon Sep 17 00:00:00 2001 From: Moshe Atlow Date: Wed, 15 Mar 2023 22:13:01 +0200 Subject: [PATCH 3/4] dont run coverage on node 16 --- .github/workflows/nodejs.yml | 6 +++++- package.json | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 65959c9b6..68aa264a6 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -38,6 +38,10 @@ jobs: - name: Install dependencies run: npm install - name: Run tests - run: npm run coverage-all + if: matrix.node-version == '16.x' + run: npm run test-unit + - name: Run tests + if: matrix.node-version != '16.x' + run: npm run coverage:ci - name: Upload coverage report to Codecov uses: codecov/codecov-action@v3 diff --git a/package.json b/package.json index a7d1fa611..51f5b9a5a 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,9 @@ "scripts": { "test": "npm run test-unit && npm run lint", "test-unit": "node --test test/unit", - "test-all": "node --test", + "test:reporters": "node --test --test-reporter=spec --test-reporter-destination=stdout --test-reporter=@reporters/github --test-reporter-destination=stdout test/unit", "coverage": "c8 --reporter=html --reporter=text --reporter=text-summary npm test", - "coverage-all": "c8 --reporter=lcov --reporter=text --reporter=text-summary npm run test-all", + "coverage:ci": "c8 --reporter=lcov --reporter=text --reporter=text-summary npm run test:reporters", "lint": "eslint . --cache", "lint-fix": "eslint . --fix" }, @@ -55,6 +55,7 @@ "yargs": "^17.7.1" }, "devDependencies": { + "@reporters/github": "^1.1.2", "c8": "^7.13.0", "eslint": "^8.35.0", "eslint-config-standard": "^17.0.0", From b6e8de852e4c584d7011f5f856f42ed32ee4a66a Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Wed, 15 Mar 2023 21:46:01 +0100 Subject: [PATCH 4/4] Update nodejs.yml --- .github/workflows/nodejs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 68aa264a6..79e3fa3e3 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -35,6 +35,7 @@ jobs: uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} + check-latest: true - name: Install dependencies run: npm install - name: Run tests