Files
myDrive/tests/services/FolderService/index.test.js
T

620 lines
15 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
})