Files
myDrive/tests/db/utils/fileUtils/index.test.js
T
2020-03-04 17:10:56 -05:00

1126 lines
32 KiB
JavaScript

const User = require("../../../../src/models/user");
const mongoose = require("../../../../src/db/mongoose");
const conn = mongoose.connection;
const createUser = require("../../../fixtures/createUser");
const path = require("path");
const createFile = require("../../../fixtures/createFile");
const UtilsFile = require("../../../../src/db/utils/fileUtils");
const ObjectID = require('mongodb').ObjectID
const jwt = require("jsonwebtoken");
const utilsFile = new UtilsFile();
let user;
let file;
process.env.KEY = "1234";
beforeEach(async(done) => {
if (conn.readyState === 0) {
conn.once("open", async() => {
//user = await createUser();
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();
})
} else {
// user = await createUser();
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 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 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);
})