403Webshell
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 :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/ui/uploader/core/test/file-events.test.js
import Uploader from '../src/uploader';

import { FileStatus } from '../src/enums/file-status';
import { FileOrigin } from '../src/enums/file-origin';
import { FileEvent } from '../src/enums/file-event';

import type { BaseEvent } from 'main.core.events';

import UploaderFile from '../src/uploader-file';
import createFileByType from './utils/create-file-by-type.es6';
import CustomLoadController from './utils/custom-load-controller.es6';
import CustomUploadController from './utils/custom-upload-controller.es6';
import { UploaderError } from 'ui.uploader.core';

describe('File Events', () => {
	it('should emit onLoadStart', (done) => {
		const uploader = new Uploader();
		uploader.addFile(createFileByType('tiff'), {
			events: {
				[FileEvent.LOAD_START]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					try
					{
						assert.equal(file.getStatus(), FileStatus.LOADING);
						assert.equal(file.isLoading(), true);
						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
			},
		});
	});

	it('should emit onLoadProgress (client loading)', (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();
		uploader.addFile(createFileByType('gif'), {
			events: {
				[FileEvent.LOAD_PROGRESS]: handleProgress,
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					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);
					}
				},
			},
		});
	});

	it('should emit onLoadProgress (server loading)', (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,
				loadControllerClass: CustomLoadController,
				/* loadControllerOptions: {
					raiseError: true,
					raiseErrorStep: 7
				}, */
			},
		});

		uploader.addFile(1041, {
			id: 'my-file',
			name: 'image.png',
			size: 452,
			type: 'image/png',
			preload: true,
			events: {
				[FileEvent.LOAD_PROGRESS]: handleProgress,
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					try
					{
						assert.equal(file.getStatus(), FileStatus.COMPLETE);
						assert.equal(file.isComplete(), true);
						assert.equal(file.getOrigin(), FileOrigin.SERVER);
						assert.equal(handleProgress.callCount, 10, 'onProgress Count');
						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
			},
		});
	});

	it('should emit onLoadComplete (server loading)', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				loadControllerClass: CustomLoadController,
			},
		});

		uploader.addFile(1041, {
			id: 'my-file',
			name: 'image.png',
			size: 1041,
			type: 'image/png',
			events: {
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					try
					{
						assert.equal(file.getStatus(), FileStatus.COMPLETE);
						assert.equal(file.isComplete(), true);
						assert.equal(file.getOrigin(), FileOrigin.SERVER);
						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
			},
		});
	});

	it('should emit onLoadComplete (serverless)', (done) => {
		const uploader = new Uploader();
		uploader.addFile(createFileByType('tiff'), {
			events: {
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					try
					{
						assert.equal(file.getStatus(), FileStatus.COMPLETE);
						assert.equal(file.isComplete(), true);
						assert.equal(file.getOrigin(), FileOrigin.CLIENT);
						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
			},
		});
	});

	it('should emit onLoadComplete (pending to upload)', (done) => {
		const uploader = new Uploader({
			autoUpload: false,
			controller: 'fake-uploader',
		});

		uploader.addFile(createFileByType('tiff'), {
			events: {
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					try
					{
						assert.equal(file.getStatus(), FileStatus.PENDING);
						assert.equal(file.isReadyToUpload(), true);
						assert.equal(file.getOrigin(), FileOrigin.CLIENT);
						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
			},
		});
	});

	it('should emit onLoadError (client loading)', (done) => {
		const uploader = new Uploader({
			acceptOnlyImages: true,
		});

		uploader.addFile(createFileByType('tiff'), {
			events: {
				[FileEvent.LOAD_ERROR]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					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);
					}
				},
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					done(new Error('onLoadComplete was emitted.'));
				},
			},
		});
	});

	it('should emit onLoadError (server loading)', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				chunkSize: 50,
				forceChunkSize: true,
				loadControllerClass: CustomLoadController,
				loadControllerOptions: {
					raiseError: true,
					raiseErrorStep: 7,
				},
			},
		});

		uploader.addFile(1041, {
			id: 'my-file',
			name: 'image.png',
			size: 1041,
			type: 'image/png',
			preload: true,
			events: {
				[FileEvent.LOAD_ERROR]: (event: BaseEvent) => {
					try
					{
						const file: UploaderFile = event.getTarget();
						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);
					}
				},
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					done(new Error('onLoadComplete was emitted.'));
				},
			},
		});
	});

	it('should emit onLoadError (after abort)', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				chunkSize: 50,
				forceChunkSize: true,
				loadControllerClass: CustomLoadController,
			},
		});

		let onProgressCount = 0;

		uploader.addFile(1041, {
			id: 'my-file',
			name: 'image.png',
			size: 452,
			type: 'image/png',
			preload: true,
			events: {
				[FileEvent.LOAD_PROGRESS]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					if (++onProgressCount < 3)
					{
						file.abort();
					}
				},
				[FileEvent.LOAD_ERROR]: (event: BaseEvent) => {
					try
					{
						const file: UploaderFile = event.getTarget();
						assert.equal(file.getStatus(), FileStatus.LOAD_FAILED);

						const error: UploaderError = event.getData().error;
						assert.equal(error.getCode(), 'FILE_LOAD_ABORTED');

						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					done(new Error('onLoadComplete was emitted.'));
				},
			},
		});
	});

	it('should emit onBeforeUpload', (done) => {
		done();
	});

	it('should emit onUploadStart', (done) => {
		const uploader = new Uploader({
			controller: 'fake-controller',
		});
		uploader.addFile(createFileByType('tiff'), {
			events: {
				[FileEvent.UPLOAD_START]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					try
					{
						assert.equal(file.getStatus(), FileStatus.UPLOADING);
						assert.equal(file.isUploading(), true);
						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
			},
		});
	});

	it('should emit 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,
			},
		});

		uploader.addFile(createFileByType('gif'), {
			events: {
				[FileEvent.UPLOAD_PROGRESS]: handleProgress,
				[FileEvent.UPLOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					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);
					}
				},
			},
		});
	});

	it('should emit onUploadComplete', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				chunkSize: 50,
				forceChunkSize: true,
				uploadControllerClass: CustomUploadController,
			},
		});

		uploader.addFile(createFileByType('gif'), {
			events: {
				[FileEvent.UPLOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					try
					{
						assert.equal(file.getStatus(), FileStatus.COMPLETE);
						assert.equal(file.isComplete(), true);
						assert.equal(file.getOrigin(), FileOrigin.CLIENT);
						done();
					}
					catch (exception)
					{
						done(exception);
					}
				},
			},
		});
	});

	it('should emit onUploadError', (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,
				},
			},
		});

		uploader.addFile(createFileByType('gif'), {
			events: {
				[FileEvent.UPLOAD_PROGRESS]: handleProgress,
				[FileEvent.UPLOAD_ERROR]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					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);
					}
				},
			},
		});
	});

	it('should emit onUploadError (after abort)', (done) => {
		let progressCnt = 0;
		const handleProgress = sinon.stub().callsFake((event: BaseEvent) => {
			progressCnt++;
			if (progressCnt === 5)
			{
				const file: UploaderFile = event.getTarget();
				file.abort();
			}
		});

		const uploader = new Uploader({
			serverOptions: {
				chunkSize: 50,
				forceChunkSize: true,
				uploadControllerClass: CustomUploadController,
			},
		});

		uploader.addFile(createFileByType('gif'), {
			events: {
				[FileEvent.UPLOAD_PROGRESS]: handleProgress,
				[FileEvent.UPLOAD_ERROR]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					assert.equal(file.getStatus(), FileStatus.UPLOAD_FAILED);
					assert.equal(file.isFailed(), true);
					assert.equal(file.getOrigin(), FileOrigin.CLIENT);

					assert.equal(handleProgress.callCount, 5, 'onProgress Count');
					done();
				},
				[FileEvent.UPLOAD_COMPLETE]: (event: BaseEvent) => {
					done(new Error('onUploadComplete emitted.'));
				},
			},
		});
	});

	it('should emit onLoadControllerInit', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				loadControllerClass: CustomLoadController,
			},
		});

		uploader.addFile(1041, {
			id: 'my-file',
			name: 'image.png',
			size: 452,
			type: 'image/png',
			preload: true,
			events: {
				[FileEvent.LOAD_CONTROLLER_INIT]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					const controller: CustomLoadController = event.getData().controller;
					assert.equal(controller instanceof CustomLoadController, true);
					assert.equal(file.getStatus(), FileStatus.INIT);
					done();
				},
			},
		});
	});

	it('should emit onUploadControllerInit', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				uploadControllerClass: CustomUploadController,
			},
		});

		uploader.addFile(createFileByType('gif'), {
			events: {
				[FileEvent.UPLOAD_CONTROLLER_INIT]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();
					const controller: CustomUploadController = event.getData().controller;
					assert.equal(controller instanceof CustomUploadController, true);
					assert.equal(file.getStatus(), FileStatus.INIT);

					done();
				},
			},
		});
	});

	it('should emit onRemoveComplete', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				uploadControllerClass: CustomUploadController,
			},
		});

		const gif = createFileByType('gif');
		uploader.addFile(gif, {
			events: {
				[FileEvent.UPLOAD_COMPLETE]: (event: BaseEvent) => {
					const file: UploaderFile = event.getTarget();

					assert.equal(uploader.getFiles().length, 1);
					assert.equal(uploader.getTotalSize(), gif.size);

					file.remove();
				},
				[FileEvent.REMOVE_COMPLETE]: (event: BaseEvent) => {
					done();
				},
			},
		});
	});

	it('should emit onStateChange', () => {
		const changes = {
			name: 'new name',
			type: 'image/tiff',
			size: 1000,
			serverFileId: 123,
			downloadUrl: '/dddd/',
			width: 100,
			height: 200,
			clientPreviewUrl: null,
			clientPreviewWidth: 50,
			clientPreviewHeight: 55,
			serverPreviewUrl: null,
			serverPreviewWidth: 1000,
			serverPreviewHeight: 1000,
			progress: 80,
		};

		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 file = new UploaderFile(createFileByType('gif'), {
			events: {
				[FileEvent.STATE_CHANGE]: handleStateChange,
			},
		});

		assert.equal(file.getStatus(), FileStatus.INIT);

		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);

		assert.equal(handleStateChange.callCount, Object.keys(changes).length);
	});

	it('should emit onStatusChange', (done) => {
		const uploader = new Uploader({
			serverOptions: {
				uploadControllerClass: CustomUploadController,
			},
		});

		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.getTarget();
			assert.equal(file.getStatus(), statuses.shift(), 'Wrong Status');
		});

		const gif = createFileByType('gif');
		uploader.addFile(gif, {
			events: {
				[FileEvent.STATUS_CHANGE]: handleStatusChange,
				[FileEvent.UPLOAD_COMPLETE]: (event: BaseEvent) => {
					assert.equal(handleStatusChange.callCount, 6);
					done();
				},
			},
		});
	});

	it('should emit onStatusChange (only loading)', (done) => {
		const uploader = new Uploader({
			autoUpload: false,
			controller: 'fake-uploader',
		});

		const statuses = [
			FileStatus.ADDED,
			FileStatus.LOADING,
			FileStatus.PENDING,
		];

		const handleStatusChange = sinon.stub().callsFake((event: BaseEvent) => {
			const file: UploaderFile = event.getTarget();
			assert.equal(file.getStatus(), statuses.shift());
		});

		const gif = createFileByType('gif');
		uploader.addFile(gif, {
			events: {
				[FileEvent.STATUS_CHANGE]: handleStatusChange,
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					assert.equal(handleStatusChange.callCount, 3);
					done();
				},
			},
		});
	});

	it('should emit onStatusChange (only loading serverless)', (done) => {
		const uploader = new Uploader({
			autoUpload: false,
		});

		const statuses = [
			FileStatus.ADDED,
			FileStatus.LOADING,
			FileStatus.COMPLETE,
		];

		const handleStatusChange = sinon.stub().callsFake((event: BaseEvent) => {
			const file: UploaderFile = event.getTarget();
			assert.equal(file.getStatus(), statuses.shift());
		});

		const gif = createFileByType('gif');
		uploader.addFile(gif, {
			events: {
				[FileEvent.STATUS_CHANGE]: handleStatusChange,
				[FileEvent.LOAD_COMPLETE]: (event: BaseEvent) => {
					assert.equal(handleStatusChange.callCount, 3);
					done();
				},
			},
		});
	});
});

Youez - 2016 - github.com/yon3zu
LinuXploit