Skip to content

Commit ee1e965

Browse files
committed
coverage increase
1 parent 91dd197 commit ee1e965

File tree

4 files changed

+87
-37
lines changed

4 files changed

+87
-37
lines changed

src/interfaces/UploadOptions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export interface UploadOptions {
3636
* - % is not allowed.
3737
* - If this field is not specified and the file is overwritten then the tags will be removed.
3838
*/
39-
tags?: string;
39+
tags?: string | string[];
4040
/**
4141
* The folder path (e.g. /images/folder/) in which the image has to be uploaded. If the folder(s) didn't exist before, a new folder(s) is created.
4242
* The folder name can contain:
@@ -66,7 +66,7 @@ export interface UploadOptions {
6666
*
6767
* For example, set the value of this field to tags,customCoordinates,isPrivateFile,metadata to get value of tags, customCoordinates, isPrivateFile , and metadata in the response.
6868
*/
69-
responseFields?: string;
69+
responseFields?: string | string[];
7070
/*
7171
* Object with array of extensions to be processed on the image.
7272
*/

src/upload/index.ts

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,6 @@ export const upload = (
99
options: ImageKitOptions,
1010
callback?: (err: Error | null, response: UploadResponse | null) => void,
1111
) => {
12-
if (!uploadOptions) {
13-
respond(true, errorMessages.INVALID_UPLOAD_OPTIONS, callback);
14-
return;
15-
}
16-
1712
if (!uploadOptions.file) {
1813
respond(true, errorMessages.MISSING_UPLOAD_FILE_PARAMETER, callback);
1914
return;
@@ -34,22 +29,17 @@ export const upload = (
3429
return;
3530
}
3631

37-
if(uploadOptions.tags && Array.isArray(uploadOptions.tags))
38-
{
39-
uploadOptions.tags = String(uploadOptions.tags);
40-
}
41-
4232
var formData = new FormData();
4333
let key: keyof typeof uploadOptions;
4434
for (key in uploadOptions) {
4535
if (key) {
46-
if (key == "file" && typeof uploadOptions.file != "string") {
36+
if (key === "file" && typeof uploadOptions.file != "string") {
4737
formData.append('file', uploadOptions.file, String(uploadOptions.fileName));
48-
} else if (key == "tags" && Array.isArray(uploadOptions.tags)) {
38+
} else if (key === "tags" && Array.isArray(uploadOptions.tags)) {
4939
formData.append('tags', uploadOptions.tags.join(","));
50-
} else if (key == "responseFields" && Array.isArray(uploadOptions.responseFields)) {
40+
} else if (key === "responseFields" && Array.isArray(uploadOptions.responseFields)) {
5141
formData.append('responseFields', uploadOptions.responseFields.join(","));
52-
} else if (key == "extensions" && Array.isArray(uploadOptions.extensions)) {
42+
} else if (key === "extensions" && Array.isArray(uploadOptions.extensions)) {
5343
formData.append('extensions', JSON.stringify(uploadOptions.extensions));
5444
} else if (key === "customMetadata" && typeof uploadOptions.customMetadata === "object" &&
5545
!Array.isArray(uploadOptions.customMetadata) && uploadOptions.customMetadata !== null) {

src/utils/request.ts

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@ function getResponseHeaderMap(xhr: XMLHttpRequest) {
1414
const responseHeaders = xhr.getAllResponseHeaders();
1515
if (Object.keys(responseHeaders).length) {
1616
responseHeaders
17-
.trim()
18-
.split(/[\r\n]+/)
19-
.map(value => value.split(/: /))
20-
.forEach(keyValue => {
21-
headers[keyValue[0].trim()] = keyValue[1].trim();
22-
});
17+
.trim()
18+
.split(/[\r\n]+/)
19+
.map(value => value.split(/: /))
20+
.forEach(keyValue => {
21+
headers[keyValue[0].trim()] = keyValue[1].trim();
22+
});
2323
}
2424
return headers;
2525
}
2626

27-
const addResponseHeadersAndBody = (body: any, xhr: XMLHttpRequest):IKResponse<UploadResponse> => {
27+
const addResponseHeadersAndBody = (body: any, xhr: XMLHttpRequest): IKResponse<UploadResponse> => {
2828
let response = { ...body };
2929
const responseMetadata = {
3030
statusCode: xhr.status,
@@ -38,7 +38,7 @@ const addResponseHeadersAndBody = (body: any, xhr: XMLHttpRequest):IKResponse<Up
3838
return response as IKResponse<UploadResponse>;
3939
}
4040

41-
export const request = (uploadFileXHR: XMLHttpRequest,formData: FormData, options: ImageKitOptions & { authenticationEndpoint: string }, callback?: (err: Error | null, response: UploadResponse | null) => void) => {
41+
export const request = (uploadFileXHR: XMLHttpRequest, formData: FormData, options: ImageKitOptions & { authenticationEndpoint: string }, callback?: (err: Error | null, response: UploadResponse | null) => void) => {
4242
generateSignatureToken(options, (err, signaturObj) => {
4343
if (err) {
4444
return respond(true, err, callback)
@@ -67,7 +67,7 @@ export const generateSignatureToken = (options: ImageKitOptions & { authenticati
6767
var result = addResponseHeadersAndBody(body, xhr);
6868
respond(true, result, callback);
6969
};
70-
xhr.onerror = function() {
70+
xhr.onerror = function () {
7171
var body = errorMessages.AUTH_ENDPOINT_NETWORK_ERROR;
7272
var result = addResponseHeadersAndBody(body, xhr);
7373
respond(true, result, callback);
@@ -81,6 +81,10 @@ export const generateSignatureToken = (options: ImageKitOptions & { authenticati
8181
expire: body.expire,
8282
token: body.token
8383
}
84+
if (!obj.signature || !obj.expire || !obj.token) {
85+
respond(true, {}, callback);
86+
return;
87+
}
8488
var result = addResponseHeadersAndBody(obj, xhr);
8589
respond(false, result, callback);
8690
} catch (ex) {
@@ -100,9 +104,9 @@ export const generateSignatureToken = (options: ImageKitOptions & { authenticati
100104
return;
101105
}
102106

103-
export const uploadFile = (uploadFileXHR:XMLHttpRequest, formData: FormData, callback: (err: Error | IKResponse<UploadResponse> | null, response: UploadResponse | null) => void) => {
107+
export const uploadFile = (uploadFileXHR: XMLHttpRequest, formData: FormData, callback: (err: Error | IKResponse<UploadResponse> | null, response: UploadResponse | null) => void) => {
104108
uploadFileXHR.open('POST', 'https://upload.imagekit.io/api/v1/files/upload');
105-
uploadFileXHR.onerror = function() {
109+
uploadFileXHR.onerror = function () {
106110
var body = errorMessages.UPLOAD_ENDPOINT_NETWORK_ERROR;
107111
var result = addResponseHeadersAndBody(body, uploadFileXHR);
108112
respond(true, result, callback);
@@ -116,11 +120,11 @@ export const uploadFile = (uploadFileXHR:XMLHttpRequest, formData: FormData, cal
116120
}
117121
else if (uploadFileXHR.status !== 200) {
118122
try {
119-
var body = JSON.parse(uploadFileXHR.responseText);
120-
var uploadResponse = addResponseHeadersAndBody(body, uploadFileXHR);
121-
callback(uploadResponse, null);
122-
} catch (ex : any) {
123-
callback(ex, null);
123+
var body = JSON.parse(uploadFileXHR.responseText);
124+
var uploadResponse = addResponseHeadersAndBody(body, uploadFileXHR);
125+
callback(uploadResponse, null);
126+
} catch (ex: any) {
127+
callback(ex, null);
124128
}
125129
}
126130
};

test/upload.js

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,63 @@ describe("File upload", function () {
672672
sinon.assert.calledWith(callback, null, uploadSuccessResponseObj);
673673
});
674674

675+
it('Array type fields', function () {
676+
const fileOptions = {
677+
fileName: "test_file_name",
678+
file: "test_file",
679+
tags: ["test_tag1", "test_tag2"],
680+
customCoordinates: "10, 10, 100, 100",
681+
responseFields: ["tags", "customCoordinates", "isPrivateFile", "metadata"],
682+
useUniqueFileName: false,
683+
isPrivateFile: true,
684+
extensions: [
685+
{
686+
name: "aws-auto-tagging",
687+
minConfidence: 80,
688+
maxTags: 10
689+
}
690+
],
691+
overwriteFile: false,
692+
overwriteAITags: false,
693+
overwriteTags: false,
694+
overwriteCustomMetadata: false,
695+
customMetadata: {
696+
brand: "Nike",
697+
color: "red"
698+
},
699+
};
700+
var callback = sinon.spy();
701+
702+
imagekit.upload(fileOptions, callback);
703+
704+
expect(server.requests.length).to.be.equal(2);
705+
successSignature();
706+
successUploadResponse();
707+
708+
var arg = server.requests[0].requestBody;
709+
710+
expect(arg.get('file')).to.be.equal("test_file");
711+
expect(arg.get('fileName')).to.be.equal("test_file_name");
712+
expect(arg.get('token')).to.be.equal("test_token");
713+
expect(arg.get('expire')).to.be.equal("123");
714+
expect(arg.get('signature')).to.be.equal("test_signature");
715+
expect(arg.get('tags')).to.be.equal("test_tag1,test_tag2");
716+
expect(arg.get('customCoordinates')).to.be.equal("10, 10, 100, 100");
717+
expect(arg.get('responseFields')).to.be.equal("tags,customCoordinates,isPrivateFile,metadata");
718+
expect(arg.get('useUniqueFileName')).to.be.equal('false');
719+
expect(arg.get('isPrivateFile')).to.be.equal('true');
720+
expect(arg.get('publicKey')).to.be.equal('test_public_key');
721+
expect(arg.get('extensions')).to.be.equal(JSON.stringify(fileOptions.extensions));
722+
expect(arg.get('overwriteFile')).to.be.equal('false');
723+
expect(arg.get('overwriteAITags')).to.be.equal('false');
724+
expect(arg.get('overwriteTags')).to.be.equal('false');
725+
expect(arg.get('overwriteCustomMetadata')).to.be.equal('false');
726+
expect(arg.get('customMetadata')).to.be.equal(JSON.stringify(fileOptions.customMetadata));
727+
728+
expect(callback.calledOnce).to.be.true;
729+
sinon.assert.calledWith(callback, null, uploadSuccessResponseObj);
730+
});
731+
675732
it('check custom XHR object is used', function () {
676733
var xhr = new XMLHttpRequest();
677734
var fun = function () { return "hello from function" };
@@ -891,6 +948,8 @@ describe("File upload", function () {
891948
var callback = sinon.spy();
892949
imagekit.upload(fileOptions, callback);
893950

951+
expect(server.requests.length).to.be.equal(2);
952+
894953
successSignature();
895954
server.respondWith("POST", "https://upload.imagekit.io/api/v1/files/upload",
896955
[
@@ -899,11 +958,8 @@ describe("File upload", function () {
899958
JSON.stringify(uploadSuccessResponseObj)
900959
]
901960
);
902-
903-
expect(server.requests.length).to.be.equal(2);
904-
successSignature();
905-
successUploadResponse();
906-
961+
server.respond();
962+
907963
expect(callback.calledOnce).to.be.true;
908964

909965
var callBackArguments = callback.args[0];

0 commit comments

Comments
 (0)