Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/ui/uploader/core/test/ |
Upload File : |
import Uploader from '../src/uploader'; import createFileByType from './utils/create-file-by-type.es6'; import CustomUploadController from './utils/custom-upload-controller.es6'; import { UploaderEvent } from '../src/enums/uploader-event'; import type { BaseEvent } from 'main.core.events'; import { FileOrigin, FileStatus, UploaderError } from 'ui.uploader.core'; import UploaderFile from '../src/uploader-file'; import CustomLoadController from './utils/custom-load-controller.es6'; describe('Uploader File Events', () => { it('should emit File:onBeforeAdd', (done) => { const handleBeforeAdd = sinon.stub().callsFake((event: BaseEvent) => { const file: UploaderFile = event.getData().file; if (file.getType() === 'image/tiff') { event.preventDefault(); } assert.equal(file.getStatus(), FileStatus.INIT); }); const uploader = new Uploader({ autoUpload: false, multiple: true, events: { [UploaderEvent.FILE_BEFORE_ADD]: handleBeforeAdd, [UploaderEvent.FILE_ADD]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(handleBeforeAdd.callCount, 2); assert.equal(uploader.getFiles().length, 1); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('tiff')); uploader.addFile(createFileByType('gif')); }); it('should emit File:onAddStart', (done) => { const handleAddStart = sinon.stub().callsFake((event: BaseEvent) => { const file: UploaderFile = event.getData().file; assert.equal(file.getStatus(), FileStatus.ADDED); }); const uploader = new Uploader({ autoUpload: false, events: { [UploaderEvent.FILE_ADD_START]: handleAddStart, [UploaderEvent.FILE_ADD]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(handleAddStart.callCount, 1); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('tiff')); }); it('should emit File:onLoadStart', (done) => { const uploader = new Uploader({ autoUpload: false, events: { [UploaderEvent.FILE_LOAD_START]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.LOADING); assert.equal(file.isLoading(), true); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('tiff')); }); it('should emit File:onLoadProgress', (done) => { const progressValues = [100]; const handleProgress = sinon.stub().callsFake((event: BaseEvent) => { const { progress } = event.getData(); assert.equal(progress, progressValues.shift(), 'progress values'); }); const uploader = new Uploader({ autoUpload: false, events: { [UploaderEvent.FILE_LOAD_PROGRESS]: handleProgress, [UploaderEvent.FILE_LOAD_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(file.isComplete(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); assert.equal(handleProgress.callCount, 1, 'onProgress Count'); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('gif')); }); it('should emit File:onLoadComplete (serverless)', (done) => { const uploader = new Uploader({ autoUpload: false, events: { [UploaderEvent.FILE_LOAD_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(file.isComplete(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('tiff')); }); it('should emit File:onLoadComplete', (done) => { const uploader = new Uploader({ autoUpload: false, controller: 'fake-controller', events: { [UploaderEvent.FILE_LOAD_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.PENDING); assert.equal(file.isReadyToUpload(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('tiff')); }); it('should emit File:onComplete (after load)', (done) => { const uploader = new Uploader({ autoUpload: false, events: { [UploaderEvent.FILE_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(file.isComplete(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('tiff')); }); it('should emit File:onComplete (after upload)', (done) => { const uploader = new Uploader({ serverOptions: { chunkSize: 50, forceChunkSize: true, uploadControllerClass: CustomUploadController, }, events: { [UploaderEvent.FILE_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(file.isComplete(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('gif')); }); it('should emit File:onUploadStart', (done) => { const uploader = new Uploader({ serverOptions: { chunkSize: 50, forceChunkSize: true, uploadControllerClass: CustomUploadController, }, events: { [UploaderEvent.FILE_UPLOAD_START]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.UPLOADING); assert.equal(file.isUploading(), true); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('tiff')); }); it('should emit File:onUploadProgress', (done) => { const progressValues = [12, 23, 34, 45, 56, 67, 78, 89, 100, 100]; const handleProgress = sinon.stub().callsFake((event: BaseEvent) => { const { progress } = event.getData(); assert.equal(progress, progressValues.shift(), 'progress values'); }); const uploader = new Uploader({ serverOptions: { chunkSize: 50, forceChunkSize: true, uploadControllerClass: CustomUploadController, }, events: { [UploaderEvent.FILE_UPLOAD_PROGRESS]: handleProgress, [UploaderEvent.FILE_UPLOAD_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(file.isComplete(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); assert.equal(handleProgress.callCount, 10, 'onProgress Count'); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('gif')); }); it('should emit File:onUploadComplete', (done) => { const uploader = new Uploader({ serverOptions: { chunkSize: 50, forceChunkSize: true, uploadControllerClass: CustomUploadController, }, events: { [UploaderEvent.FILE_UPLOAD_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.COMPLETE); assert.equal(file.isComplete(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('gif')); }); it('should emit File:onError (after client loading)', (done) => { const uploader = new Uploader({ acceptOnlyImages: true, events: { [UploaderEvent.FILE_ERROR]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; try { assert.equal(file.getStatus(), FileStatus.LOAD_FAILED); assert.equal(file.isFailed(), true); assert.equal(file.isLoadFailed(), true); const error: UploaderError = event.getData().error; assert.equal(error.getCode(), 'FILE_TYPE_NOT_ALLOWED'); done(); } catch (exception) { done(exception); } }, [UploaderEvent.FILE_LOAD_COMPLETE]: (event: BaseEvent) => { done(new Error('onLoadComplete was emitted.')); }, }, }); uploader.addFile(createFileByType('tiff')); }); it('should emit File:onError (after server loading)', (done) => { const uploader = new Uploader({ serverOptions: { chunkSize: 50, forceChunkSize: true, loadControllerClass: CustomLoadController, loadControllerOptions: { raiseError: true, raiseErrorStep: 7, }, }, events: { [UploaderEvent.FILE_ERROR]: (event: BaseEvent) => { try { const file: UploaderFile = event.getData().file; assert.equal(file.getStatus(), FileStatus.LOAD_FAILED); const error: UploaderError = event.getData().error; assert.equal(error.getCode(), 'CUSTOM_LOAD_ERROR'); done(); } catch (exception) { done(exception); } }, [UploaderEvent.FILE_LOAD_COMPLETE]: (event: BaseEvent) => { done(new Error('onLoadComplete was emitted.')); }, }, }); uploader.addFile(1041, { id: 'my-file', name: 'image.png', size: 1041, type: 'image/png', preload: true, }); }); it('should emit File:onError (after uploading)', (done) => { const progressValues = [12, 23, 34, 45, 56, 67, 78, 89, 100, 100]; const handleProgress = sinon.stub().callsFake((event: BaseEvent) => { const { progress } = event.getData(); assert.equal(progress, progressValues.shift(), 'progress values'); }); const uploader = new Uploader({ serverOptions: { chunkSize: 50, forceChunkSize: true, uploadControllerClass: CustomUploadController, uploadControllerOptions: { raiseError: true, raiseErrorStep: 5, }, }, events: { [UploaderEvent.FILE_UPLOAD_PROGRESS]: handleProgress, [UploaderEvent.FILE_ERROR]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; const error: UploaderError = event.getData().error; try { assert.equal(file.getStatus(), FileStatus.UPLOAD_FAILED); assert.equal(file.isFailed(), true); assert.equal(file.getOrigin(), FileOrigin.CLIENT); assert.equal(error.getCode(), 'CUSTOM_UPLOAD_ERROR'); assert.equal(handleProgress.callCount, 5, 'onProgress Count'); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('gif')); }); it('should emit File:onRemove', (done) => { const uploader = new Uploader({ serverOptions: { uploadControllerClass: CustomUploadController, }, events: { [UploaderEvent.FILE_UPLOAD_COMPLETE]: (event: BaseEvent) => { const file: UploaderFile = event.getData().file; assert.equal(uploader.getFiles().length, 1); assert.equal(uploader.getTotalSize(), gif.size); file.remove(); }, [UploaderEvent.FILE_REMOVE]: (event: BaseEvent) => { done(); }, }, }); const gif = createFileByType('gif'); uploader.addFile(gif); }); it('should emit File:onStatusChange', (done) => { const statuses = [ FileStatus.ADDED, FileStatus.LOADING, FileStatus.PENDING, FileStatus.PREPARING, FileStatus.UPLOADING, FileStatus.COMPLETE, ]; const handleStatusChange = sinon.stub().callsFake((event: BaseEvent) => { const file: UploaderFile = event.getData().file; assert.equal(file.getStatus(), statuses.shift(), 'Wrong Status'); }); const uploader = new Uploader({ serverOptions: { uploadControllerClass: CustomUploadController, }, events: { [UploaderEvent.FILE_STATUS_CHANGE]: handleStatusChange, [UploaderEvent.FILE_UPLOAD_COMPLETE]: (event: BaseEvent) => { assert.equal(handleStatusChange.callCount, 6); done(); }, }, }); uploader.addFile(createFileByType('gif')); }); it('should emit File:onStateChange', (done) => { const changes = { name: 'file new name', type: 'image/jpeg', size: 1010, serverFileId: 123, downloadUrl: '/dddd/', width: 150, height: 230, clientPreviewUrl: null, clientPreviewWidth: 50, clientPreviewHeight: 55, serverPreviewUrl: null, serverPreviewWidth: 1000, serverPreviewHeight: 1000, progress: 85, }; const properties = Object.keys(changes); const handleStateChange = sinon.stub().callsFake((event: BaseEvent) => { const { property, value } = event.getData(); assert.equal(property, properties.shift()); assert.equal(value, changes[property]); }); const uploader = new Uploader({ serverOptions: { uploadControllerClass: CustomUploadController, }, events: { [UploaderEvent.FILE_UPLOAD_COMPLETE]: (event: BaseEvent) => { uploader.subscribe(UploaderEvent.FILE_STATE_CHANGE, handleStateChange); const file: UploaderFile = event.getData().file; file.setName(changes.name); file.setType(changes.type); file.setSize(changes.size); file.setServerFileId(changes.serverFileId); file.setDownloadUrl(changes.downloadUrl); file.setWidth(changes.width); file.setHeight(changes.height); file.setClientPreview(changes.clientPreviewUrl, changes.clientPreviewWidth, changes.clientPreviewHeight); file.setServerPreview(changes.serverPreviewUrl, changes.serverPreviewWidth, changes.serverPreviewHeight); file.setProgress(changes.progress); try { assert.equal(handleStateChange.callCount, Object.keys(changes).length); done(); } catch (exception) { done(exception); } }, }, }); uploader.addFile(createFileByType('gif')); }); });