@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
90 lines • 4.02 kB
JavaScript
import path from 'path';
import fs from 'fs';
import { commonTokens } from '@stryker-mutator/api/plugin';
import { factory, testInjector } from '@stryker-mutator/test-helpers';
import { expect } from 'chai';
import sinon from 'sinon';
import { fileUtils } from '../../../src/utils/file-utils.js';
import { objectUtils } from '../../../src/utils/object-utils.js';
import { TemporaryDirectory } from '../../../src/utils/temporary-directory.js';
describe(TemporaryDirectory.name, () => {
let randomStub;
let deleteDirStub;
let mkdirStub;
const tempDirName = '.stryker-tmp';
beforeEach(() => {
mkdirStub = sinon.stub(fs.promises, 'mkdir');
sinon.stub(fs.promises, 'writeFile');
deleteDirStub = sinon.stub(fileUtils, 'deleteDir');
randomStub = sinon.stub(objectUtils, 'random');
});
function createSut(options) {
return testInjector.injector
.provideValue(commonTokens.logger, factory.logger())
.provideValue(commonTokens.options, factory.strykerOptions(options))
.injectClass(TemporaryDirectory);
}
describe(TemporaryDirectory.prototype.getRandomDirectory.name, () => {
it('should return a random directory with provided prefix', () => {
const sut = createSut();
randomStub.returns(126891);
expect(sut.getRandomDirectory('stryker-prefix-')).eq(path.resolve(tempDirName, 'stryker-prefix-126891'));
});
});
describe(TemporaryDirectory.prototype.createDirectory.name, () => {
it('should create dir with correct path', async () => {
const sut = createSut();
await sut.initialize();
await sut.createDirectory('some-dir');
sinon.assert.calledTwice(mkdirStub);
sinon.assert.calledWith(mkdirStub, path.resolve(tempDirName, 'some-dir'));
});
it('should reject when temp directory is not initialized', async () => {
const sut = createSut();
await expect(sut.createDirectory('some-dir')).rejected;
});
});
describe('dispose', () => {
it('should remove the dir if cleanTempDir option is true', async () => {
const expectedPath = path.resolve(tempDirName);
deleteDirStub.resolves();
const sut = createSut({ cleanTempDir: true });
await sut.initialize();
await sut.dispose();
expect(fileUtils.deleteDir).calledWith(expectedPath);
});
it("should remove the dir if cleanTempDir option is 'always'", async () => {
const expectedPath = path.resolve(tempDirName);
deleteDirStub.resolves();
const sut = createSut({ cleanTempDir: 'always' });
await sut.initialize();
await sut.dispose();
expect(fileUtils.deleteDir).calledWith(expectedPath);
});
it('should not remove the dir if cleanTempDir option is enabled', async () => {
const sut = createSut({ cleanTempDir: false });
await sut.initialize();
await sut.dispose();
expect(fileUtils.deleteDir).not.called;
});
it('should not remove the dir if `removeDuringDisposal` is set to false', async () => {
const sut = createSut({ cleanTempDir: true });
await sut.initialize();
sut.removeDuringDisposal = false;
await sut.dispose();
expect(fileUtils.deleteDir).not.called;
});
it('should remove the dir by default', async () => {
const sut = createSut();
await sut.initialize();
deleteDirStub.resolves();
await sut.dispose();
expect(fileUtils.deleteDir).calledOnce;
});
it('should reject when temp directory is not initialized', async () => {
const sut = createSut();
await expect(sut.dispose()).rejected;
});
});
});
//# sourceMappingURL=temporary-directory.spec.js.map