mirror of
https://github.com/xtrll/MusicMetaFinder.git
synced 2026-04-18 00:03:28 +02:00
test(services): add tests for service layer functions
This commit is contained in:
72
test/services/saveImageToFile.test.js
Normal file
72
test/services/saveImageToFile.test.js
Normal file
@@ -0,0 +1,72 @@
|
||||
import { expect } from 'chai';
|
||||
import sinon from 'sinon';
|
||||
import esmock from 'esmock';
|
||||
import path from 'path';
|
||||
|
||||
describe('saveImageToFile', function() {
|
||||
let downloadImageStub;
|
||||
let ensureDirectoryExistsStub;
|
||||
let saveImageToFile;
|
||||
|
||||
const imageUrl = 'http://example.com/image.jpg';
|
||||
const outputDirectory = 'path/to/output';
|
||||
const savedImagePath = path.join(path.resolve(outputDirectory), path.basename(imageUrl));
|
||||
|
||||
beforeEach(async function() {
|
||||
downloadImageStub = sinon.stub().resolves(savedImagePath);
|
||||
ensureDirectoryExistsStub = sinon.stub();
|
||||
|
||||
// Mocking downloadImage and ensureDirectoryExists functions
|
||||
saveImageToFile = await esmock('../../src/services/saveImageToFile.js', {
|
||||
'../../src/utils/downloadImage.js': { default: downloadImageStub },
|
||||
'../../src/utils/ensureDirectoryExists.js': { default: ensureDirectoryExistsStub }
|
||||
});
|
||||
|
||||
saveImageToFile = saveImageToFile.default;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sinon.restore();
|
||||
esmock.purge();
|
||||
});
|
||||
|
||||
it('should save image to specified directory', async function() {
|
||||
const result = await saveImageToFile(imageUrl, outputDirectory);
|
||||
|
||||
// Ensure ensureDirectoryExists is called with the resolved output directory
|
||||
expect(ensureDirectoryExistsStub.calledOnceWithExactly(path.resolve(outputDirectory))).to.be.true;
|
||||
|
||||
// Ensure downloadImage is called with correct URL and save path
|
||||
expect(downloadImageStub.calledOnceWithExactly(imageUrl, savedImagePath)).to.be.true;
|
||||
|
||||
// Validate the return value (saved image path)
|
||||
expect(result).to.equal(savedImagePath);
|
||||
});
|
||||
|
||||
it('should throw an error if downloadImage fails', async function() {
|
||||
const error = new Error('Failed to download image');
|
||||
downloadImageStub.rejects(error);
|
||||
|
||||
try {
|
||||
await saveImageToFile(imageUrl, outputDirectory);
|
||||
expect.fail('Expected an error to be thrown');
|
||||
} catch (err) {
|
||||
// Ensure error is logged and re-thrown
|
||||
expect(err).to.equal(error);
|
||||
}
|
||||
});
|
||||
|
||||
it('should throw an error if ensureDirectoryExists fails', async function() {
|
||||
const error = new Error('Failed to ensure directory exists');
|
||||
ensureDirectoryExistsStub.throws(error);
|
||||
|
||||
try {
|
||||
await saveImageToFile(imageUrl, outputDirectory);
|
||||
expect.fail('Expected an error to be thrown');
|
||||
} catch (err) {
|
||||
// Ensure error is logged and re-thrown
|
||||
expect(err).to.equal(error);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user