Skip to content

Commit de4ea53

Browse files
committed
feat(remove): remove the mocha setup file when removing mocha from a project
1 parent 98eda5e commit de4ea53

File tree

8 files changed

+80
-2
lines changed

8 files changed

+80
-2
lines changed

src/remover-test.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import * as td from 'testdouble';
44
import any from '@travi/any';
55

66
suite('mocha remover', () => {
7-
let remove, canaryExists, removeCanary, configExists, removeConfig;
7+
let remove, canaryExists, removeCanary, configExists, removeConfig, setupExists, removeSetup;
88
const projectRoot = any.string();
99

1010
setup(async () => {
1111
({remove: removeCanary, test: canaryExists} = await td.replaceEsm('./canary/index.js'));
1212
({remove: removeConfig, test: configExists} = await td.replaceEsm('./configuration/index.js'));
13+
({remove: removeSetup, test: setupExists} = await td.replaceEsm('./setup/index.js'));
1314

1415
({default: remove} = (await import('./remover.js')));
1516
});
@@ -19,11 +20,13 @@ suite('mocha remover', () => {
1920
test('that mocha details are removed from the project', async () => {
2021
td.when(canaryExists({projectRoot})).thenResolve(true);
2122
td.when(configExists({projectRoot})).thenResolve(true);
23+
td.when(setupExists({projectRoot})).thenResolve(true);
2224

2325
const {dependencies} = await remove({projectRoot});
2426

2527
td.verify(removeCanary({projectRoot}));
2628
td.verify(removeConfig({projectRoot}));
29+
td.verify(removeSetup({projectRoot}));
2730
assert.deepEqual(dependencies.javascript.remove, ['mocha', 'chai', 'sinon']);
2831
});
2932

@@ -42,4 +45,12 @@ suite('mocha remover', () => {
4245

4346
td.verify(removeConfig({projectRoot}), {times: 0});
4447
});
48+
49+
test('that removing the setup file is not attempted if it does not exist', async () => {
50+
td.when(setupExists({projectRoot})).thenResolve(false);
51+
52+
await remove({projectRoot});
53+
54+
td.verify(removeSetup({projectRoot}), {times: 0});
55+
});
4556
});

src/remover.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {test as canaryExists, remove as removeCanary} from './canary/index.js';
22
import {test as configExists, remove as removeConfig} from './configuration/index.js';
3+
import {test as setupExists, remove as removeSetup} from './setup/index.js';
34

45
export default async function ({projectRoot}) {
56
if (await canaryExists({projectRoot})) {
@@ -10,5 +11,9 @@ export default async function ({projectRoot}) {
1011
await removeConfig({projectRoot});
1112
}
1213

14+
if (await setupExists({projectRoot})) {
15+
await removeSetup({projectRoot});
16+
}
17+
1318
return {dependencies: {javascript: {remove: ['mocha', 'chai', 'sinon']}}};
1419
}

src/setup/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export {default as remove} from './remover.js';
2+
export {default as test} from './tester.js';

src/setup/remover-test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import * as td from 'testdouble';
2+
import any from '@travi/any';
3+
4+
suite('mocha setup remover', () => {
5+
let remove, fs;
6+
7+
setup(async () => {
8+
fs = await td.replaceEsm('node:fs');
9+
10+
({default: remove} = (await import('./remover.js')));
11+
});
12+
13+
teardown(() => td.reset());
14+
15+
test('that the canary test is removed', async () => {
16+
const projectRoot = any.simpleObject();
17+
18+
await remove({projectRoot});
19+
20+
td.verify(fs.promises.unlink(`${projectRoot}/test/mocha-setup.js`));
21+
});
22+
});

src/setup/remover.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import {promises as fs} from 'node:fs';
2+
3+
export default async function ({projectRoot}) {
4+
await fs.unlink(`${projectRoot}/test/mocha-setup.js`);
5+
}

src/setup/tester-test.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import * as td from 'testdouble';
2+
import {assert} from 'chai';
3+
import any from '@travi/any';
4+
5+
suite('canary predicate', () => {
6+
let canaryExists, core;
7+
const projectRoot = any.string();
8+
9+
setup(async () => {
10+
core = await td.replaceEsm('@form8ion/core');
11+
12+
({default: canaryExists} = (await import('./tester.js')));
13+
});
14+
15+
teardown(() => td.reset());
16+
17+
test('that `false` is returned if the canary test does not exist', async () => {
18+
td.when(core.fileExists(`${projectRoot}/test/mocha-setup.js`)).thenResolve(false);
19+
20+
assert.isFalse(await canaryExists({projectRoot}));
21+
});
22+
23+
test('that `true` is returned if the canary test does not exist', async () => {
24+
td.when(core.fileExists(`${projectRoot}/test/mocha-setup.js`)).thenResolve(true);
25+
26+
assert.isTrue(await canaryExists({projectRoot}));
27+
});
28+
});

src/setup/tester.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import {fileExists} from '@form8ion/core';
2+
3+
export default function ({projectRoot}) {
4+
return fileExists(`${projectRoot}/test/mocha-setup.js`);
5+
}

test/integration/features/step_definitions/configuration-steps.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ Then('the testing framework is configured', async function () {
2121

2222
Then('configuration files are removed', async function () {
2323
assert.isFalse(await fileExists(`${this.projectRoot}/.mocharc.json`));
24-
// assert.isFalse(await fileExists(`${this.projectRoot}/test/mocha-setup.js`));
24+
assert.isFalse(await fileExists(`${this.projectRoot}/test/mocha-setup.js`));
2525
});

0 commit comments

Comments
 (0)