summaryrefslogtreecommitdiff
path: root/packages/backend/test/unit/server/api
diff options
context:
space:
mode:
authorおさむのひと <46447427+samunohito@users.noreply.github.com>2025-04-29 08:15:09 +0900
committerGitHub <noreply@github.com>2025-04-29 08:15:09 +0900
commit7e8cc4d7c0a86ad0bf71a727fb16132e8bc180a8 (patch)
tree32566ed4917ac80de0d4a1095f5442923e29a8fb /packages/backend/test/unit/server/api
parentenhance(frontend): disable router view transition (diff)
downloadsharkey-7e8cc4d7c0a86ad0bf71a727fb16132e8bc180a8.tar.gz
sharkey-7e8cc4d7c0a86ad0bf71a727fb16132e8bc180a8.tar.bz2
sharkey-7e8cc4d7c0a86ad0bf71a727fb16132e8bc180a8.zip
fix: 添付ファイルのあるリクエストを受けたときの初動を改善 (#15896)
* wip * ロールポリシーの値も参照するように * エンドポイントのテストを追加 * fix review * add spdx * fix CHANGELOG.md * fix test * regenerate * add log * Revert "add log" This reverts commit 4b2bf59a609b85ca0bfcc9b71438db782f11983d. * add log * fix * Revert "add log" This reverts commit c5a73d57da0f30ec5215e08a8b4d78785cce48d1.
Diffstat (limited to 'packages/backend/test/unit/server/api')
-rw-r--r--packages/backend/test/unit/server/api/drive/files/create.ts108
1 files changed, 108 insertions, 0 deletions
diff --git a/packages/backend/test/unit/server/api/drive/files/create.ts b/packages/backend/test/unit/server/api/drive/files/create.ts
new file mode 100644
index 0000000000..b98892fa03
--- /dev/null
+++ b/packages/backend/test/unit/server/api/drive/files/create.ts
@@ -0,0 +1,108 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { S3Client } from '@aws-sdk/client-s3';
+import { Test, TestingModule } from '@nestjs/testing';
+import { mockClient } from 'aws-sdk-client-mock';
+import { FastifyInstance } from 'fastify';
+import request from 'supertest';
+import { CoreModule } from '@/core/CoreModule.js';
+import { RoleService } from '@/core/RoleService.js';
+import { DI } from '@/di-symbols.js';
+import { GlobalModule } from '@/GlobalModule.js';
+import { MiRole, UserProfilesRepository, UsersRepository } from '@/models/_.js';
+import { MiUser } from '@/models/User.js';
+import { ServerModule } from '@/server/ServerModule.js';
+import { ServerService } from '@/server/ServerService.js';
+
+describe('/drive/files/create', () => {
+ let module: TestingModule;
+ let server: FastifyInstance;
+ const s3Mock = mockClient(S3Client);
+ let roleService: RoleService;
+
+ let root: MiUser;
+ let role_tinyAttachment: MiRole;
+
+ beforeAll(async () => {
+ module = await Test.createTestingModule({
+ imports: [GlobalModule, CoreModule, ServerModule],
+ }).compile();
+ module.enableShutdownHooks();
+
+ const serverService = module.get<ServerService>(ServerService);
+ server = await serverService.launch();
+
+ const usersRepository = module.get<UsersRepository>(DI.usersRepository);
+ root = await usersRepository.insert({
+ id: 'root',
+ username: 'root',
+ usernameLower: 'root',
+ token: '1234567890123456',
+ }).then(x => usersRepository.findOneByOrFail(x.identifiers[0]));
+
+ const userProfilesRepository = module.get<UserProfilesRepository>(DI.userProfilesRepository);
+ await userProfilesRepository.insert({
+ userId: root.id,
+ });
+
+ roleService = module.get<RoleService>(RoleService);
+ role_tinyAttachment = await roleService.create({
+ name: 'test-role001',
+ description: 'Test role001 description',
+ target: 'manual',
+ policies: {
+ maxFileSizeMb: {
+ useDefault: false,
+ priority: 1,
+ // 10byte
+ value: 10 / 1024 / 1024,
+ },
+ },
+ });
+ });
+
+ beforeEach(async () => {
+ s3Mock.reset();
+ await roleService.unassign(root.id, role_tinyAttachment.id).catch(() => {});
+ });
+
+ afterAll(async () => {
+ await server.close();
+ await module.close();
+ });
+
+ test('200 ok', async () => {
+ const result = await request(server.server)
+ .post('/api/drive/files/create')
+ .set('Content-Type', 'multipart/form-data')
+ .set('Authorization', `Bearer ${root.token}`)
+ .attach('file', Buffer.from('a'.repeat(1024 * 1024)));
+ expect(result.statusCode).toBe(200);
+ });
+
+ test('200 ok(with role)', async () => {
+ await roleService.assign(root.id, role_tinyAttachment.id);
+
+ const result = await request(server.server)
+ .post('/api/drive/files/create')
+ .set('Content-Type', 'multipart/form-data')
+ .set('Authorization', `Bearer ${root.token}`)
+ .attach('file', Buffer.from('a'.repeat(10)));
+ expect(result.statusCode).toBe(200);
+ });
+
+ test('413 too large', async () => {
+ await roleService.assign(root.id, role_tinyAttachment.id);
+
+ const result = await request(server.server)
+ .post('/api/drive/files/create')
+ .set('Content-Type', 'multipart/form-data')
+ .set('Authorization', `Bearer ${root.token}`)
+ .attach('file', Buffer.from('a'.repeat(11)));
+ expect(result.statusCode).toBe(413);
+ expect(result.body.error.code).toBe('FILE_SIZE_TOO_LARGE');
+ });
+});