Enter Encryption Password
- - -diff --git a/backend/config/example-env b/backend/config/example-env new file mode 100644 index 0000000..f000c44 --- /dev/null +++ b/backend/config/example-env @@ -0,0 +1 @@ +// TODO: Add example env file diff --git a/backend/enviroment/get-env-variables.ts b/backend/enviroment/get-env-variables.ts index cf073ed..a7bd924 100644 --- a/backend/enviroment/get-env-variables.ts +++ b/backend/enviroment/get-env-variables.ts @@ -1,17 +1,16 @@ import path from "path"; const getEnvVariables = () => { - const configPath = path.join(__dirname, "..", "..", "config"); + const configPath = path.join(__dirname, "..", "..", "backend", "config"); const processType = process.env.NODE_ENV; - console.log("123process", processType); if (processType === "production" || processType === undefined) { - require("dotenv").config({ path: configPath + "/prod.env" }); + require("dotenv").config({ path: configPath + "/.env.production" }); } else if (processType === "development") { - require("dotenv").config({ path: configPath + "/dev.env" }); + require("dotenv").config({ path: configPath + "/.env.development" }); } else if (processType === "test") { - require("dotenv").config({ path: configPath + "/test.env" }); + require("dotenv").config({ path: configPath + "/.env.test" }); } }; diff --git a/package.json b/package.json index a55b564..26e333f 100755 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "vite-test": "vite", "dev-test": "concurrently \"vite\" \"nodemon server.js\"", "dev-hot": "concurrently \"vite\" \"tsc -w -p ./backend/tsconfig.json\" \"npm run dev:backend\"", - "dev:backend": "nodemon dist/server/server-start.js", + "dev:backend": "NODE_ENV=development nodemon dist/server/server-start.js", "vite-build": "vite build", "lint": "eslint 'src/**/*.{js,jsx,ts,tsx}'" }, diff --git a/src/config/example-env b/src/config/example-env new file mode 100644 index 0000000..593bf41 --- /dev/null +++ b/src/config/example-env @@ -0,0 +1 @@ +VITE_BACKEND_URL=http://localhost:5173/api \ No newline at end of file diff --git a/tests/.DS_Store b/tests/.DS_Store deleted file mode 100644 index 8759201..0000000 Binary files a/tests/.DS_Store and /dev/null differ diff --git a/tests/db/utils/fileUtils/index.test.js b/tests/db/utils/fileUtils/index.test.js deleted file mode 100644 index 5c0302e..0000000 --- a/tests/db/utils/fileUtils/index.test.js +++ /dev/null @@ -1,1128 +0,0 @@ -import User from "../../../../dist/models/user"; -import mongoose from "../../../../dist/db/mongoose"; -const conn = mongoose.connection; -const createUser = require("../../../fixtures/createUser"); -const createUser2 = require("../../../fixtures/createUser2"); -const path = require("path"); -const createFile = require("../../../fixtures/createFile"); -import UtilsFile from "../../../../dist/db/utils/fileUtils/index"; -const ObjectID = require('mongodb').ObjectID -const jwt = require("jsonwebtoken"); -const utilsFile = new UtilsFile(); - -let user; -let file; - -process.env.KEY = "1234"; - - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - - const {user: gotUser} = await createUser(); - user = gotUser; - - const filename = "bunny.mp4"; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: user._id, - parent: "/", - parentList: "/" - } - - file = await createFile(filename, filepath, metadata, user); - - done(); -}) - -afterEach( async(done) => { - - let bucket = new mongoose.mongo.GridFSBucket(conn.db); - - await User.deleteMany({}); - - const allFiles = await conn.db.collection("fs.files").find({}).toArray(); - - for (let i = 0; i < allFiles.length; i++) { - - const currentFileID = allFiles[i]._id; - await bucket.delete(ObjectID(currentFileID)); - } - - done(); - -}) - - -test("When giving fileID, should return public file", async() => { - - const fileID = file._id; - const tempToken = file.metadata.link; - - const recievedFile = await utilsFile.getPublicInfo(fileID, tempToken); - - expect(recievedFile._id).toEqual(fileID); - -}) - -test("When giving wrong fileID, should not return public file", async() => { - - const wrongFileID = "123456789012"; - - const recievedFile = await utilsFile.getFileInfo(wrongFileID); - - expect(recievedFile).toBe(null); -}) - -test("When giving the wrong tempToken, should not return public file", async() => { - - const fileID = file._id; - const wrongTempToken = "1234" - - const recievedFile = await utilsFile.getPublicInfo(fileID, wrongTempToken); - - expect(recievedFile).toBe(null); -}) - -test("When giving fileID and userID, should remove public file link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - - - - await utilsFile.removeLink(fileID, userID); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - - expect(updatedFile.metadata.linkType).toBe(undefined); -}) - -test("When giving the wrong fileID, should not remove public link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - const wrongFileID = "123456789012"; - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - - - - await utilsFile.removeLink(wrongFileID, userID); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - - expect(updatedFile.metadata.linkType).toEqual("public") -}) - -test("When giving the wrong userID, should not remove public link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - const wrongUserID = "123456789012"; - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - - - - await utilsFile.removeLink(fileID, wrongUserID); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - - expect(updatedFile.metadata.linkType).toEqual("public") -}) - -test("When giving fileID, should remove one time public link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "one", "metadata.link": token}}) - - - - await utilsFile.removeOneTimePublicLink(fileID); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - - expect(updatedFile.metadata.linkType).toBe(undefined); -}) - -test("When giving the wrong fileID, should not remove one time public link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - const wrongFileID = "123456789012"; - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "one", "metadata.link": token}}) - - await utilsFile.removeOneTimePublicLink(wrongFileID); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - - expect(updatedFile.metadata.linkType).toBe("one"); -}) - -test("When giving fileID, userID, and token, should make file public", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - - - await utilsFile.makePublic(fileID, userID, token); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.metadata.linkType).toBe("public") -}) - -test("When giving wrong fileID, should not make file public", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - const wrongFileID = "123456789012"; - - - await utilsFile.makePublic(wrongFileID, userID, token); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.metadata.linkType).toBe(undefined) -}) - -test("When giving wrong userID, should not make file public", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const wrongUserID = "123456789012"; - - - await utilsFile.makePublic(fileID, wrongUserID, token); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.metadata.linkType).toBe(undefined) -}) - -test("When giving fileID, userID, and token, should make one time public link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - - - await utilsFile.makeOneTimePublic(fileID, userID, token); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.metadata.linkType).toBe("one") -}) - -test("When giving wrong fileID, should not make one time public link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const userID = user._id; - const wrongFileID = "123456789012"; - - - await utilsFile.makeOneTimePublic(wrongFileID, userID, token); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.metadata.linkType).toBe(undefined) -}) - -test("When giving wrong userID, should not make one time public link", async() => { - - const token = jwt.sign({_id: user._id}, process.env.PASSWORD) - const fileID = file._id; - const wrongUserID = "123456789012"; - - - await utilsFile.makeOneTimePublic(fileID, wrongUserID, token); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.metadata.linkType).toBe(undefined) -}) - -test("When giving fileID and userID, should return file", async() => { - - const fileID = file._id; - const userID = user._id; - - const recievedFile = await utilsFile.getFileInfo(fileID, userID); - - - expect(recievedFile._id).toEqual(fileID); -}) - -test("When giving wrong fileID, should not return file", async() => { - - const userID = user._id; - const wrongFileID = "123456789012"; - - const recievedFile = await utilsFile.getFileInfo(wrongFileID, userID); - - expect(recievedFile).toEqual(null); -}) - -test("When giving wrong userID, should not return file", async() => { - - const fileID = file._id; - const wrongUserID = "123456789012"; - - const recievedFile = await utilsFile.getFileInfo(fileID, wrongUserID); - - expect(recievedFile).toEqual(null); -}) - -test("When giving userID, should return quicklist", async() => { - - const userID = user._id; - - const recievedList = await utilsFile.getQuickList(userID); - - expect(recievedList.length).toBe(1); -}) - -test("When giving wrong userID, should not return quicklist", async() => { - - const wrongUserID = "123456789012"; - - const recievedList = await utilsFile.getQuickList(wrongUserID); - - expect(recievedList.length).toBe(0); -}) - -test("When giving default query object, should return a filtered file list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - const fileThree = await createFile("coconut.mp4", filepath, metadata, user); - const fileFour = await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - const fileFive = await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "/", - } - - const defaultSortBy = {uploadDate: -1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - - expect(recievedList.length).toBe(3); - expect(recievedList[0]._id).toEqual(fileThree._id); - expect(recievedList[1]._id).toEqual(fileTwo._id); - expect(recievedList[2]._id).toEqual(file._id); - expect(recievedList.includes(fileFour)).toBe(false); - expect(recievedList.includes(fileFive)).toBe(false); -}) - -test("When giving owner, should return filtered list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - const fileFive = await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": "1234", - "metadata.parent": "/", - } - - const defaultSortBy = {uploadDate: -1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - expect(recievedList.length).toBe(1); - expect(recievedList[0]._id).toEqual(fileFive._id); -}) - -test("When giving parent, should return a filtered file list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - const fileFour = await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "1234", - } - - const defaultSortBy = {uploadDate: -1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - - expect(recievedList.length).toBe(1); - expect(recievedList[0]._id).toEqual(fileFour._id); -}) - -test("When giving limit, should return filitered list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - await createFile("apple.mp4", filepath, metadata, user); - const fileThree = await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "/", - } - - const defaultSortBy = {uploadDate: -1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 1); - - - - expect(recievedList.length).toBe(1); - expect(recievedList[0]._id).toEqual(fileThree._id); -}) - -test("When giving ascending upload date, should return filtered list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - const fileThree = await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "/", - } - - const defaultSortBy = {uploadDate: 1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - - expect(recievedList.length).toBe(3); - expect(recievedList[0]._id).toEqual(file._id); - expect(recievedList[1]._id).toEqual(fileTwo._id); - expect(recievedList[2]._id).toEqual(fileThree._id); -}) - -test("When giving decending filename, should return filtered list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - const fileThree = await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "/", - } - - - const defaultSortBy = {filename: -1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - - expect(recievedList.length).toBe(3); - expect(recievedList[0]._id).toEqual(fileThree._id); - expect(recievedList[1]._id).toEqual(file._id); - expect(recievedList[2]._id).toEqual(fileTwo._id); -}) - -test("When giving ascending filename, should return filtered list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - const fileThree = await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "/", - } - - - const defaultSortBy = {filename: 1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - - expect(recievedList.length).toBe(3); - expect(recievedList[0]._id).toEqual(fileTwo._id); - expect(recievedList[1]._id).toEqual(file._id); - expect(recievedList[2]._id).toEqual(fileThree._id); -}) - -test("When giving start at with default values, should return filtered list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - const fileThree = await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "/", - "uploadDate": {$lt: new Date(fileThree.uploadDate)} - } - - const defaultSortBy = {uploadDate: -1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - - expect(recievedList.length).toBe(2); - expect(recievedList[0]._id).toEqual(fileTwo._id); - expect(recievedList[1]._id).toEqual(file._id); -}) - -test("When giving start at with ascending data, should return filtered list", async() => { - - const userID = user._id; - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - const fileThree = await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - - const queryObj = { - "metadata.owner": userID, - "metadata.parent": "/", - "uploadDate": {$gt: new Date(fileTwo.uploadDate)} - } - - const defaultSortBy = {uploadDate: 1} - - - - const recievedList = await utilsFile.getList(queryObj, defaultSortBy, 50); - - - - expect(recievedList.length).toBe(1); - expect(recievedList[0]._id).toEqual(fileThree._id); -}) - -// test("When giving user and temp token, should remove temp token", async() => { - -// const token = jwt.sign({_id: user._id}, process.env.PASSWORD, {expiresIn: 2}); -// user.tempTokens = user.tempTokens.concat({token}) -// await user.save(); - - -// const recievedUser = await utilsFile.removeTempToken(user, token); -// await recievedUser.save(); -// const updatedUser = await User.findById(user._id); - - -// expect(updatedUser.tempTokens.length).toBe(0); -// }) - -// test("When giving the wrong temp token, should not remove temp token", async() => { - -// const token = jwt.sign({_id: user._id}, process.env.PASSWORD, {expiresIn: 2}); -// user.tempTokens = user.tempTokens.concat({token}) -// await user.save(); - - -// const recievedUser = await utilsFile.removeTempToken(user, "1234"); -// await recievedUser.save(); -// const updatedUser = await User.findById(user._id); - - -// expect(updatedUser.tempTokens.length).toBe(1); -// expect(updatedUser.tempTokens[0].token._id).toBe(token._id) -// }) - -// test("When giving fileID and userID, should remove transcoded video", async() => { - -// const fileID = file._id; -// const userID = user._id; -// await await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), "metadata.owner": userID}, -// {"$set": {"metadata.transcoded": true}}) - -// await utilsFile.removeTranscodeVideo(fileID, userID); -// const updatedFile = await conn.db.collection("fs.files") -// .findOne({_id: fileID}); - - -// expect(updatedFile.metadata.transcoded).toBe(undefined); -// }) - -// test("When giving wrong fileID, should not remove transcoded video", async() => { - -// const fileID = file._id; -// const userID = user._id; -// const wrongFileID = "123456789012"; -// await await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), "metadata.owner": userID}, -// {"$set": {"metadata.transcoded": true}}) - -// await utilsFile.removeTranscodeVideo(wrongFileID, userID); -// const updatedFile = await conn.db.collection("fs.files") -// .findOne({_id: fileID}); - - -// expect(updatedFile.metadata.transcoded).toBe(true); -// }) - -// test("When giving the wrong userID, should not remove transcoded video", async() => { - -// const fileID = file._id; -// const userID = user._id; -// const wrongUserID = "123456789012"; -// await await conn.db.collection("fs.files") -// .findOneAndUpdate({"_id": ObjectID(fileID), "metadata.owner": userID}, -// {"$set": {"metadata.transcoded": true}}) - -// await utilsFile.removeTranscodeVideo(fileID, wrongUserID); -// const updatedFile = await conn.db.collection("fs.files") -// .findOne({_id: fileID}); - - -// expect(updatedFile.metadata.transcoded).toBe(true); -// }) - -test("When giving userID and search query, should return file list", async() => { - - const userID = user._id; - let search = "apple"; - search = new RegExp(search, 'i') - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - const recievedList = await utilsFile.getFileSearchList(userID, fileTwo.filename); - - - expect(recievedList.length).toBe(1); - expect(recievedList[0]._id).toEqual(fileTwo._id); -}) - -test("When giving wrong userID, should not return search list", async() => { - - const userID = user._id; - const wrongUserID = "123456789012" - let search = "apple"; - search = new RegExp(search, 'i') - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - const fileTwo = await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - const recievedList = await utilsFile.getFileSearchList(wrongUserID, fileTwo.filename); - - - expect(recievedList.length).toBe(0); -}) - -test("When giving fileID, userID, and title, should rename file", async() => { - - const userID = user._id; - const fileID = file._id; - const newName = "fin.mp4"; - - await utilsFile.renameFile(fileID, userID, newName); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.filename).toBe(newName); -}) - -test("When giving wrong fileID, should not rename file", async() => { - - const userID = user._id; - const fileID = file._id; - const wrongFileID = "123456789012" - const newName = "fin.mp4"; - - await utilsFile.renameFile(wrongFileID, userID, newName); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.filename).toBe(file.filename); -}) - -test("When giving the wrong userID, should not rename file", async() => { - - const fileID = file._id; - const wrongUserID = "123456789012" - const newName = "fin.mp4"; - - await utilsFile.renameFile(fileID, wrongUserID, newName); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.filename).toBe(file.filename); -}) - -test("When giving userID and parent string, should return file list by parent", async() => { - - const userID = user._id; - - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - const fileFour = await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - const recievedList = await utilsFile.getFileListByParent(userID, fileFour.metadata.parentList) - - - expect(recievedList.length).toBe(1); - expect(recievedList[0]._id).toEqual(fileFour._id); -}) - -test("When giving the wrong userID, should not return file list by parent", async() => { - - const userID = user._id; - const wrongUserID = "123456789012" - - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - const fileFour = await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - const recievedList = await utilsFile.getFileListByParent(wrongUserID, fileFour.metadata.parentList) - - - expect(recievedList.length).toBe(0); -}) - -test("When giving the userID, should return file list by owner", async() => { - - const userID = user._id; - - const {user: user2} = await createUser2(); - - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: user2._id, - parent: "/", - parentList:"/,1234" - } - - await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - const fileFive = await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - const recievedList = await utilsFile.getFileListByOwner(fileFive.metadata.owner); - - - expect(recievedList.length).toBe(1); - expect(recievedList[0]._id).toEqual(fileFive._id); -}) - -test("When giving the wrong userID, should not return file list by owner", async() => { - - const userID = user._id; - const wrongUserID = "123456789012" - - const filepath = path.join(__dirname, "../../../fixtures/media/check.svg") - const metadata = { - owner: userID, - parent: "/", - parentList: "/" - } - - const metadataDifferentParent = { - owner: userID, - parent: "1234", - parentList:"/,1234" - } - - const metadataDifferentOwner = { - owner: "1234", - parent: "/", - parentList:"/,1234" - } - - await createFile("apple.mp4", filepath, metadata, user); - await createFile("coconut.mp4", filepath, metadata, user); - await createFile("dinnerbone.mp4", filepath, metadataDifferentParent, user); - await createFile("elephant.mp4", filepath, metadataDifferentOwner, user); - const recievedList = await utilsFile.getFileListByOwner(wrongUserID); - - - expect(recievedList.length).toBe(0); -}) - -test("When giving fileID, userID, parent, and parentList, should move file", async() => { - - const fileID = file._id; - const userID = user._id; - const parent = "1234"; - const parentList = ["/", "1234"].toString(); - - - await utilsFile.moveFile(fileID, userID, parent, parentList); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - - expect(updatedFile.metadata.parent).toBe(parent); - expect(updatedFile.metadata.parentList).toBe(parentList); -}) - -test("When giving wrong userID for move file, should not remove file", async() => { - - const fileID = file._id; - const wrongUserID = "123456789012"; - const parent = "1234"; - const parentList = ["/", "1234"].toString(); - - await utilsFile.moveFile(fileID, wrongUserID, parent, parentList); - const updatedFile = await conn.db.collection("fs.files") - .findOne({_id: fileID}); - - expect(updatedFile.metadata.parent).toBe(file.metadata.parent); - expect(updatedFile.metadata.parentList).toBe(file.metadata.parentList); -}) - diff --git a/tests/db/utils/folderUtils/index.test.js b/tests/db/utils/folderUtils/index.test.js deleted file mode 100644 index 420a23c..0000000 --- a/tests/db/utils/folderUtils/index.test.js +++ /dev/null @@ -1,460 +0,0 @@ -import User from "../../../../dist/models/user"; -import mongoose from "../../../../dist/db/mongoose"; -import UtilsFolder from "../../../../dist/db/utils/folderUtils"; -import Folder from "../../../../dist/models/folder" -const conn = mongoose.connection; -const createUser = require("../../../fixtures/createUser"); -const utilsFolder = new UtilsFolder(); - - -let user; -let folder; - -process.env.KEY = "1234"; - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - - const {user: gotUser} = await createUser(); - user = gotUser; - - const folderData = { - name: "bunny", - owner: user._id, - parent: "/", - parentList: ["/"] - } - - - folder = new Folder(folderData); - await folder.save(); - - done(); - - // if (conn.readyState === 0) { - - // conn.once("open", async() => { - - // //user = await createUser(); - // const {user: gotUser} = await createUser(); - // user = gotUser; - - // const folderData = { - // name: "bunny", - // owner: user._id, - // parent: "/", - // parentList: ["/"] - // } - - - // folder = new Folder(folderData); - // await folder.save(); - - // done(); - - - // }) - - // } else { - - // //user = await createUser(); - // const {user: gotUser} = await createUser(); - // user = gotUser; - - // const folderData = { - // name: "bunny", - // owner: user._id, - // parent: "/", - // parentList: ["/"] - // } - - - // folder = new Folder(folderData); - // await folder.save(); - - // done(); - // } - -}) - -afterEach( async(done) => { - - await User.deleteMany({}); - await Folder.deleteMany({}); - - done(); - -}) - -test("When giving userID, and search query, should return a searched filtered folder list", async() => { - - const userID = user._id; - let search = "coco"; - search = new RegExp(search, 'i') - - const folderTwo = await new Folder({ - name: "coconut", - owner: userID, - parent: "/", - parentList: ["/"] - }) - - const folderThree = await new Folder({ - name: "dinnerbone", - owner: userID, - parent: "1234", - parentList: ["/", "1234"] - }) - - const folderFour = await new Folder({ - name: "cocoelephant", - owner: "1234", - parent: "/", - parentList: ["/"] - }) - - await folderTwo.save(); - await folderThree.save(); - await folderFour.save(); - - - - const recievedFolderList = await utilsFolder.getFolderSearchList(userID, search); - - - expect(recievedFolderList.length).toBe(1); - expect(recievedFolderList[0]._id).toEqual(folderTwo._id) -}) - -test("When giving the wrong userID, should not return search query", async() => { - - const userID = user._id; - const wrongUserID = "123456789012" - let search = "coco"; - search = new RegExp(search, 'i') - - const folderTwo = await new Folder({ - name: "coconut", - owner: userID, - parent: "/", - parentList: ["/"] - }) - - const folderThree = await new Folder({ - name: "dinnerbone", - owner: userID, - parent: "1234", - parentList: ["/", "1234"] - }) - - const folderFour = await new Folder({ - name: "cocoelephant", - owner: "1234", - parent: "/", - parentList: ["/"] - }) - - await folderTwo.save(); - await folderThree.save(); - await folderFour.save(); - - - - const recievedFolderList = await utilsFolder.getFolderSearchList(wrongUserID, search); - - - expect(recievedFolderList.length).toBe(0); -}) - -test("When giving folderID and userID, should return folder info", async() => { - - const folderID = folder._id; - const userID = user._id; - - - const recievedFolder = await utilsFolder.getFolderInfo(folderID, userID); - - - expect(recievedFolder._id).toEqual(folderID); -}) - -test("When giving the wrong folderID, should not return folder info", async() => { - - const wrongFolderID = "123456789012"; - const userID = user._id; - - - const recievedFolder = await utilsFolder.getFolderInfo(wrongFolderID, userID); - - - expect(recievedFolder).toBe(null); -}) - - -test("When giving the wrong userID, should not return folder info", async() => { - - const folderID = folder._id; - const wrongUserID = "123456789012" - - - const recievedFolder = await utilsFolder.getFolderInfo(folderID, wrongUserID); - - - expect(recievedFolder).toBe(null); -}) - -test("When giving userID, parent, and sortby, should return filtered folder list by parent", async() => { - - const userID = user._id; - const parent = "1234"; - const sortBy = {createdAt: -1} - - const folderTwo = await new Folder({ - name: "coconut", - owner: userID, - parent: "/", - parentList: ["/"] - }) - - const folderThree = await new Folder({ - name: "dinnerbone", - owner: userID, - parent: "1234", - parentList: ["/", "1234"] - }) - - const folderFour = await new Folder({ - name: "cocoelephant", - owner: "1234", - parent: "/", - parentList: ["/"] - }) - - await folderTwo.save(); - await folderThree.save(); - await folderFour.save(); - - - - const recievedFolderList = await utilsFolder.getFolderListByParent(userID, parent, sortBy); - - - expect(recievedFolderList.length).toBe(1); - expect(recievedFolderList[0]._id).toEqual(folderThree._id); -}) - -test("When giving the wrong userID, should not return folder list filtered by parent", async() => { - - const userID = user._id; - const parent = "1234"; - const sortBy = {createdAt: -1} - const wrongUserID = "123456789012" - - - const folderTwo = await new Folder({ - name: "coconut", - owner: userID, - parent: "/", - parentList: ["/"] - }) - - const folderThree = await new Folder({ - name: "dinnerbone", - owner: userID, - parent: "1234", - parentList: ["/", "1234"] - }) - - const folderFour = await new Folder({ - name: "cocoelephant", - owner: "1234", - parent: "/", - parentList: ["/"] - }) - - await folderTwo.save(); - await folderThree.save(); - await folderFour.save(); - - - - const recievedFolderList = await utilsFolder.getFolderListByParent(wrongUserID, parent, sortBy); - - - expect(recievedFolderList.length).toBe(0) -}) - -test("When giving userID, search query, and sort by, should return folder list by search (no limit)" , async() => { - - const userID = user._id; - let search = "coco"; - search = new RegExp(search, 'i') - - const folderTwo = await new Folder({ - name: "coconut", - owner: userID, - parent: "/", - parentList: ["/"] - }) - - const folderThree = await new Folder({ - name: "dinnerbone", - owner: userID, - parent: "1234", - parentList: ["/", "1234"] - }) - - const folderFour = await new Folder({ - name: "cocoelephant", - owner: "1234", - parent: "/", - parentList: ["/"] - }) - - await folderTwo.save(); - await folderThree.save(); - await folderFour.save(); - - - - const recievedFolderList = await utilsFolder.getFolderListBySearch(userID, search); - - - expect(recievedFolderList.length).toBe(1); - expect(recievedFolderList[0]._id).toEqual(folderTwo._id) - -}) - -test("When giving wrong userID, should not return folder list by search (no limit)", async() => { - - const userID = user._id; - let search = "coco"; - search = new RegExp(search, 'i') - const wrongUserID = "123456789012" - - const folderTwo = await new Folder({ - name: "coconut", - owner: userID, - parent: "/", - parentList: ["/"] - }) - - const folderThree = await new Folder({ - name: "dinnerbone", - owner: userID, - parent: "1234", - parentList: ["/", "1234"] - }) - - const folderFour = await new Folder({ - name: "cocoelephant", - owner: "1234", - parent: "/", - parentList: ["/"] - }) - - await folderTwo.save(); - await folderThree.save(); - await folderFour.save(); - - - - const recievedFolderList = await utilsFolder.getFolderListBySearch(wrongUserID, search); - - - expect(recievedFolderList.length).toBe(0); -}) - -test("When giving folderID, userID, and title, should rename folder", async() => { - - const folderID = folder._id; - const userID = user._id; - const newName = "almonds"; - - - await utilsFolder.renameFolder(folderID, userID, newName); - const updatedFolder = await Folder.findById(folderID); - - - expect(updatedFolder.name).toBe(newName); -}) - -test("When giving wrong folderID, should not rename folder", async() => { - - const folderID = folder._id; - const userID = user._id; - const newName = "almonds"; - const wrongFolderID = "123456789012" - - - await utilsFolder.renameFolder(wrongFolderID, userID, newName); - const updatedFolder = await Folder.findById(folderID); - - - expect(updatedFolder.name).toBe(folder.name); -}) - -test("When giving the wrong userID, should not rename folder", async() => { - - const folderID = folder._id; - const wrongUserID = "123456789012"; - const newName = "almonds"; - - - await utilsFolder.renameFolder(folderID, wrongUserID, newName); - const updatedFolder = await Folder.findById(folderID); - - - expect(updatedFolder.name).toBe(folder.name); -}) - -test("When giving folderID, userID, parent, and parentList, should move folder", async() => { - - const folderID = folder._id; - const userID = user._id; - const parent = "1234"; - const parentList = ["/", "1234"]; - - - await utilsFolder.moveFolder(folderID, userID, parent, parentList); - const updatedFolder = await Folder.findById(folderID); - - expect(updatedFolder.parentList.length).toBe(2); - expect(updatedFolder.parent).toBe(parent); -}) - -test("When giving the wrong userID for folder move, should not move folder", async() => { - - const folderID = folder._id; - const wrongUserID = "123456789012"; - const parent = "1234"; - const parentList = ["/", "1234"]; - - await utilsFolder.moveFolder(folderID, wrongUserID, parent, parentList); - const updatedFolder = await Folder.findById(folderID); - - expect(updatedFolder.parentList.length).toBe(1); - expect(updatedFolder.parent).toBe(folder.parent); -}) - diff --git a/tests/express-routers/file.test.js b/tests/express-routers/file.test.js deleted file mode 100644 index 9f5ec33..0000000 --- a/tests/express-routers/file.test.js +++ /dev/null @@ -1,728 +0,0 @@ -import User from "../../dist/models/user"; -import mongoose from "../../dist/db/mongoose"; -const conn = mongoose.connection; -const createUser = require("../fixtures/createUser"); -const createUser2 = require("../fixtures/createUser2"); -const createFile = require("../fixtures/createFile"); -const crypto = require("crypto"); -const path = require("path"); -import env from "../../dist/enviroment/env"; -import createThumbnail from "../../dist/services/ChunkService/utils/createThumbailAny"; -const request = require("supertest"); -const jwt = require("jsonwebtoken"); -const ObjectID = require('mongodb').ObjectID -import servers from "../../dist/server/server"; -import Folder from "../../dist/models/folder"; -const temp = require("temp").track(); -const binaryPhraser = require("superagent-binary-parser"); -const session = require("supertest-session"); -const loginUser = require("../fixtures/loginUser"); -const createUserNotEmailVerified = require("../fixtures/createUserNotEmailVerified"); -const Thumbnail = require("../../dist/models/thumbnail"); - -const {server, serverHttps} = servers; - -const app = server; - -let user; -let user2; -let userData; -let userData2; -let file; - -process.env.KEY = "1234"; -env.key = "1234"; - - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - - const initVect = crypto.randomBytes(16); - - const {user: gotUser, userData: gotUserData} = await createUser(); - user = gotUser; - userData = gotUserData; - - const {user: gotUser2, userData: gotUserData2} = await createUser2(); - user2 = gotUser2; - userData2 = gotUserData2; - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../fixtures/media/folder.png") - const metadata = { - owner: user._id, - parent: "/", - parentList: "/", - "IV": initVect, - // filePath: filepath - } - - file = await createFile(filename, filepath, metadata, user); - - done(); - -}) - -afterEach(async(done) => { - - console.log("After each") - - //const gfs = Grid(conn.db, mongoose.mongo); - let bucket = new mongoose.mongo.GridFSBucket(conn.db); - - await User.deleteMany({}); - - await Thumbnail.deleteMany({}); - - const allFiles = await conn.db.collection("fs.files").find({}).toArray(); - - for (let i = 0; i < allFiles.length; i++) { - - const currentFileID = allFiles[i]._id; - await bucket.delete(ObjectID(currentFileID)); - } - - done(); -}) - -test("When giving ID, should send thumbnail data", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const thumbnailFile = await createThumbnail(file, file.filename, user); - const thumbnailID = thumbnailFile.metadata.thumbnailID; - - const response = await appSession - .get(`/file-service/thumbnail/${thumbnailID}`) - .send() - .expect(200); - - expect(response.body.length).not.toBe(0); -}) - -test("When giving no authorization for thumbnail data, should return error", async() => { - - const thumbnailFile = await createThumbnail(file, file.filename, user); - const thumbnailID = thumbnailFile.metadata.thumbnailID; - - const response = await request(app) - .get(`/file-service/thumbnail/${thumbnailID}`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When giving wrong auth data for thumbnail, should return 403 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const thumbnailFile = await createThumbnail(file, file.filename, user); - const thumbnailID = thumbnailFile.metadata.thumbnailID; - - const appSession2 = session(app); - await loginUser(appSession2, userData2); - - const response = await appSession2 - .get(`/file-service/thumbnail/${thumbnailID}`) - .send() - .expect(403); - - expect(response.body).toEqual({}); -}) - -test("When not email verified should not get thumbnail data, and return 401", async() => { - - const appSession = session(app); - - const {userData: userData3, user: user3} = await createUserNotEmailVerified(); - await loginUser(appSession, userData3); - - const thumbnailFile = await createThumbnail(file, file.filename, user3); - const thumbnailID = thumbnailFile.metadata.thumbnailID; - - const response = await appSession - .get(`/file-service/thumbnail/${thumbnailID}`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When not email verified but email verification disabled should get thumbnail data", async() => { - - env.disableEmailVerification = true; - - const appSession = session(app); - - const {userData: userData3, user: user3} = await createUserNotEmailVerified(); - await loginUser(appSession, userData3); - - const initVect = crypto.randomBytes(16); - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../fixtures/media/folder.png") - const metadata = { - owner: user3._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user3); - - const thumbnailFile = await createThumbnail(file2, file2.filename, user3); - const thumbnailID = thumbnailFile.metadata.thumbnailID; - - const response = await appSession - .get(`/file-service/thumbnail/${thumbnailID}`) - .send() - .expect(200); - - expect(response.body.length).not.toBe(0); - - env.disableEmailVerification = undefined; -}) - -test("When trying to create thumbnail from others users file should not return thumbnail", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const thumbnailFile = await createThumbnail(file, file.filename, user2); - const thumbnailID = thumbnailFile.metadata.thumbnailID; - - expect(thumbnailID).toEqual(undefined) -}) -// // Needs Work, cannot phrase binary data? - -// // test("When giving public ID, should return public file download", async() => { - -// // const userID = user._id; -// // const fileID = file._id.toString(); -// // const token = jwt.sign({_id: userID.toString()}, env.password); -// // await conn.db.collection("fs.files") -// // .findOneAndUpdate({"_id": ObjectID(fileID), -// // "metadata.owner": userID}, -// // {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - -// // const response = await request(app) -// // .get(`/file-service/public/download/${fileID}`) -// // .parse(binaryPhraser) -// // .buffer() -// // .end(); - - -// // //expect(response.body._id).toEqual(fileID); - -// // // console.log("public", token.token); - -// // // const url = "/file-service/public/download/" + fileID; -// // // console.log("url", url); -// // // const response = await request(app).get(url) -// // // .set("Authorization", `Bearer ${userToken}`) -// // // .set('content-type', 'application/octet-stream') -// // // .send() -// // // .expect(203) - -// // // const writeStream = temp.createWriteStream(); - -// // //response.pipe(writeStream); -// // }) - -test("When giving public id, should return public info", async() => { - - const userID = user._id; - const fileID = file._id.toString(); - const token = jwt.sign({_id: userID.toString()}, env.password).toString(); - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - - const response = await request(app) - .get(`/file-service/public/info/${fileID}/${token}`) - .send() - .expect(200); - - expect(response.body._id).toEqual(fileID); -}) - -test("When giving ID for non public file, should return 404 error", async() => { - - const userID = user._id; - const fileID = file._id.toString(); - const token = jwt.sign({_id: userID.toString()}, env.password).toString(); - const response = await request(app) - .get(`/file-service/public/info/${fileID}/${token}`) - .send() - .expect(404); - - expect(response.data).toBe(undefined); -}) - -test("When giving fileID, should return file info", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const fileID = file._id; - - const response = await appSession - .get(`/file-service/info/${fileID}`) - .send() - .expect(200); - - expect(response.body._id).toEqual(fileID.toString()); -}) - -test("When not authorized for file info, should return 401 error", async() => { - - const fileID = file._id; - - const response = await request(app) - .get(`/file-service/info/${fileID}`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When giving wrong auth token for file info, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const fileID = file._id; - - const response = await appSession - .get(`/file-service/info/${fileID}`) - .send() - .expect(404); - - expect(response.body).toEqual({}); -}) - -test("When not email verified should not get file info, and should return 401", async() => { - - const appSession = session(app); - - const {userData: userData3, user: user3} = await createUserNotEmailVerified(); - await loginUser(appSession, userData3); - - const initVect = crypto.randomBytes(16); - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../fixtures/media/folder.png") - const metadata = { - owner: user3._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user3); - - const fileID = file2._id; - - const response = await appSession - .get(`/file-service/info/${fileID}`) - .send() - .expect(401); - - expect(response.body).toEqual({}) -}) - -test("When not email verified but email verification disabled should return file info", async() => { - - env.disableEmailVerification = true; - - const appSession = session(app); - - const {userData: userData3, user: user3} = await createUserNotEmailVerified(); - await loginUser(appSession, userData3); - - const initVect = crypto.randomBytes(16); - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../fixtures/media/folder.png") - const metadata = { - owner: user3._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user3); - - const fileID = file2._id; - - const response = await appSession - .get(`/file-service/info/${fileID}`) - .send() - .expect(200); - - expect(response.body._id).toEqual(fileID.toString()); - - env.disableEmailVerification = undefined; -}) - -test("When giving the wrong tempToken for public file info, should return 404 error", async() => { - - const userID = user._id; - const fileID = file._id.toString(); - const token = jwt.sign({_id: userID.toString()}, env.password).toString(); - const wrongToken = "12345" - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - - const response = await request(app) - .get(`/file-service/public/info/${fileID}/${wrongToken}`) - .send() - .expect(404); - - expect(response.body).toEqual({}); -}) - -test("When giving authorization, should get user quicklist", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const response = await appSession - .get(`/file-service/quick-list`) - .send() - .expect(200); - - expect(response.body.length).toBe(1); -}) - -test("When giving no authoization for quicklist, should return 401 error", async() => { - - const response = await request(app) - .get(`/file-service/quick-list`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When giving default query, should return file list", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const response = await appSession - .get(`/file-service/list`) - .send({}) - .expect(200); - - expect(response.body.length).toBe(1); -}) - -test("When giving no authoization for file list, should return 401 error", async() => { - - const response = await request(app) - .get(`/file-service/list`) - .send({}) - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When giving wrong auth for list, should return empty list", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const response = await appSession - .get(`/file-service/list`) - .send({}) - .expect(200); - - expect(response.body.length).toBe(0); -}) - -test("When authorized should get video cookie", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - await appSession - .get(`/file-service/list`) - .send("/file-service/download/access-token-stream-video") - .expect(200); -}) - -test("When not authorized should not get video token and return 401 error", async() => { - - await request(app) - .get(`/file-service/list`) - .send("/file-service/download/access-token-stream-video") - .expect(401); -}) - -test("When authorized should return suggested list", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - await appSession - .get(`/file-service/suggested-list`) - .send() - .expect(200); -}) - -test("When not authorized should not return suggested list", async() => { - - const response =await request(app) - .get(`/file-service/suggested-list`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When giving fileID and title, should rename file", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const fileID = file._id; - - await appSession - .patch(`/file-service/rename`) - .send({ - id: fileID, - title: "new name" - }) - .expect(200); -}) - -test("When not authoized for rename file, should return 401 error", async() => { - - const fileID = file._id; - - await request(app) - .patch(`/file-service/rename`) - .send({ - id: fileID, - title: "new name" - }) - .expect(401); -}) - -test("When giving wrong authorization token for rename file, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const fileID = file._id; - - await appSession - .patch(`/file-service/rename`) - .send({ - id: fileID, - title: "new name" - }) - .expect(404); -}) - -test("When giving fileID and parent, should move file", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const fileID = file._id; - const userID = user._id; - - const folder = new Folder({ - owner: userID, - name: "folder", - parent: "/", - parentList: ["/"] - }) - - await folder.save(); - - const folderID = folder._id; - - await appSession - .patch(`/file-service/move`) - .send({ - id: fileID, - parent: folderID - }) - .expect(200); -}) - -test("When not authorized should not move file and return 401", async() => { - - const appSession = session(app); - - const fileID = file._id; - const userID = user._id; - - const folder = new Folder({ - owner: userID, - name: "folder", - parent: "/", - parentList: ["/"] - }) - - await folder.save(); - - const folderID = folder._id; - - await appSession - .patch(`/file-service/move`) - .send({ - id: fileID, - parent: folderID - }) - .expect(401); -}) - -test("When giving wrong authorization should not move file and return 404", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const fileID = file._id; - const userID = user._id; - - const folder = new Folder({ - owner: userID, - name: "folder", - parent: "/", - parentList: ["/"] - }) - - await folder.save(); - - const folderID = folder._id; - - await appSession - .patch(`/file-service/move`) - .send({ - id: fileID, - parent: folderID - }) - .expect(404); - -}) - -test("When giving a parentID that does not exist, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const fileID = file._id; - - await appSession - .patch(`/file-service/move`) - .send({ - id: fileID, - parent: "123456789012" - }) - .expect(404); -}) - -test("When giving fileID should remove file", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const fileID = file._id; - - await appSession - .delete(`/file-service/remove`) - .send({ - id: fileID, - }) - .expect(200); -}) - -test("When giving fileID that does not exist for remove file, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const fileID = "123456789012"; - - await appSession - .delete(`/file-service/remove`) - .send({ - id: fileID, - }) - .expect(404); -}) - -test("When not authorized should not remove file and return 401", async() => { - - const appSession = session(app); - - const fileID = file._id; - - await appSession - .delete(`/file-service/remove`) - .send({ - id: fileID, - }) - .expect(401); -}) - -test("When giving wrong authorization should not remove file and return 404", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const fileID = file._id; - - await appSession - .delete(`/file-service/remove`) - .send({ - id: fileID, - }) - .expect(404); -}) \ No newline at end of file diff --git a/tests/express-routers/folder.test.js b/tests/express-routers/folder.test.js deleted file mode 100644 index 7792235..0000000 --- a/tests/express-routers/folder.test.js +++ /dev/null @@ -1,396 +0,0 @@ -import User from "../../dist/models/user"; -import mongoose from "../../dist/db/mongoose"; -const conn = mongoose.connection; -const createUser = require("../fixtures/createUser"); -const createUser2 = require("../fixtures/createUser2"); -const createFile = require("../fixtures/createFile"); -const crypto = require("crypto"); -const path = require("path"); -import env from "../../dist/enviroment/env"; -const request = require("supertest"); -const jwt = require("jsonwebtoken"); -const ObjectID = require('mongodb').ObjectID -import servers from "../../dist/server/server"; -import Folder from "../../dist/models/folder"; -const temp = require("temp").track(); -const binaryPhraser = require("superagent-binary-parser"); -const session = require("supertest-session"); -const loginUser = require("../fixtures/loginUser"); -const createUserNotEmailVerified = require("../fixtures/createUserNotEmailVerified"); - - -const {server, serverHttps} = servers; - -const app = server; - -let user; -let user2; -let userData; -let userData2; -let file; -let folder; - -process.env.KEY = "1234"; -env.key = "1234"; - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - - const {user: gotUser, userData: gotUserData} = await createUser(); - user = gotUser; - userData = gotUserData; - - const {user: gotUser2, userData: gotUserData2} = await createUser2(); - user2 = gotUser2; - userData2 = gotUserData2; - - const folderData = { - name: "bunny", - parent: "/", - owner: user._id, - parentList: ["/"] - } - - folder = new Folder(folderData); - await folder.save(); - - done(); - - // if (conn.readyState === 0) { - - // conn.on("open", async() => { - - // // user = await createUser(); - // // userToken = user.tokens[0].token; - - // // user2 = await createUser2(); - // // userToken2 = user2.tokens[0].token; - - // const {user: gotUser, token: gotToken} = await createUser(); - // user = gotUser; - // userToken = gotToken; - - // const {user: gotUser2, token: gotToken2} = await createUser2(); - // user2 = gotUser2; - // userToken2 = gotToken2; - - // const folderData = { - // name: "bunny", - // parent: "/", - // owner: user._id, - // parentList: ["/"] - // } - - // folder = new Folder(folderData); - // await folder.save(); - - // done(); - - // }) - - // } else { - - // // user = await createUser(); - // // userToken = user.tokens[0].token; - - // // user2 = await createUser2(); - // // userToken2 = user2.tokens[0].token; - // const {user: gotUser, token: gotToken} = await createUser(); - // user = gotUser; - // userToken = gotToken; - - // const {user: gotUser2, token: gotToken2} = await createUser2(); - // user2 = gotUser2; - // userToken2 = gotToken2; - - - // const folderData = { - // name: "bunny", - // parent: "/", - // owner: user._id, - // parentList: ["/"] - // } - - // folder = new Folder(folderData); - // await folder.save(); - - // done(); - - - // } -}) - -afterEach(async(done) => { - - let bucket = new mongoose.mongo.GridFSBucket(conn.db); - - await User.deleteMany({}); - await Folder.deleteMany({}); - - const allFiles = await conn.db.collection("fs.files").find({}).toArray(); - - for (let i = 0; i < allFiles.length; i++) { - - const currentFileID = allFiles[i]._id; - await bucket.delete(ObjectID(currentFileID)); - } - - done(); -}) - -test("When giving folderID, should return folder info", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const folderID = folder._id; - - await appSession - .get(`/folder-service/info/${folderID}`) - .send() - .expect(200); -}) - -test("When not authorized for folder info, should return 401 error", async() => { - - const folderID = folder._id; - - await request(app) - .get(`/folder-service/info/${folderID}`) - .send() - .expect(401); -}) - -test("When giving wrong authorization for folder info, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const folderID = folder._id; - - await appSession - .get(`/folder-service/info/${folderID}`) - .send() - .expect(404); -}) - -test("When giving folderID, should return subfolder list", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const folderID = folder._id; - - await appSession - .get(`/folder-service/subfolder-list?id=${folderID}`) - .send() - .expect(200); -}) - -test("When giving no folderID for subfolder list, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - await appSession - .get(`/folder-service/subfolder-list`) - .send() - .expect(404); -}) - -test("When giving no authorization for subfolder list, should return 401 error", async() => { - - const folderID = folder._id; - - await request(app) - .get(`/folder-service/subfolder-list?id=${folderID}`) - .send() - .expect(401); -}) - -test("When giving wrong authorization for subfolder list, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData2); - - const folderID = folder._id; - - await appSession - .get(`/folder-service/subfolder-list?id=${folderID}`) - .send() - .expect(404); - -}) - -test("When giving default query, should return folder list", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const query = {} - - await appSession - .get(`/folder-service/list?query=${query}`) - .send() - .expect(200); -}) - -test("When giving no authorization for folder list, should return 401 error", async() => { - - const query = {} - - await request(app) - .get(`/folder-service/list?query=${query}`) - .send() - .expect(401); -}) - -test("When giving ID and parent, should move folder", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const folderData = { - name: "bunny", - parent: "/", - owner: user._id, - parentList: ["/"] - } - - const folder2 = new Folder(folderData); - await folder2.save(); - const parentID = folder2._id; - - const folderID = folder._id; - - await appSession - .patch(`/folder-service/move`) - .send({ - id: folderID, - parent: parentID - }) - .expect(200); -}) - -test("When giving a folder id that does not exist for move folder, should return 500 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const folderData = { - name: "bunny", - parent: "/", - owner: user._id, - parentList: ["/"] - } - - const folder2 = new Folder(folderData); - await folder2.save(); - const parentID = folder2._id; - - await appSession - .patch(`/folder-service/move`) - .send({ - id: "1234", - parent: parentID - }) - .expect(500); - -}) - -test("When giving parent id that does not exist for move folder, should return 500 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const folderID = folder._id; - - await appSession - .patch(`/folder-service/move`) - .send({ - id: folderID, - parent: "1234" - }) - .expect(500); -}) - -test("When giving folder id and title, should rename folder", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const folderID = folder._id; - const title = "new name"; - - await appSession - .patch(`/folder-service/rename`) - .send({ - id: folderID, - title - }) - .expect(200); -}) - -test("When giving not authorization for rename folder, should return 401 error", async() => { - - const folderID = folder._id; - const title = "new name"; - - await request(app) - .patch(`/folder-service/rename`) - .send({ - id: folderID, - title - }) - .expect(401); -}) - -test("When giving id for folder that does not exist for rename, should return 404 error", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const wrongFolderID = "123456789012"; - const title = "new name"; - - await appSession - .patch(`/folder-service/rename`) - .send({ - id: wrongFolderID, - title - }) - .expect(404); - -}) \ No newline at end of file diff --git a/tests/express-routers/user.test.js b/tests/express-routers/user.test.js deleted file mode 100644 index fd103e5..0000000 --- a/tests/express-routers/user.test.js +++ /dev/null @@ -1,504 +0,0 @@ -import User from "../../dist/models/user"; -import mongoose from "../../dist/db/mongoose"; -const conn = mongoose.connection; -const createUser = require("../fixtures/createUser"); -import servers from "../../dist/server/server"; -const request = require("supertest"); -import env from "../../dist/enviroment/env"; -const session = require("supertest-session"); -const loginUser = require("../fixtures/loginUser"); -const createUserNotEmailVerified = require("../fixtures/createUserNotEmailVerified"); - -const {server, serverHttps} = servers; - -const app = server; - -let user; -let userToken; -let userData; - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - - const {user: gotUser, userData: gotUserData} = await createUser(); - user = gotUser; - userData = gotUserData; - - done(); - // if (conn.readyState === 0) { - - // // user = await createUser(); - // // userToken = user.tokens[0].token; - // const {user: gotUser, token: gotToken} = await createUser(); - // user = gotUser; - // userToken = gotToken; - - // done() - - // } else { - - // // user = await createUser(); - // // userToken = user.tokens[0].token; - // const {user: gotUser, token: gotToken} = await createUser(); - // user = gotUser; - // userToken = gotToken; - - // done(); - // } -}) - -afterEach(async(done) => { - - await User.deleteMany({}); - done(); -}) - -test("When authorized, should return user, with no sensitive data", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const response = await appSession - .get(`/user-service/user`) - .send() - .expect(200); - - expect(response.body.password).toEqual(undefined); - expect(response.body.privateKey).toEqual(undefined); - expect(response.body.publicKey).toEqual(undefined); - expect(response.body.tokens).toEqual(undefined); - expect(response.body.tempTokens).toEqual(undefined); - expect(response.body.email).not.toEqual(undefined); -}) - -test("When not authorized should return 401 for user", async() => { - - const response = await request(app) - .get(`/user-service/user`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When giving credentials, should login user, and not return sensitive info", async() => { - - const response = await request(app) - .post(`/user-service/login`) - .send({ - email: user.email, - password: "12345678" - }) - .expect(200); - - expect(response.body.user.password).toEqual(undefined); - expect(response.body.user.privateKey).toEqual(undefined); - expect(response.body.user.publicKey).toEqual(undefined); - expect(response.body.user.tokens).toEqual(undefined); - expect(response.body.user.tempTokens).toEqual(undefined); -}) - -test("When giving wrong creditentials, should return 500 error", async() => { - - const response = await request(app) - .post(`/user-service/login`) - .send({ - email: user.email, - password: "1454524" - }) - .expect(500); - - expect(response.body).toEqual({}); -}) - -test("When authorized should logout user", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - await appSession - .post(`/user-service/logout`) - .send() - .expect(200); -}) - -test("When not authorized for logout, should return 401 error", async() => { - - const response = await request(app) - .post(`/user-service/logout`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When authoized should logout all sessions of a user", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - await appSession - .post(`/user-service/logout-all`) - .send() - .expect(200); -}) - -test("When not authorized for logout all, should return 401 error", async() => { - - const response = await request(app) - .post(`/user-service/logout-all`) - .send() - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When giving user data, should create account without returning sensitive data", async() => { - - const response = await request(app) - .post(`/user-service/create`) - .send({ - email: "test55@gmail.com", - password: "12345678" - }) - .expect(201); - - expect(response.body.password).toEqual(undefined); - expect(response.body.privateKey).toEqual(undefined); - expect(response.body.publicKey).toEqual(undefined); - expect(response.body.tokens).toEqual(undefined); - expect(response.body.tempTokens).toEqual(undefined); -}) - -test("When env variable is set to block accounts, should return 401 error", async() => { - - env.createAcctBlocked = true; - - await request(app) - .post(`/user-service/create`) - .send({ - email: "test55@gmail.com", - password: "12345678" - }) - .expect(401); - - env.createAcctBlocked = false; -}) - -test("When giving old password, and new password, should change password", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const oldPassword = "12345678"; - const newPassword = "987654321"; - - await appSession - .post(`/user-service/change-password`) - .send({ - oldPassword, - newPassword - }) - .expect(200); - - await request(app) - .post(`/user-service/login`) - .send({ - email: user.email, - password: oldPassword - }) - .expect(500); - - await request(app) - .post(`/user-service/login`) - .send({ - email: user.email, - password: newPassword - }) - .expect(200); -}) - -test("When giving wrong old password for change password, should return 500 error", async() => { - - const appSession = session(app); - await loginUser(appSession, userData); - - const wrongOldPassword = "12342345"; - const newPassword = "987654321"; - - await appSession - .post(`/user-service/change-password`) - .send({ - wrongOldPassword, - newPassword - }) - .expect(500); -}) - -test("When not authorized for change password, should return 401 error", async() => { - - const oldPassword = "12345678"; - const newPassword = "987654321"; - - const response = await request(app) - .post(`/user-service/change-password`) - .send({ - oldPassword, - newPassword - }) - .expect(401); - - expect(response.body).toEqual({}); -}) - -test("When not email verified should not change password", async() => { - - const appSession = session(app); - - const {userData: userData2} = await createUserNotEmailVerified() - await loginUser(appSession, userData2); - - const oldPassword = "12345678"; - const newPassword = "987654321"; - - await appSession - .post(`/user-service/change-password`) - .send({ - oldPassword, - newPassword - }) - .expect(401); -}) - -test("When not email verified, but email verification disabled, should change password", async() => { - - env.disableEmailVerification = true; - - const appSession = session(app); - - const {userData: userData2} = await createUserNotEmailVerified(); - await loginUser(appSession, userData2); - - const oldPassword = "12345678"; - const newPassword = "987654321"; - - await appSession - .post(`/user-service/change-password`) - .send({ - oldPassword, - newPassword - }) - .expect(200); - - await request(app) - .post(`/user-service/login`) - .send({ - email: userData2.email, - password: oldPassword - }) - .expect(500); - - await request(app) - .post(`/user-service/login`) - .send({ - email: userData2.email, - password: newPassword - }) - .expect(200); - - env.disableEmailVerification = undefined; -}) - -test("When not giving email, should not create user", async() => { - - await request(app) - .post(`/user-service/create`) - .send({ - email: "", - password: "12345678" - }) - .expect(500); -}) - -test("When giving not a valid email, should not create user", async() => { - - await request(app) - .post(`/user-service/create`) - .send({ - email: "imnotvalid", - password: "12345678" - }) - .expect(500); -}) - -test("When not giving long enouph password, should not create user", async() => { - - await request(app) - .post(`/user-service/create`) - .send({ - email: "test12341@email.com", - password: "123" - }) - .expect(500); -}) - -test("When giving duplicate email, should not create user", async() => { - - await request(app) - .post(`/user-service/create`) - .send({ - email: "test55@gmail.com", - password: "12345678" - }) - .expect(201); - - - await request(app) - .post(`/user-service/create`) - .send({ - email: "test55@gmail.com", - password: "12345678" - }) - .expect(500); -}) - -test("When authenticated should get refresh token", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - await appSession.post("/user-service/get-token").send().expect(201); -}) - -test("When authenticated should get detailed user", async() => { - - const appSession = session(app); - - await loginUser(appSession, userData); - - const response = await appSession.get("/user-service/user-detailed").send().expect(200); - - const responseData = response.body; - const email = responseData.email; - const username = responseData.username; - const password = responseData.password; - const emailVerified = responseData.emailVerified; - const tokens = responseData.tokens; - const publicKey = responseData.publicKey; - const privateKey = responseData.privateKey; - - expect(email).toEqual(userData.email); - expect(username).toEqual(userData.username); - expect(password).toEqual(undefined); - expect(emailVerified).toEqual(true); - expect(tokens).toEqual(undefined); - expect(publicKey).toEqual(undefined); - expect(privateKey).toEqual(undefined) -}) - -test("When not authenticated should not get detailed user", async() => { - - await request(app).get("/user-service/user-detailed").send().expect(401); -}) - -test("When not email verified should not get detailed user", async() => { - - const appSession = session(app); - - const {userData: userData2} = await createUserNotEmailVerified(); - await loginUser(appSession, userData2); - - await request(app).get("/user-service/user-detailed").send().expect(401); -}) - -test("When not email verified but email verification disabled should get detailed user", async() => { - - env.disableEmailVerification = true; - - const appSession = session(app); - - const {userData: userData2} = await createUserNotEmailVerified(); - await loginUser(appSession, userData2); - - const response = await appSession.get("/user-service/user-detailed").send().expect(200); - - const responseData = response.body; - const email = responseData.email; - const username = responseData.username; - const password = responseData.password; - const emailVerified = responseData.emailVerified; - const tokens = responseData.tokens; - const publicKey = responseData.publicKey; - const privateKey = responseData.privateKey; - - expect(email).toEqual(userData2.email); - expect(username).toEqual(userData2.username); - expect(password).toEqual(undefined); - expect(emailVerified).toEqual(false); - expect(tokens).toEqual(undefined); - expect(publicKey).toEqual(undefined); - expect(privateKey).toEqual(undefined) - - env.disableEmailVerification = undefined; -}) - -test("When giving existing email should send password reset email", async() => { - - await request(app).post("/user-service/send-password-reset").send({email: userData.email}).expect(200); -}) - -test("When giving not existing email should return 404", async() => { - - await request(app).post("/user-service/send-password-reset").send({email: "idontexist@void.com"}).expect(404); -}) - -test("When autheniticated should set users name", async() => { - - const appSession = session(app); - await loginUser(appSession, userData); - - await appSession.patch("/user-service/add-name").send({name: "testname"}).expect(200); -}) - -test("When giving a not valid name length should not set users name", async() => { - - const appSession = session(app); - await loginUser(appSession, userData); - - await appSession.patch("/user-service/add-name").send({name: ""}).expect(403); -}) - -test("When not giving name should not set users name", async() => { - - const appSession = session(app); - await loginUser(appSession, userData); - - await appSession.patch("/user-service/add-name").send().expect(403); -}) - diff --git a/tests/fixtures/createFile.js b/tests/fixtures/createFile.js deleted file mode 100644 index efc9d67..0000000 --- a/tests/fixtures/createFile.js +++ /dev/null @@ -1,32 +0,0 @@ -import mongoose from "../../dist/db/mongoose"; -const conn = mongoose.connection; -const crypto = require("crypto"); -const fs = require("fs"); - -const createFile = (filename, filepath, metadata, user) => { - return new Promise((resolve, reject) => { - - const password = user.getEncryptionKey(); //process.env.KEY; - - const initVect = metadata.IV || crypto.randomBytes(16); - - const CIPHER_KEY = crypto.createHash('sha256').update(password).digest() - - const cipher = crypto.createCipheriv('aes256', CIPHER_KEY, initVect); - - const fileReadStream = fs.createReadStream(filepath); - - let bucket = new mongoose.mongo.GridFSBucket(conn.db, { - chunkSizeBytes: 1024 * 255 - }); - - const uploadStream = bucket.openUploadStream(filename, {metadata}); - - fileReadStream.pipe(cipher).pipe(uploadStream).on("finish", (file) => { - - resolve(file); - }); - }) -} - -module.exports = createFile; \ No newline at end of file diff --git a/tests/fixtures/createUser.js b/tests/fixtures/createUser.js deleted file mode 100644 index 118a033..0000000 --- a/tests/fixtures/createUser.js +++ /dev/null @@ -1,33 +0,0 @@ -const jwt = require("jsonwebtoken"); -import mongoose from "../../dist/db/mongoose"; -import User from "../../dist/models/user"; -import env from "../../dist/enviroment/env"; - -const createUser = async() => { - - env.key = "1234"; - env.password = "1234"; - process.env.KEY = "1234"; - process.env.PASSWORD = "1234"; - - const userID = new mongoose.Types.ObjectId(); - const userData = { - _id: userID, - name: "Test User", - email: "test2@test.com", - password: "12345678", - emailVerified: true, - tokens: [] - } - - let user = new User(userData); - await user.save(); - - await user.generateEncryptionKeys(); - - await user.generateAuthToken("192.168.0.1"); - - return {user, userData}; -} - -module.exports = createUser; \ No newline at end of file diff --git a/tests/fixtures/createUser2.js b/tests/fixtures/createUser2.js deleted file mode 100644 index 86f917c..0000000 --- a/tests/fixtures/createUser2.js +++ /dev/null @@ -1,36 +0,0 @@ -const jwt = require("jsonwebtoken"); -import mongoose from "../../dist/db/mongoose"; -import User from "../../dist/models/user"; -import env from "../../dist/enviroment/env"; - -const createUser2 = async() => { - - env.key = "1234"; - env.password = "1234"; - process.env.KEY = "1234"; - process.env.PASSWORD = "1234"; - - const userID = new mongoose.Types.ObjectId(); - const userData = { - _id: userID, - name: "Test User", - email: "test3@test.com", - password: "123456789", - emailVerified: true, - } - - let user = new User(userData); - await user.save(); - - await user.generateEncryptionKeys(); - - const token = await user.generateAuthToken(); - - user.emailVerified = true; - - await user.save(); - - return {user, userData}; -} - -module.exports = createUser2; \ No newline at end of file diff --git a/tests/fixtures/createUserDbType.js b/tests/fixtures/createUserDbType.js deleted file mode 100644 index c96a07f..0000000 --- a/tests/fixtures/createUserDbType.js +++ /dev/null @@ -1,35 +0,0 @@ -const jwt = require("jsonwebtoken"); -import mongoose from "../../dist/db/mongoose"; -import User from "../../dist/models/user"; -import env from "../../dist/enviroment/env"; - -const createUser = async(s3Enabled = false, googleDriveEnabled = false) => { - - env.key = "1234"; - env.password = "1234"; - process.env.KEY = "1234"; - process.env.PASSWORD = "1234"; - - const userID = new mongoose.Types.ObjectId(); - const userData = { - _id: userID, - name: "Test User", - email: "test9@test.com", - password: "12345678", - emailVerified: true, - tokens: [], - s3Enabled, - googleDriveEnabled - } - - let user = new User(userData); - await user.save(); - - await user.generateEncryptionKeys(); - - await user.generateAuthToken("192.168.0.1"); - - return {user, userData}; -} - -module.exports = createUser; \ No newline at end of file diff --git a/tests/fixtures/createUserNotEmailVerified.js b/tests/fixtures/createUserNotEmailVerified.js deleted file mode 100644 index c4a1efc..0000000 --- a/tests/fixtures/createUserNotEmailVerified.js +++ /dev/null @@ -1,33 +0,0 @@ -const jwt = require("jsonwebtoken"); -import mongoose from "../../dist/db/mongoose"; -import User from "../../dist/models/user"; -import env from "../../dist/enviroment/env"; - -const createUser = async() => { - - env.key = "1234"; - env.password = "1234"; - process.env.KEY = "1234"; - process.env.PASSWORD = "1234"; - - const userID = new mongoose.Types.ObjectId(); - const userData = { - _id: userID, - name: "Test User", - email: "test23@test.com", - password: "12345678", - emailVerified: false, - tokens: [] - } - - let user = new User(userData); - await user.save(); - - await user.generateEncryptionKeys(); - - await user.generateAuthToken("192.168.0.1"); - - return {user, userData}; -} - -module.exports = createUser; \ No newline at end of file diff --git a/tests/fixtures/loginUser.js b/tests/fixtures/loginUser.js deleted file mode 100644 index 78fd8b6..0000000 --- a/tests/fixtures/loginUser.js +++ /dev/null @@ -1,14 +0,0 @@ -import mongoose from "../../dist/db/mongoose"; -import User from "../../dist/models/user"; -import env from "../../dist/enviroment/env"; -const request = require("supertest"); - -const loginUser = async(appSession, userData) => { - - const response = await appSession.post("/user-service/login") - .send({email: userData.email, password: userData.password}).expect(200); - - return response.body; -} - -module.exports = loginUser; \ No newline at end of file diff --git a/tests/fixtures/media/check.svg b/tests/fixtures/media/check.svg deleted file mode 100644 index 36017ae..0000000 --- a/tests/fixtures/media/check.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - diff --git a/tests/fixtures/media/error.png b/tests/fixtures/media/error.png deleted file mode 100644 index e9ef165..0000000 Binary files a/tests/fixtures/media/error.png and /dev/null differ diff --git a/tests/fixtures/media/folder.png b/tests/fixtures/media/folder.png deleted file mode 100644 index 3d49f45..0000000 Binary files a/tests/fixtures/media/folder.png and /dev/null differ diff --git a/tests/services/FileService/index.test.js b/tests/services/FileService/index.test.js deleted file mode 100644 index f72afef..0000000 --- a/tests/services/FileService/index.test.js +++ /dev/null @@ -1,748 +0,0 @@ -import User from "../../../dist/models/user"; -import mongoose from "../../../dist/db/mongoose"; -const conn = mongoose.connection; -const createUser = require("../../fixtures/createUser"); -const createUser2 = require("../../fixtures/createUser2"); -const path = require("path"); -const createFile = require("../../fixtures/createFile"); -const crypto = require("crypto"); -import createThumbnail from "../../../dist/services/ChunkService/utils/createThumbnail"; -import env from "../../../dist/enviroment/env"; -const jwt = require("jsonwebtoken"); -const ObjectID = require('mongodb').ObjectID -import Folder from "../../../dist/models/folder"; -import FileService from "../../../dist/services/FileService"; -const fileService = new FileService(); -const createUserDbType = require("../../fixtures/createUserDbType"); - -let user; -let file; - -process.env.KEY = "1234"; -env.key = "1234"; - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - - const initVect = crypto.randomBytes(16); - - // user = await createUser(); - const {user: gotUser} = await createUser(); - user = gotUser; - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user._id, - parent: "/", - parentList: "/", - "IV": initVect - } - - file = await createFile(filename, filepath, metadata, user); - - done(); - - // if (conn.readyState === 0) { - - // conn.once("open", async() => { - - // const initVect = crypto.randomBytes(16); - - // // user = await createUser(); - // const {user: gotUser} = await createUser(); - // user = gotUser; - - // const filename = "bunny.png"; - // const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - // const metadata = { - // owner: user._id, - // parent: "/", - // parentList: "/", - // "IV": initVect - // } - - // file = await createFile(filename, filepath, metadata, user); - - // done(); - // }) - // } else { - - // const initVect = crypto.randomBytes(16); - // //user = await createUser(); - // const {user: gotUser} = await createUser(); - // user = gotUser; - - // const filename = "bunny.png"; - // const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - // const metadata = { - // owner: user._id, - // parent: "/", - // parentList: "/", - // "IV": initVect - // } - - // file = await createFile(filename, filepath, metadata, user); - - // done(); - // } -}) - - -afterEach( async(done) => { - - //const gfs = Grid(conn.db, mongoose.mongo); - let bucket = new mongoose.mongo.GridFSBucket(conn.db); - - await User.deleteMany({}); - await Folder.deleteMany({}); - - const allFiles = await conn.db.collection("fs.files").find({}).toArray(); - - for (let i = 0; i < allFiles.length; i++) { - - const currentFileID = allFiles[i]._id; - await bucket.delete(ObjectID(currentFileID)); - } - - done(); - -}) - -// test("When giving user, and thumbnail id, should get thumbnail" , async() => { - -// const thumbnailFile = await createThumbnail(file, file.filename, user); -// const thumbnailID = thumbnailFile.metadata.thumbnailID; - - -// const recievedThumbnail = await fileService.getThumbnail(user, thumbnailID); - - -// expect(recievedThumbnail.buffer.length).not.toBe(0); -// }) - -// test("When giving the wrong user for thumbnail, should throw not authorized error", async() => { - -// const thumbnailFile = await createThumbnail(file, file.filename, user); -// const thumbnailID = thumbnailFile.metadata.thumbnailID; -// const wrongUser = { -// _id: "123456789012" -// } - -// await expect(fileService.getThumbnail(wrongUser, thumbnailID)).rejects.toThrow(); -// }) - -test("When giving file, should remove one time link", async() => { - - await fileService.removePublicOneTimeLink(file); -}) - -test("When giving userID, and fileID, should remove public link", async() => { - - const userID = user._id; - const fileID = file._id; - - await fileService.removeLink(userID, fileID); -}) - -test("When giving the wrong userID to remove public link, should throw not found error", async() => { - - const wrongUserID = "123456789012"; - const fileID = file._id; - - await expect(fileService.removeLink(wrongUserID, fileID)).rejects.toThrow(); -}) - -test("When giving user, and fileID, should make file public and return token", async() => { - - const fileID = file._id; - - const recievedToken = await fileService.makePublic(user._id, fileID); - - expect(recievedToken.length).not.toBe(0); -}) - -test("When giving the wrong user to make file public, should throw not found error", async() => { - - const wrongUser = { - _id: "123456789012" - } - const fileID = file._id; - - await expect(fileService.makePublic(wrongUser, fileID)).rejects.toThrow(); -}) - -test("When giving fileID, should return file info if public", async() => { - - const userID = user._id; - const fileID = file._id; - const token = jwt.sign({_id: userID.toString()}, env.password); - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - - - const receivedFile = await fileService.getPublicInfo(fileID, token); - - expect(receivedFile).not.toBe(null); - expect(receivedFile).not.toBe(undefined); -}) - -test("When giving fileID of a file thats not public, should throw not found error", async() => { - - const fileID = file._id; - - await expect(fileService.getPublicInfo(fileID)).rejects.toThrow(); -}) - -test("When giving wrong tempToken for public file, should throw not found error", async() => { - - const userID = user._id; - const fileID = file._id; - const token = jwt.sign({_id: userID.toString()}, env.password); - const wrongTempToken = "12345"; - await conn.db.collection("fs.files") - .findOneAndUpdate({"_id": ObjectID(fileID), - "metadata.owner": userID}, - {"$set": {"metadata.linkType": "public", "metadata.link": token}}) - - await expect(fileService.getPublicInfo(fileID, wrongTempToken)).rejects.toThrow(); -}) - -test("When giving userID and fileID, should make one time public link", async() => { - - const userID = user._id; - const fileID = file._id; - - await fileService.makeOneTimePublic(userID, fileID); -}) - -test("When giving wrong userID for one time public link, should throw not found error", async() => { - - const wrongUserID = "123456789012"; - const fileID = file._id; - - await expect(fileService.makeOneTimePublic(wrongUserID, fileID)).rejects.toThrow(); -}) - -test("When giving userID and fileID, should return file info", async() => { - - const userID = user._id; - const fileID = file._id; - - const receivedFile = await fileService.getFileInfo(userID, fileID); - - expect(receivedFile).not.toBe(null); - expect(receivedFile).not.toBe(undefined); -}) - -test("When giving the wrong userID for file info, should throw not found error", async() => { - - const wrongUserID = "123456789012"; - const fileID = file._id; - - await expect(fileService.getFileInfo(wrongUserID, fileID)).rejects.toThrow(); -}) - -test("When giving userID, should return quicklist", async() => { - - const userID = user._id; - - const receivedQuickList = await fileService.getQuickList(userID); - - expect(receivedQuickList.length).toBe(1); -}) - -test("When giving wrong userID for quicklist, should return list with 0 length", async() => { - - const wrongUserID = "123456789012"; - - const receivedQuickList = await fileService.getQuickList(wrongUserID); - - expect(receivedQuickList.length).toBe(0); -}) - -test("When giving userID, and default query, should get file list", async() => { - - const userID = user._id; - - const receivedFileList = await fileService.getList(userID, {}); - - expect(receivedFileList.length).toBe(1); -}) - -test("When giving wrong userID for file list, should return list with 0 length", async() => { - - const wrongUserID = "123456789012"; - - const receivedList = await fileService.getList(wrongUserID, {}); - - expect(receivedList.length).toBe(0); -}) - -// test("When giving user, should create download token", async() => { - -// const recievedToken = await fileService.getDownloadToken(user); - -// expect(recievedToken.length).not.toBe(0); -// }) - -// test("When giving user and cookie, should create video download token", async() => { - -// const recievedToken = await fileService.getDownloadTokenVideo(user, {}); - -// expect(recievedToken.length).not.toBe(0); -// }) - -// test("When giving user and tempToken, should remove temp token", async() => { - -// const tempToken = await user.generateTempAuthToken(); - -// await fileService.removeTempToken(user, tempToken); -// }) - -test("When giving userID and search query, should return suggested list", async() => { - - const userID = user._id; - const search = "bunn"; - - const {fileList} = await fileService.getSuggestedList(userID, search); - - expect(fileList.length).toBe(1); -}) - -test("When giving wrong userID for suggested list, should return list with length of 0", async() => { - - const wrongUserID = "123456789012"; - const search = "bunn"; - - const {fileList} = await fileService.getSuggestedList(wrongUserID, search); - - expect(fileList.length).toBe(0); -}) - -test("When giving userID, fileID, and title, should rename file", async() => { - - const userID = user._id; - const fileID = file._id; - const title = "new name"; - - await fileService.renameFile(userID, fileID, title); -}) - -test("When giving the wrong userID for rename file, should throw not found error", async() => { - - const wrongUserID = "123456789012"; - const fileID = file._id; - const title = "new name"; - - await expect(fileService.renameFile(wrongUserID, fileID, title)).rejects.toThrow(); -}) - -test("When giving the userID, fileID, and parentID should move file", async() => { - - const userID = user._id; - const fileID = file._id; - const folder = new Folder({ - owner: user._id, - parent: "/", - parentList: ["/"], - name: "folder" - }); - - await folder.save(); - - await fileService.moveFile(userID, fileID, folder._id) -}) - -test("When giving the wrong userID for move file should throw a not found error", async() => { - - const wrongUserID = "123456789012"; - const fileID = file._id; - const folder = new Folder({ - owner: user._id, - parent: "/", - parentList: ["/"], - name: "folder" - }); - - await folder.save(); - - await expect(fileService.moveFile(wrongUserID, fileID, folder._id)).rejects.toThrow(); -}) - -test("When giving an non existing folderID for file move, should throw not found error", async() => { - - const userID = user._id; - const fileID = file._id; - const wrongFolderID = "123456789012"; - - await expect(fileService.moveFile(userID, fileID, wrongFolderID)).rejects.toThrow(); -}) - -test("When giving user with personal data enabled, should return personal file when getting file list", async() => { - - const initVect = crypto.randomBytes(16); - - const {userData, user: user2} = await createUserDbType(true); - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - - const receivedFileList = await fileService.getList(user2, {}); - - expect(receivedFileList.length).toBe(2); - expect(receivedFileList[0].metadata.personalFile).toBe(undefined); - expect(receivedFileList[1].metadata.personalFile).toBe(true); -}) - -test("When user no longer has personal file enabled, should no longer show personal file", async() => { - - const initVect = crypto.randomBytes(16); - - const {userData, user: user2} = await createUserDbType(); - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - - const receivedFileList = await fileService.getList(user2, {}); - - expect(receivedFileList.length).toBe(1); - expect(receivedFileList[0].metadata.personalFile).toBe(undefined); -}) - -test("When user no longer has personal file enabled, and there is only personal files should return empty list", async() => { - - const initVect = crypto.randomBytes(16); - - const {userData, user: user2} = await createUserDbType(); - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - - const receivedFileList = await fileService.getList(user2, {}); - - expect(receivedFileList.length).toBe(0); -}) - -test("When personal file enabled should return quicklist with personal file", async() => { - - const initVect = crypto.randomBytes(16); - - const {userData, user: user2} = await createUserDbType(true); - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - - const receivedQuickList = await fileService.getQuickList(user2); - - expect(receivedQuickList.length).toBe(2); - expect(receivedQuickList[0].metadata.personalFile).toBe(undefined); - expect(receivedQuickList[1].metadata.personalFile).toBe(true); -}) - -test("When personal file is no longer enabled, should return quicklist without personal file", async() => { - - const initVect = crypto.randomBytes(16); - - const {userData, user: user2} = await createUserDbType(); - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - - const receivedQuickList = await fileService.getQuickList(user2); - - expect(receivedQuickList.length).toBe(1); - expect(receivedQuickList[0].metadata.personalFile).toBe(undefined); - -}) - -test("When personal file is no longer enabled, and there are only files that are personal should return empty quicklist", async() => { - - const initVect = crypto.randomBytes(16); - - const {userData, user: user2} = await createUserDbType(); - - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - - const receivedQuickList = await fileService.getQuickList(user2); - - expect(receivedQuickList.length).toBe(0); - -}) - -test("When giving search query should get searched list", async() => { - - const {user: user2} = await createUser2() - - const initVect = crypto.randomBytes(16); - - const filename = "bunny.png"; - const filename2 = "dog.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata, user2); - const file4 = await createFile(filename2, filepath, metadata, user2); - - const receivedFileList = await fileService.getList(user2, {search: "bunny"}) - - expect(receivedFileList.length).toBe(2); - expect(receivedFileList[0].filename).toBe(filename); - expect(receivedFileList[1].filename).toBe(filename); - -}) - -test("When giving search query and having personal file should searched list with personal file", async() => { - - const {user: user2} = await createUserDbType(true) - - const initVect = crypto.randomBytes(16); - - const filename = "bunny.png"; - const filename2 = "dog.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - const file4 = await createFile(filename2, filepath, metadata, user2); - - const receivedFileList = await fileService.getList(user2, {search: "bunny"}) - - expect(receivedFileList.length).toBe(2); - expect(receivedFileList[0].filename).toBe(filename); - expect(receivedFileList[1].filename).toBe(filename); - expect(receivedFileList[0].metadata.personalFile).toBe(true) -}) - -test("When giving search with user that has personal file disabled, should return empty list if all files are personal", async() => { - - const {user: user2} = await createUserDbType() - - const initVect = crypto.randomBytes(16); - - const filename = "bunny.png"; - const filename2 = "dog.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - const file4 = await createFile(filename2, filepath, metadata, user2); - - const receivedFileList = await fileService.getList(user2, {search: "bunny"}) - - expect(receivedFileList.length).toBe(0); -}) - -test("When giving search query with user that has disabled personal file should return list without personal file", async() => { - - const {user: user2} = await createUser2() - - const initVect = crypto.randomBytes(16); - - const filename = "bunny.png"; - const filename2 = "dog.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - } - - const metadata2 = { - owner: user2._id, - parent: "/", - parentList: "/", - "IV": initVect, - personalFile: true - } - - const file2 = await createFile(filename, filepath, metadata, user2); - const file3 = await createFile(filename, filepath, metadata2, user2); - const file4 = await createFile(filename2, filepath, metadata, user2); - - const receivedFileList = await fileService.getList(user2, {search: "bunny"}) - - expect(receivedFileList.length).toBe(1); - expect(receivedFileList[0].filename).toBe(filename); - expect(receivedFileList[0].metadata.personalFile).toBe(undefined) - -}) -// test("When giving userID, and fileID, should remove file", async() => { - -// const userID = user._id; -// const fileID = file._id; - -// await fileService.deleteFile(userID, fileID); -// }) - -// test("When giving the wrong userID for delete file, should throw not found error", async() => { - -// const wrongUserID = "123456789012"; -// const fileID = file._id; - -// await expect(fileService.deleteFile(wrongUserID, fileID)).rejects.toThrow(); -// }) \ No newline at end of file diff --git a/tests/services/FolderService/index.test.js b/tests/services/FolderService/index.test.js deleted file mode 100644 index dfefef8..0000000 --- a/tests/services/FolderService/index.test.js +++ /dev/null @@ -1,620 +0,0 @@ -import User from "../../../dist/models/user"; -const createUser = require("../../fixtures/createUser"); -import Folder from "../../../dist/models/folder"; -import mongoose from "../../../dist/db/mongoose" -const conn = mongoose.connection; -const crypto = require("crypto"); -const createFile = require("../../fixtures/createFile"); -const path = require("path"); -const ObjectID = require('mongodb').ObjectID -import FolderService from "../../../dist/services/FolderService" -const folderService = new FolderService(); -const createUserDbType = require("../../fixtures/createUserDbType"); -const createUser2 = require("../../fixtures/createUser2"); - -let user; -let folder; - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - - const {user: gotUser} = await createUser(); - user = gotUser; - - const folderData = { - name: "bunny", - parent: "/", - owner: user._id, - parentList: ["/"] - } - - folder = new Folder(folderData); - await folder.save(); - - done(); - - // if (conn.readyState === 0) { - - // conn.once("open", async() => { - - // const {user: gotUser} = await createUser(); - // user = gotUser; - - // const folderData = { - // name: "bunny", - // parent: "/", - // owner: user._id, - // parentList: ["/"] - // } - - // folder = new Folder(folderData); - // await folder.save(); - - // done(); - // }) - - // } else { - - // // user = await createUser(); - // const {user: gotUser} = await createUser(); - // user = gotUser; - - // const folderData = { - // name: "bunny", - // parent: "/", - // owner: user._id, - // parentList: ["/"] - // } - - // folder = new Folder(folderData); - // await folder.save(); - - // done(); - // } - -}) - -afterEach(async(done) => { - - let bucket = new mongoose.mongo.GridFSBucket(conn.db); - - await User.deleteMany({}); - await Folder.deleteMany({}); - - // const gfs = Grid(conn.db, mongoose.mongo); - - const allFiles = await conn.db.collection("fs.files").find({}).toArray(); - - for (let i = 0; i < allFiles.length; i++) { - - const currentFileID = allFiles[i]._id; - await bucket.delete(ObjectID(currentFileID)); - } - - done(); -}) - -test("When giving userID and folderID, should return folder info" , async() => { - - const userID = user._id; - const folderID = folder._id; - - const receivedFolder = await folderService.getFolderInfo(userID, folderID); - - expect(receivedFolder._id).toEqual(folderID); -}) - -test("When giving the wrong userID for folder info, should return not found error", async() => { - - const wrongUserID = "123456789012"; - const folderID = folder._id; - - await expect(folderService.getFolderInfo(wrongUserID, folderID)).rejects.toThrow(); -}) - -test("When giving userID and folderID, should return subfolder list", async() => { - - const userID = user._id; - const folderID = folder._id; - - const {folderNameList, folderIDList} = await folderService.getFolderSublist(userID, folderID); - - expect(folderNameList.length).toBe(2); - expect(folderIDList.length).toBe(2); -}) - -test("When giving the wrong userID for subfolder list, should throw not found error", async() => { - - const wrongUserID = "123456789012"; - const folderID = folder._id; - - await expect(folderService.getFolderSublist(wrongUserID, folderID)).rejects.toThrow(); -}) - -test("When giving userID and query with default values, should return folder list", async() => { - - const userID = user._id; - - - const receivedFolderList = await folderService.getFolderList(userID, {}); - - - expect(receivedFolderList.length).toBe(1); -}) - -test("When giving wrong userID for folder list, should return empty list", async() => { - - const wrongUserID = "123456789012"; - - - const receivedFolderList = await folderService.getFolderList(wrongUserID, {}); - - - expect(receivedFolderList.length).toBe(0); -}) - -test("When giving userID, folderID, and title, should rename folder", async() => { - - const userID = user._id; - const folderID = folder._id; - const title = "coconot"; - - await folderService.renameFolder(userID, folderID, title); - const updatedFolder = await Folder.findById(folderID); - - expect(updatedFolder.name).toBe(title); -}) - -test("When giving wrong userID for rename folder, should throw not found error", async() => { - - const wrongUserID = "123456789012"; - const folderID = folder._id; - const title = "coconot"; - - - await expect(folderService.renameFolder(wrongUserID, folderID, title)).rejects.toThrow(); -}) - -test("When giving userID, folderID, and parentID, should move folder", async() => { - - const newFolder = new Folder({ - name: "new folder", - owner: user._id, - parent: "1234", - parentList: ["/", "1234"] - }) - - await newFolder.save(); - - const userID = user._id; - const folderID = folder._id; - const parentID = newFolder._id; - - - await folderService.moveFolder(userID, folderID, parentID); - const updatedFolder = await Folder.findById(folderID); - - - expect(updatedFolder.parent.toString()).toBe(parentID.toString()); -}) - -test("When giving the wrong userID for move folder, should throw new found error", async() => { - - const newFolder = new Folder({ - name: "new folder", - owner: user._id, - parent: "1234", - parentList: ["/", "1234"] - }) - - await newFolder.save(); - - const wrongUserID = "123456789012"; - const folderID = folder._id; - const parentID = newFolder._id; - - await expect(folderService.moveFolder(wrongUserID, folderID, parentID)).rejects.toThrow() -}) - -test("When giving a parentID that does not exist for move folder, should throw not found error", async() => { - - const userID = user._id; - const folderID = folder._id; - const wrongParentID = "123456789012"; - - await expect(folderService.moveFolder(userID, folderID, wrongParentID)).rejects.toThrow() -}) - -test("When giving userID, folderID, and parentID, for folder with subitems, should move all items", async() => { - - const userID = user._id; - - const folderOne = new Folder({ - name: "new folder", - owner: user._id, - parent: "/", - parentList: ["/"] - }) - - const folderID = folderOne._id; - - await folderOne.save(); - - const folderTwo = new Folder({ - name: "new folder 2", - owner: user._id, - parent: folderOne._id, - parentList: ["/", folderOne._id.toString()] - }) - - await folderTwo.save(); - - const folderThree = new Folder({ - name: "new folder3 ", - owner: user._id, - parent: folderTwo._id, - parentList: ["/", folderOne._id.toString(), folderTwo._id.toString()] - }) - - await folderThree.save(); - - const folderFour = new Folder({ - name: "new folder 4", - owner: user._id, - parent: "/", - parentList: ["/"] - }) - - const parentID = folderFour._id; - - await folderFour.save(); - - process.env.KEY = "1234"; - - const initVect = crypto.randomBytes(16); - const filename = "bunny.png"; - const filepath = path.join(__dirname, "../../fixtures/media/check.svg") - const metadata = { - owner: user._id, - parent: folderOne._id.toString(), - parentList: "/,"+folderOne._id.toString(), - "IV": initVect - } - - const fileOne = await createFile(filename, filepath, metadata, user); - - const metadataTwo = { - owner: user._id, - parent: folderTwo._id.toString(), - parentList: "/,"+folderTwo._id.toString(), - "IV": initVect - } - - const fileTwo = await createFile(filename, filepath, metadataTwo, user); - - const metadataThree = { - owner: user._id, - parent: folderThree._id.toString(), - parentList: "/,"+folderThree._id.toString(), - "IV": initVect - } - - const fileThree = await createFile(filename, filepath, metadataThree, user); - - - - await folderService.moveFolder(userID, folderID, parentID); - const updatedFolderOne = await Folder.findById(folderOne._id); - const updatedFolderTwo = await Folder.findById(folderTwo._id); - const updatedFolderThree = await Folder.findById(folderThree._id); - - - - expect(updatedFolderOne.parent.toString()).toBe(parentID.toString()); - expect(updatedFolderOne.parentList[0].toString()).toBe("/"); - expect(updatedFolderOne.parentList[1].toString()).toBe(parentID.toString()); - expect(updatedFolderOne.parentList.length).toBe(2); - - expect(updatedFolderTwo.parentList[0].toString()).toBe("/"); - expect(updatedFolderTwo.parentList[1].toString()).toBe(parentID.toString()); - expect(updatedFolderTwo.parentList[2].toString()).toBe(folderOne._id.toString()); - expect(updatedFolderTwo.parentList.length).toBe(3); - - expect(updatedFolderThree.parentList[0].toString()).toBe("/"); - expect(updatedFolderThree.parentList[1].toString()).toBe(parentID.toString()); - expect(updatedFolderThree.parentList[2].toString()).toBe(folderOne._id.toString()); - expect(updatedFolderThree.parentList[3].toString()).toBe(folderTwo._id.toString()); - expect(updatedFolderThree.parentList.length).toBe(4); -}) - -test("When searching for folder should return list of searched items", async() => { - - const {user: user2} = await createUser2(); - - const folderData2 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"] - } - - - const folderData3 = { - name: "dog", - parent: "/", - owner: user2._id, - parentList: ["/"] - } - - - const folder2 = new Folder(folderData2); - const folder3 = new Folder(folderData2); - const folder4 = new Folder(folderData3); - - await folder2.save(); - await folder3.save(); - await folder4.save(); - - const folderList = await folderService.getFolderList(user2, {search: "bunny"}) - - expect(folderList.length).toBe(2); -}) - -test("When searching for list with personal folders should return list with personal folders", async() => { - - const {user: user2} = await createUserDbType(true); - - const folderData2 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - - const folderData3 = { - name: "dog", - parent: "/", - owner: user2._id, - parentList: ["/"] - } - - - const folder2 = new Folder(folderData2); - const folder3 = new Folder(folderData2); - const folder4 = new Folder(folderData3); - - await folder2.save(); - await folder3.save(); - await folder4.save(); - - const folderList = await folderService.getFolderList(user2, {search: "bunny"}) - - expect(folderList.length).toBe(2); -}) - -test("When user no longer has personal folders enabled, should return list with no personal folders when searching", async() => { - - const {user: user2} = await createUserDbType(); - - const folderData2 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - const folderData4 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - } - - - const folderData3 = { - name: "dog", - parent: "/", - owner: user2._id, - parentList: ["/"] - } - - - const folder2 = new Folder(folderData2); - const folder3 = new Folder(folderData4); - const folder4 = new Folder(folderData3); - - await folder2.save(); - await folder3.save(); - await folder4.save(); - - const folderList = await folderService.getFolderList(user2, {search: "bunny"}) - - expect(folderList.length).toBe(1); - -}) - -test("When user no longer has personal folders enabled, and only has personal folders should return empty list when searching", async() => { - - const {user: user2} = await createUserDbType(); - - const folderData2 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - const folderData4 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - - const folderData3 = { - name: "dog", - parent: "/", - owner: user2._id, - parentList: ["/"] - } - - - const folder2 = new Folder(folderData2); - const folder3 = new Folder(folderData4); - const folder4 = new Folder(folderData3); - - await folder2.save(); - await folder3.save(); - await folder4.save(); - - const folderList = await folderService.getFolderList(user2, {search: "bunny"}) - - expect(folderList.length).toBe(0); -}) - -test("When user has personal folder enabled should get folder list with personal folder", async() => { - - const {user: user2} = await createUserDbType(true); - - const folderData2 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - - const folderData3 = { - name: "dog", - parent: "/", - owner: user2._id, - parentList: ["/"] - } - - - const folder2 = new Folder(folderData2); - const folder3 = new Folder(folderData2); - const folder4 = new Folder(folderData3); - - await folder2.save(); - await folder3.save(); - await folder4.save(); - - const folderList = await folderService.getFolderList(user2, {}) - - expect(folderList.length).toBe(3); - -}) - -test("When user no longer has personal folders enabled should return list without personal folders", async() => { - - const {user: user2} = await createUserDbType(); - - const folderData2 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - const folderData4 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - } - - - const folderData3 = { - name: "dog", - parent: "/", - owner: user2._id, - parentList: ["/"] - } - - - const folder2 = new Folder(folderData2); - const folder3 = new Folder(folderData4); - const folder4 = new Folder(folderData3); - - await folder2.save(); - await folder3.save(); - await folder4.save(); - - const folderList = await folderService.getFolderList(user2, {}) - - expect(folderList.length).toBe(2); -}) - -test("When user no longer has personal folders enabled, and there are only personal folders should return empty list", async() => { - - const {user: user2} = await createUserDbType(); - - const folderData2 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - const folderData4 = { - name: "bunny", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - - const folderData3 = { - name: "dog", - parent: "/", - owner: user2._id, - parentList: ["/"], - personalFolder: true - } - - - const folder2 = new Folder(folderData2); - const folder3 = new Folder(folderData4); - const folder4 = new Folder(folderData3); - - await folder2.save(); - await folder3.save(); - await folder4.save(); - - const folderList = await folderService.getFolderList(user2, {}) - - expect(folderList.length).toBe(0); - -}) \ No newline at end of file diff --git a/tests/services/UserService/index.test.js b/tests/services/UserService/index.test.js deleted file mode 100644 index f6b44b3..0000000 --- a/tests/services/UserService/index.test.js +++ /dev/null @@ -1,136 +0,0 @@ -import User from "../../../dist/models/user"; -import mongoose from "../../../dist/db/mongoose"; -const conn = mongoose.connection; -const createUser = require("../../fixtures/createUser"); -import UserService from "../../../dist/services/UserService"; -const userService = new UserService(); - -let user; - - -const waitForDatabase = () => { - - return new Promise((resolve, reject) => { - - if (conn.readyState !== 1) { - - conn.once("open", () => { - - resolve(); - - }) - - } else { - - resolve(); - } - - }) -} - -beforeEach(async(done) => { - - await waitForDatabase(); - // user = await createUser(); - const {user: gotUser} = await createUser(); - user = gotUser; - done(); - -}) - -afterEach(async(done) => { - - await User.deleteMany({}); - done(); -}) - -test("When giving email and password for login, should return user and token", async() => { - - const email = user.email; - const password = "12345678"; - - const userData = { - email, - password - } - - const {user: receivedUser} = await userService.login(userData); - - expect(receivedUser._id.toString()).toBe(user._id.toString()); -}) - -test("When giving wrong password for login, throw error", async() => { - - const email = user.email; - const password = "87654321"; - - const userData = { - email, - password - } - - await expect(userService.login(userData)).rejects.toThrow(); -}) - -test("When giving user should logout and not throw error", async() => { - - await userService.logout(user); -}) - -test("When giving user, should logout all, show 0 tokens, and not throw error", async() => { - - const userID = user._id; - - await userService.logoutAll(user); - const updatedUser = await User.findById(userID); - - expect(updatedUser.tokens.length).toBe(0); -}) - -test("When giving user data, should create new user", async() => { - - const userData = { - name: "Test User", - email: "test3@test.com", - password: "12345678", - } - - const {user: createdUser} = await userService.create(userData); - - expect(createdUser.email).toBe(userData.email); -}) - -test("When creating user with duplicate email, should throw an error", async() => { - - const userData = { - name: "Test User", - email: "test2@test.com", - password: "12345678", - } - - await expect(userService.create(userData)).rejects.toThrow(); -}) - -test("When giving user, token, old password, and new password. Should change password", async() => { - - const oldPassword = "12345678"; - const newPassword = "87654321"; - - await userService.changePassword(user, oldPassword, newPassword); -}) - -test("When giving wrong old password for change password, should throw an error", async() => { - - const wrongOldPassword = "1649560569"; - const newPassword = "87654321"; - - await expect(userService.changePassword(user._id, wrongOldPassword, newPassword)).rejects.toThrow(); -}) - -test("When giving new password with insufficent length, should throw an error", async() => { - - const oldPassword = "12345678"; - const newPassword = "8765"; - - await expect(userService.changePassword(user._id, oldPassword, newPassword)).rejects.toThrow(); -}) \ No newline at end of file diff --git a/tests/setupTests.js b/tests/setupTests.js deleted file mode 100644 index da3b4db..0000000 --- a/tests/setupTests.js +++ /dev/null @@ -1,10 +0,0 @@ -// import Enzyme from "enzyme" -// import Adapter from "enzyme-adapter-react-16" -// import DotEnv from "dotenv" -// import "babel-polyfill"; - -// Enzyme.configure({ -// adapter: new Adapter() -// }) - -// DotEnv.config({path: ".env.test"}) diff --git a/webUI/index.html b/webUI/index.html deleted file mode 100644 index 5fdc166..0000000 --- a/webUI/index.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - -
- - -Enter Encryption Password
- - -Setup
-Use Docker With myDrive?
-Enter MongoDB URL
-Use WebUI For Encryption Key (Recommended, Selecting No Will Require You To Enter An Encryption Key Now, Which Is Less Secure)
-Use default ports? (http port: 3000, https port: 8080
-Enter ports
-Enter The Client URL/IP Address (Must Be A Valid Link and Must Start With "http://" or "https://", Include Port With IP Address If Needed, Do Not End The URL In a Slash "/")
-Error: URL Cannot End In a Slash ("/")
-Error: URL Must Start With "http://" or "https://"
-Pick A Database To Store File Chunks
-Enter The FileSyem Path
-Enter The S3 ID
-Enter The S3 Key
-Enter The S3 Bucket
-Enter Access Token Secret
-Enter Refresh Token Secret
-Enter Cookie Secret
-Use Secure Cookies? (You Can Only Use Secure Cookies If You Are Using HTTPS/SSL, Do Not Select This Option If You Do Not Have HTTPS or else Cookies/Logging in Will Not Work At All. This is Highly Recommended if You Have HTTPS/SSL)
-Use SendGrid To Send Emails? (For Account Email Verification And Password Resets)
-Enter A SendGrid API Key
-Enter Email Address, This Will Be The Email Address For Sending Email Verifications, And Password Resets.
-Use SSL? (Will Require SSL Certificate certificate.crt, certificate.ca-bundle, And certificate.key At Root Of The Project. If You Are Hosting On a Service That Already Provides HTTPS/SSL Select No)
-