#46 File uploader unit test

This commit is contained in:
mauriziovitale84
2016-05-11 10:52:14 +01:00
parent ac680ae176
commit 6f0437c155
8 changed files with 291 additions and 92 deletions

View File

@@ -33,6 +33,7 @@ export class UploadService {
private _fieldName: string = 'file';
private _formFields: Object = {};
private _withCredentials: boolean;
private _xmlHttpRequest: XMLHttpRequest;
private _queue: FileModel[] = [];
@@ -82,6 +83,43 @@ export class UploadService {
});
};
/**
* The method create a new XMLHttpRequest instance if doesn't exist
*/
private _configureXMLHttpRequest() {
if (this._xmlHttpRequest == undefined) {
this._xmlHttpRequest = new XMLHttpRequest();
this._xmlHttpRequest.upload.onprogress = (e) => {
if (e.lengthComputable) {
let percent = Math.round(e.loaded / e.total * 100);
uploadingFileModel.setProgres({
total: e.total,
loaded: e.loaded,
percent: percent
});
}
};
this._xmlHttpRequest.upload.onabort = (e) => {
uploadingFileModel.setAbort();
};
this._xmlHttpRequest.upload.onerror = (e) => {
uploadingFileModel.setError();
};
this._xmlHttpRequest.onreadystatechange = () => {
if (this._xmlHttpRequest.readyState === XMLHttpRequest.DONE) {
uploadingFileModel.onFinished(
this._xmlHttpRequest.status,
this._xmlHttpRequest.statusText,
this._xmlHttpRequest.response
);
}
};
}
}
/**
* Upload a file, and enrich it with the xhr.
*
@@ -95,46 +133,17 @@ export class UploadService {
form.append(key, this._formFields[key]);
});
let xmlHttpRequest = new XMLHttpRequest();
uploadingFileModel.setXMLHttpRequest(xmlHttpRequest);
this._configureXMLHttpRequest();
uploadingFileModel.setXMLHttpRequest(this._xmlHttpRequest);
xmlHttpRequest.upload.onprogress = (e) => {
if (e.lengthComputable) {
let percent = Math.round(e.loaded / e.total * 100);
uploadingFileModel.setProgres({
total: e.total,
loaded: e.loaded,
percent: percent
});
}
};
xmlHttpRequest.upload.onabort = (e) => {
uploadingFileModel.setAbort();
};
xmlHttpRequest.upload.onerror = (e) => {
uploadingFileModel.setError();
};
xmlHttpRequest.onreadystatechange = () => {
if (xmlHttpRequest.readyState === XMLHttpRequest.DONE) {
uploadingFileModel.onFinished(
xmlHttpRequest.status,
xmlHttpRequest.statusText,
xmlHttpRequest.response
);
}
};
xmlHttpRequest.open(this._method, this._url, true);
xmlHttpRequest.withCredentials = this._withCredentials;
this._xmlHttpRequest.open(this._method, this._url, true);
this._xmlHttpRequest.withCredentials = this._withCredentials;
if (this._authToken) {
xmlHttpRequest.setRequestHeader('Authorization', `${this._authTokenPrefix} ${this._authToken}`);
this._xmlHttpRequest.setRequestHeader('Authorization', `${this._authTokenPrefix} ${this._authToken}`);
}
xmlHttpRequest.send(form);
this._xmlHttpRequest.send(form);
}
/**
@@ -154,4 +163,12 @@ export class UploadService {
private _isFile(file: any): boolean {
return file !== null && (file instanceof Blob || (file.name && file.size));
}
/**
* Set XMLHttpRequest method
* @param xhr
*/
public setXMLHttpRequest(xhr: XMLHttpRequest) {
this._xmlHttpRequest = xhr;
}
}