3e9bb4ad31
There is nothing more to say but "Commits that change 30 or more lines across at least three files must describe these changes in the commit body"
120 lines
3.3 KiB
JavaScript
120 lines
3.3 KiB
JavaScript
/* eslint-disable no-new, promise/catch-or-return */
|
|
import JSZip from 'jszip';
|
|
import SketchLoader from '~/blob/sketch';
|
|
|
|
describe('Sketch viewer', () => {
|
|
const generateZipFileArrayBuffer = (zipFile, resolve, done) => {
|
|
zipFile.generateAsync({ type: 'arrayBuffer' }).then(content => {
|
|
resolve(content);
|
|
|
|
setTimeout(() => {
|
|
done();
|
|
}, 100);
|
|
});
|
|
};
|
|
|
|
preloadFixtures('static/sketch_viewer.html');
|
|
|
|
beforeEach(() => {
|
|
loadFixtures('static/sketch_viewer.html');
|
|
});
|
|
|
|
describe('with error message', () => {
|
|
beforeEach(done => {
|
|
spyOn(SketchLoader.prototype, 'getZipFile').and.callFake(
|
|
() =>
|
|
new Promise((resolve, reject) => {
|
|
reject();
|
|
|
|
setTimeout(() => {
|
|
done();
|
|
});
|
|
}),
|
|
);
|
|
|
|
new SketchLoader(document.getElementById('js-sketch-viewer'));
|
|
});
|
|
|
|
it('renders error message', () => {
|
|
expect(document.querySelector('#js-sketch-viewer p')).not.toBeNull();
|
|
|
|
expect(document.querySelector('#js-sketch-viewer p').textContent.trim()).toContain(
|
|
'Cannot show preview.',
|
|
);
|
|
});
|
|
|
|
it('removes render the loading icon', () => {
|
|
expect(document.querySelector('.js-loading-icon')).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe('success', () => {
|
|
beforeEach(done => {
|
|
spyOn(SketchLoader.prototype, 'getZipFile').and.callFake(
|
|
() =>
|
|
new Promise(resolve => {
|
|
const zipFile = new JSZip();
|
|
zipFile
|
|
.folder('previews')
|
|
.file(
|
|
'preview.png',
|
|
'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAMAAAAoyzS7AAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAA1JREFUeNoBAgD9/wAAAAIAAVMrnDAAAAAASUVORK5CYII=',
|
|
{
|
|
base64: true,
|
|
},
|
|
);
|
|
|
|
generateZipFileArrayBuffer(zipFile, resolve, done);
|
|
}),
|
|
);
|
|
|
|
new SketchLoader(document.getElementById('js-sketch-viewer'));
|
|
});
|
|
|
|
it('does not render error message', () => {
|
|
expect(document.querySelector('#js-sketch-viewer p')).toBeNull();
|
|
});
|
|
|
|
it('removes render the loading icon', () => {
|
|
expect(document.querySelector('.js-loading-icon')).toBeNull();
|
|
});
|
|
|
|
it('renders preview img', () => {
|
|
const img = document.querySelector('#js-sketch-viewer img');
|
|
|
|
expect(img).not.toBeNull();
|
|
expect(img.classList.contains('img-fluid')).toBeTruthy();
|
|
});
|
|
|
|
it('renders link to image', () => {
|
|
const img = document.querySelector('#js-sketch-viewer img');
|
|
const link = document.querySelector('#js-sketch-viewer a');
|
|
|
|
expect(link.href).toBe(img.src);
|
|
expect(link.target).toBe('_blank');
|
|
});
|
|
});
|
|
|
|
describe('incorrect file', () => {
|
|
beforeEach(done => {
|
|
spyOn(SketchLoader.prototype, 'getZipFile').and.callFake(
|
|
() =>
|
|
new Promise(resolve => {
|
|
const zipFile = new JSZip();
|
|
|
|
generateZipFileArrayBuffer(zipFile, resolve, done);
|
|
}),
|
|
);
|
|
|
|
new SketchLoader(document.getElementById('js-sketch-viewer'));
|
|
});
|
|
|
|
it('renders error message', () => {
|
|
expect(document.querySelector('#js-sketch-viewer p')).not.toBeNull();
|
|
|
|
expect(document.querySelector('#js-sketch-viewer p').textContent.trim()).toContain(
|
|
'Cannot show preview.',
|
|
);
|
|
});
|
|
});
|
|
});
|