test: create_folder
Massimo Melina committed
Nov 28, 2023 at 12:59 UTC
149f4c530d2da4be19bec1eeb389d481b30e4b7a
2 files changed
+15
-11
src/frontEndApis.ts
+4
-3
@@ -10,7 +10,7 @@ import {
10
HTTP_BAD_REQUEST, HTTP_CONFLICT, HTTP_FAILED_DEPENDENCY, HTTP_FORBIDDEN,
11
HTTP_NOT_FOUND, HTTP_SERVER_ERROR, HTTP_UNAUTHORIZED
12
} from './const'
13
-import { hasPermission, urlToNode } from './vfs'
13
+import { hasPermission, statusCodeForMissingPerm, urlToNode } from './vfs'
14
import { mkdir, rename, rm } from 'fs/promises'
15
import { dirname, join } from 'path'
16
import { getUploadMeta } from './upload'
@@ -55,8 +55,9 @@ export const frontEndApis: ApiHandlers = {
55
const parentNode = await urlToNode(uri, ctx)
56
if (!parentNode)
57
return new ApiError(HTTP_NOT_FOUND, 'parent not found')
58
- if (!hasPermission(parentNode, 'can_upload', ctx))
59
- return new ApiError(HTTP_FORBIDDEN)
58
+ const err = statusCodeForMissingPerm(parentNode, 'can_upload', ctx)
59
+ if (err)
60
+ return new ApiError(err)
61
try {
62
await mkdir(join(parentNode.source!, name))
63
return {}
tests/test.ts
+11
-8
@@ -16,7 +16,8 @@ const username = 'rejetto'
16
const password = 'password'
17
const API = '/~/api/'
18
const BASE_URL = 'http://localhost'
19
-const UPLOAD_URI = '/for-admins/upload/temp/gpl.png'
19
+const UPLOAD_ROOT = '/for-admins/upload'
20
+const UPLOAD_DEST = UPLOAD_ROOT + '/temp/gpl.png'
21
22
describe('basics', () => {
23
//before(async () => appStarted)
@@ -93,7 +94,8 @@ describe('basics', () => {
94
headers: { Referer: 'https://some-website.com/try-to-trick/x.com/' }
95
}))
96
96
- testUpload('upload.need account', UPLOAD_URI, 401)
97
+ testUpload('upload.need account', UPLOAD_DEST, 401)
98
+ it('create_folder', reqApi('create_folder', { uri: UPLOAD_ROOT, name: 'temp' }, 401))
99
it('delete.no perm', reqApi('delete', { uri: '/for-admins' }, 403))
100
it('delete.need account', reqApi('delete', { uri: '/for-admins/upload' }, 401))
101
it('rename.no perm', reqApi('delete', { uri: '/for-admins', dest: 'any' }, 403))
@@ -109,16 +111,17 @@ describe('accounts', () => {
111
112
describe('after-login', () => {
113
before(() => login(username))
114
+ it('create_folder', reqApi('create_folder', { uri: UPLOAD_ROOT, name: 'temp' }, 200))
115
it('inherit.perm', reqList('/for-admins/', { inList:['alfa.txt'] }))
116
it('inherit.disabled', reqList('/for-disabled/', 401))
117
testUpload('upload.never', '/random', 403)
115
- testUpload('upload.ok', UPLOAD_URI, 200)
116
- testUpload('upload.crossing', UPLOAD_URI.replace('temp', '../..'), 418)
118
+ testUpload('upload.ok', UPLOAD_DEST, 200)
119
+ testUpload('upload.crossing', UPLOAD_DEST.replace('temp', '../..'), 418)
120
const renameTo = 'z'
118
- it('rename.ok', reqApi('rename', { uri: UPLOAD_URI, dest: renameTo }, 200))
119
- it('delete.miss renamed', reqApi('delete', { uri: UPLOAD_URI }, 404))
120
- it('delete.ok', reqApi('delete', { uri: dirname(UPLOAD_URI) + '/' + renameTo }, 200))
121
- it('delete.miss deleted', reqApi('delete', { uri: UPLOAD_URI }, 404))
121
+ it('rename.ok', reqApi('rename', { uri: UPLOAD_DEST, dest: renameTo }, 200))
122
+ it('delete.miss renamed', reqApi('delete', { uri: UPLOAD_DEST }, 404))
123
+ it('delete.ok', reqApi('delete', { uri: dirname(UPLOAD_DEST) + '/' + renameTo }, 200))
124
+ it('delete.miss deleted', reqApi('delete', { uri: UPLOAD_DEST }, 404))
125
after(() =>
126
rmSync(join(__dirname, 'temp'), { recursive: true}))
127
})