test(utils): add tests for utility functions in utils folder

This commit is contained in:
xtrullor73
2024-07-04 11:30:56 -07:00
parent 068e53857f
commit 441d89cca4
9 changed files with 499 additions and 2 deletions

View File

@@ -0,0 +1,78 @@
import { expect } from 'chai'
import sinon from 'sinon';
import fs from 'fs/promises';
import path from "path";
import deleteDirectoryRecursively from "../../src/utils/deleteDirectoryRecursively.js";
describe('DeleteDirectoryRecursively', () => {
let readdirStub, unlinkStub, rmdirStub;
beforeEach(() => {
readdirStub = sinon.stub(fs, 'readdir');
unlinkStub = sinon.stub(fs, 'unlink');
rmdirStub = sinon.stub(fs, 'rmdir');
});
afterEach(() => {
readdirStub.restore();
unlinkStub.restore();
rmdirStub.restore();
});
it('should delete an empty directory', async () => {
const dirPath = 'testDir';
readdirStub.withArgs(dirPath).resolves([]);
rmdirStub.withArgs(dirPath).resolves();
await deleteDirectoryRecursively(dirPath);
expect(readdirStub.calledOnce).to.be.true;
expect(rmdirStub.calledOnceWith(dirPath)).to.be.true;
});
it('should delete a directory with files', async () => {
const dirPath = 'dir';
const filePath = path.join(dirPath, 'file.txt');
readdirStub.withArgs(dirPath).resolves([{ name: 'file.txt', isDirectory: () => false }]);
unlinkStub.withArgs(filePath).resolves();
rmdirStub.withArgs(dirPath).resolves();
await deleteDirectoryRecursively(dirPath);
expect(readdirStub.calledOnce).to.be.true;
expect(unlinkStub.calledOnceWith(filePath)).to.be.true;
expect(rmdirStub.calledOnceWith(dirPath)).to.be.true;
});
it('should delete a nested directory with files', async () => {
const dirPath = 'dir';
const nestedDirPath = path.join(dirPath, 'nestedDir');
const filePath = path.join(dirPath, 'file.txt');
const nestedFilePath = path.join(nestedDirPath, 'nestedFile.txt');
readdirStub.withArgs(dirPath).resolves([
{ name: 'file.txt', isDirectory: () => false },
{ name: 'nestedDir', isDirectory: () => true },
]);
readdirStub.withArgs(nestedDirPath).resolves([
{ name: 'nestedFile.txt', isDirectory: () => false },
]);
unlinkStub.withArgs(filePath).resolves();
unlinkStub.withArgs(nestedFilePath).resolves();
rmdirStub.withArgs(dirPath).resolves();
rmdirStub.withArgs(nestedDirPath).resolves();
await deleteDirectoryRecursively(dirPath);
expect(readdirStub.calledTwice).to.be.true;
expect(unlinkStub.calledTwice).to.be.true;
expect(unlinkStub.calledWith(filePath)).to.be.true;
expect(unlinkStub.calledWith(nestedFilePath)).to.be.true;
expect(rmdirStub.calledWith(nestedDirPath)).to.be.true;
expect(rmdirStub.calledWith(dirPath)).to.be.true;
});
})