mirror of
https://github.com/xtrll/MusicMetaFinder.git
synced 2026-04-18 02:54:19 +02:00
test(utils): add tests for utility functions in utils folder
This commit is contained in:
92
test/utils/renameAudioFileTitle.test.js
Normal file
92
test/utils/renameAudioFileTitle.test.js
Normal file
@@ -0,0 +1,92 @@
|
||||
import path from 'path';
|
||||
import { expect } from 'chai';
|
||||
import sinon from 'sinon';
|
||||
import esmock from 'esmock';
|
||||
|
||||
// Utility function to normalize paths to use forward slashes
|
||||
function normalizeToForwardSlash(p) {
|
||||
return p.split(path.sep).join('/');
|
||||
}
|
||||
|
||||
describe('renameFile', () => {
|
||||
let renameFile, fsStub, generateUniqueFilenameStub;
|
||||
|
||||
beforeEach(async () => {
|
||||
fsStub = {
|
||||
rename: sinon.stub()
|
||||
};
|
||||
|
||||
generateUniqueFilenameStub = sinon.stub();
|
||||
|
||||
renameFile = await esmock('../../src/utils/renameAudioFileTitle.js', {
|
||||
'fs/promises': fsStub,
|
||||
'../../src/utils/generateUniqueFilename.js': generateUniqueFilenameStub
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
esmock.purge(renameFile);
|
||||
sinon.restore();
|
||||
});
|
||||
|
||||
it('should rename a file successfully with valid artist, title, and filePath', async () => {
|
||||
const artist = 'Artist';
|
||||
const title = 'Title';
|
||||
const filePath = normalizeToForwardSlash('/path/to/file.mp3');
|
||||
const newFilePath = normalizeToForwardSlash('/path/to/Artist - Title.mp3');
|
||||
|
||||
generateUniqueFilenameStub.resolves(newFilePath);
|
||||
fsStub.rename.resolves();
|
||||
|
||||
const result = await renameFile(artist, title, filePath);
|
||||
|
||||
console.log('Arguments passed to generateUniqueFilename:', generateUniqueFilenameStub.args);
|
||||
console.log('Arguments expected for generateUniqueFilename:', [normalizeToForwardSlash('/path/to'), normalizeToForwardSlash('Artist - Title.mp3')]);
|
||||
|
||||
expect(result).to.equal(normalizeToForwardSlash(newFilePath));
|
||||
expect(generateUniqueFilenameStub.calledWith(normalizeToForwardSlash('/path/to'), 'Artist - Title.mp3')).to.be.true;
|
||||
expect(fsStub.rename.calledWith(normalizeToForwardSlash(filePath), normalizeToForwardSlash(newFilePath))).to.be.true;
|
||||
});
|
||||
|
||||
it('should throw an error if filePath, artist, or title are not provided', async () => {
|
||||
try {
|
||||
await renameFile('', 'Title', normalizeToForwardSlash('/path/to/file.mp3'));
|
||||
throw new Error('Test failed - expected error not thrown');
|
||||
} catch (error) {
|
||||
expect(error.message).to.equal('File path, artist, and title must be provided when renaming file.');
|
||||
}
|
||||
|
||||
try {
|
||||
await renameFile('Artist', '', normalizeToForwardSlash('/path/to/file.mp3'));
|
||||
throw new Error('Test failed - expected error not thrown');
|
||||
} catch (error) {
|
||||
expect(error.message).to.equal('File path, artist, and title must be provided when renaming file.');
|
||||
}
|
||||
|
||||
try {
|
||||
await renameFile('Artist', 'Title', '');
|
||||
throw new Error('Test failed - expected error not thrown');
|
||||
} catch (error) {
|
||||
expect(error.message).to.equal('File path, artist, and title must be provided when renaming file.');
|
||||
}
|
||||
});
|
||||
|
||||
it('should throw an error if the file rename operation fails', async () => {
|
||||
const artist = 'Artist';
|
||||
const title = 'Title';
|
||||
const filePath = normalizeToForwardSlash('/path/to/file.mp3');
|
||||
const newFilePath = normalizeToForwardSlash('/path/to/Artist - Title.mp3');
|
||||
const renameError = new Error('Rename failed');
|
||||
|
||||
generateUniqueFilenameStub.resolves(newFilePath);
|
||||
fsStub.rename.rejects(renameError);
|
||||
|
||||
try {
|
||||
await renameFile(artist, title, filePath);
|
||||
throw new Error('Test failed - expected error not thrown');
|
||||
} catch (error) {
|
||||
expect(error).to.equal(renameError);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user