diff --git a/src/components/contexts/FileUploadContext.jsx b/src/components/contexts/FileUploadContext.jsx
index 046336a..acb70b1 100644
--- a/src/components/contexts/FileUploadContext.jsx
+++ b/src/components/contexts/FileUploadContext.jsx
@@ -1,4 +1,4 @@
-import React, { useContext, useEffect, useState } from "react";
+import React, { useContext, useState } from "react";
import { uploadFile, getCancelToken } from "../../services/uploadFile";
const FileUploadContext = React.createContext();
@@ -10,32 +10,40 @@ export const FileUploadProvider = ({ children }) => {
const [status, setStatus] = useState(null);
const [cancelUpload, setCancelUpload] = useState(null);
- const cancel = async () => {
- console.log(`cancel`);
- if (cancelUpload) cancelUpload.cancel();
+ const done = () => {
setCancelUpload(null);
setUploading(false);
+ setProgress(0);
+ };
+
+ const cancel = async () => {
+ if (cancelUpload && progress < 100) {
+ cancelUpload.cancel();
+ setStatus("Upload cancelled");
+ }
+ done();
};
const upload = async (files) => {
- if (files.length === 0) return;
-
- const file = files[0].file;
- const filename = file.name;
-
- setUploading(true);
- setProgress(0);
- setStatus(`Uploading ${filename}`);
- setCancelUpload(getCancelToken());
try {
+ if (!files || files.length === 0) throw new Error("No file provided");
+
+ const file = files[0].file;
+ const filename = file.name;
+
+ setUploading(true);
+ setProgress(0);
+ setStatus(`Uploading ${filename}`);
+ setCancelUpload(getCancelToken());
+
const result = await uploadFile(file, setProgress, cancelUpload);
- console.log(result);
- setStatus(`Uploaded ${filename}`);
+ const url = ((result && result.url) ? result.url : "No URL available");
+ setStatus(`Uploaded ${filename}\n${url}`);
setCancelUpload(null);
- setProgress(101);
+ setProgress(100);
}
catch (e) {
- setStatus(`Error occured ${e.message}`);
+ setStatus(`Error occured: ${e.message}`);
}
};
diff --git a/src/components/contexts/FileUploadContext.test.jsx b/src/components/contexts/FileUploadContext.test.jsx
new file mode 100644
index 0000000..3e8e8ef
--- /dev/null
+++ b/src/components/contexts/FileUploadContext.test.jsx
@@ -0,0 +1,61 @@
+jest.mock("../../services/uploadFile");
+
+import {uploadFile, getCancelToken, setUploadFileResponse, setUploadFileDelay, getIssuedCancelToken } from "../../services/uploadFile"
+import { FileUploadProvider, useFileUploadContext } from "../Contexts/FileUploadContext";
+import {render, cleanup, screen, fireEvent, waitFor} from "@testing-library/react"
+
+describe("FileUploadContext", () => {
+
+ beforeEach(() => {
+ const TestComp = () => {
+ const { progress, uploading, status, upload, cancel } = useFileUploadContext();
+ return (
+ <>
+
{uploading.toString()}
+ {progress.toString()}
+ {status}
+