From 448fc31888981fbee11ccc76ab44919f8f0d85de Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Mon, 13 Feb 2017 01:49:25 +0900
Subject: [PATCH] [Test] :v:

---
 test/api.js | 102 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 88 insertions(+), 14 deletions(-)

diff --git a/test/api.js b/test/api.js
index be305a90ad..79f4ea280c 100644
--- a/test/api.js
+++ b/test/api.js
@@ -759,7 +759,7 @@ describe('API', () => {
 	});
 
 	describe('drive/files/create', () => {
-		it('ドライブのファイルを作成できる', () => new Promise(async (done) => {
+		it('ファイルを作成できる', () => new Promise(async (done) => {
 			const me = await insertSakurako();
 			chai.request(server)
 				.post('/drive/files/create')
@@ -784,7 +784,7 @@ describe('API', () => {
 	});
 
 	describe('drive/files/update', () => {
-		it('ファイルの名前を更新できる', () => new Promise(async (done) => {
+		it('名前を更新できる', () => new Promise(async (done) => {
 			const me = await insertSakurako();
 			const file = await insertDriveFile({
 				user_id: me._id
@@ -816,7 +816,7 @@ describe('API', () => {
 			});
 		}));
 
-		it('ファイルのフォルダを更新できる', () => new Promise(async (done) => {
+		it('親フォルダを更新できる', () => new Promise(async (done) => {
 			const me = await insertSakurako();
 			const file = await insertDriveFile({
 				user_id: me._id
@@ -835,6 +835,23 @@ describe('API', () => {
 			});
 		}));
 
+		it('親フォルダを無しにできる', () => new Promise(async (done) => {
+			const me = await insertSakurako();
+			const file = await insertDriveFile({
+				user_id: me._id,
+				folder_id: '000000000000000000000000'
+			});
+			request('/drive/files/update', {
+				file_id: file._id.toString(),
+				folder_id: null
+			}, me).then(res => {
+				res.should.have.status(200);
+				res.body.should.be.a('object');
+				res.body.should.have.property('folder_id').eql(null);
+				done();
+			});
+		}));
+
 		it('他人のフォルダには入れられない', () => new Promise(async (done) => {
 			const me = await insertSakurako();
 			const hima = await insertHimawari();
@@ -905,7 +922,7 @@ describe('API', () => {
 	});
 
 	describe('drive/folders/create', () => {
-		it('ドライブのフォルダを作成できる', () => new Promise(async (done) => {
+		it('フォルダを作成できる', () => new Promise(async (done) => {
 			const me = await insertSakurako();
 			request('/drive/folders/create', {
 				name: 'my folder'
@@ -919,9 +936,11 @@ describe('API', () => {
 	});
 
 	describe('drive/folders/update', () => {
-		it('ドライブのフォルダの名前を更新できる', () => new Promise(async (done) => {
+		it('名前を更新できる', () => new Promise(async (done) => {
 			const me = await insertSakurako();
-			const folder = await insertDriveFolder();
+			const folder = await insertDriveFolder({
+				user_id: me._id
+			});
 			request('/drive/folders/update', {
 				folder_id: folder._id.toString(),
 				name: 'new name'
@@ -933,10 +952,29 @@ describe('API', () => {
 			});
 		}));
 
-		it('ドライブのフォルダの親フォルダを更新できる', () => new Promise(async (done) => {
+		it('他人のフォルダを更新できない', () => new Promise(async (done) => {
 			const me = await insertSakurako();
-			const folder = await insertDriveFolder();
-			const parentFolder = await insertDriveFolder();
+			const hima = await insertHimawari();
+			const folder = await insertDriveFolder({
+				user_id: hima._id
+			});
+			request('/drive/folders/update', {
+				folder_id: folder._id.toString(),
+				name: 'new name'
+			}, me).then(res => {
+				res.should.have.status(400);
+				done();
+			});
+		}));
+
+		it('親フォルダを更新できる', () => new Promise(async (done) => {
+			const me = await insertSakurako();
+			const folder = await insertDriveFolder({
+				user_id: me._id
+			});
+			const parentFolder = await insertDriveFolder({
+				user_id: me._id
+			});
 			request('/drive/folders/update', {
 				folder_id: folder._id.toString(),
 				parent_id: parentFolder._id.toString()
@@ -948,7 +986,42 @@ describe('API', () => {
 			});
 		}));
 
-		it('ドライブのフォルダが循環するような構造にできない', () => new Promise(async (done) => {
+		it('親フォルダを無しに更新できる', () => new Promise(async (done) => {
+			const me = await insertSakurako();
+			const folder = await insertDriveFolder({
+				user_id: me._id,
+				parent_id: '000000000000000000000000'
+			});
+			request('/drive/folders/update', {
+				folder_id: folder._id.toString(),
+				parent_id: null
+			}, me).then(res => {
+				res.should.have.status(200);
+				res.body.should.be.a('object');
+				res.body.should.have.property('parent_id').eql(null);
+				done();
+			});
+		}));
+
+		it('他人のフォルダを親フォルダに設定できない', () => new Promise(async (done) => {
+			const me = await insertSakurako();
+			const hima = await insertHimawari();
+			const folder = await insertDriveFolder({
+				user_id: me._id
+			});
+			const parentFolder = await insertDriveFolder({
+				user_id: hima._id
+			});
+			request('/drive/folders/update', {
+				folder_id: folder._id.toString(),
+				parent_id: parentFolder._id.toString()
+			}, me).then(res => {
+				res.should.have.status(400);
+				done();
+			});
+		}));
+
+		it('フォルダが循環するような構造にできない', () => new Promise(async (done) => {
 			const me = await insertSakurako();
 			const folder = await insertDriveFolder();
 			const parentFolder = await insertDriveFolder({
@@ -963,7 +1036,7 @@ describe('API', () => {
 			});
 		}));
 
-		it('ドライブのフォルダが循環するような構造にできない(再帰的)', () => new Promise(async (done) => {
+		it('フォルダが循環するような構造にできない(再帰的)', () => new Promise(async (done) => {
 			const me = await insertSakurako();
 			const folderA = await insertDriveFolder();
 			const folderB = await insertDriveFolder({
@@ -1084,14 +1157,15 @@ async function insertDriveFile(opts) {
 
 async function insertDriveFolder(opts) {
 	return await db.get('drive_folders').insert(Object.assign({
-		name: 'my folder'
-	}), opts);
+		name: 'my folder',
+		parent_id: null
+	}, opts));
 }
 
 async function insertApp(opts) {
 	return await db.get('apps').insert(Object.assign({
 		name: 'my app',
 		secret: 'mysecret'
-	}), opts);
+	}, opts));
 }