mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-05-05 04:15:55 +02:00
enhance(backend/test): Migrate tests to vitest (#16935)
* wip * update fake-timers and migrate * fix * remove jest-mock * fix * fix * fix * fix * attempt to fix unit tests * attempt to fix e2e tests * fix federation test [ci skip] * attempt to fix e2e tests * fix typecheck * fix unit tests * fix * attempt to fix e2e * fix * Revert "attempt to fix e2e" This reverts commitb7b7b05d85. * attempt to fix e2e * revert attempt to fix e2e * update deps * update vitest * migrate * attempt to fix e2e * update * fix * remove vite swc plugin as oxc parser can handle decorators * attempt to fix drive/files/create test * Revert "attempt to fix drive/files/create test" This reverts commit4715153375. * fix: エンドポイントにまつわるテストをunitからe2eに移動 * attempt to fix e2e * remove swc * attempt to fix e2e * Revert "attempt to fix e2e" This reverts commit9fb86a4076. * add logs for debug * attempt to fix e2e * Partially revert "attempt to fix e2e" This reverts commitfb0008c85a. * attempt to fix test * fix: attempt to fix test * Revert "fix: attempt to fix test" This reverts commited2f5c40e8. * Revert "attempt to fix test" This reverts commitd7329c46f1. * attempt to fix e2e * fix: surpass eventemitter warning by increasing defaultMaxListeners * attempt to fix e2e * fix * fix e2e not ending properly * exp: add hanging-process reporter for investigation * Revert "exp: add hanging-process reporter for investigation" This reverts commit26851f8282. * update changelog
This commit is contained in:
@@ -6,10 +6,11 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, test, expect } from 'vitest';
|
||||
// node-fetch only supports it's own Blob yet
|
||||
// https://github.com/node-fetch/node-fetch/pull/1664
|
||||
import { Blob } from 'node-fetch';
|
||||
import { api, castAsError, initTestDb, post, signup, simpleGet, uploadFile } from '../utils.js';
|
||||
import { api, castAsError, initTestDb, post, role, signup, simpleGet, uploadFile } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
import { MiUser } from '@/models/_.js';
|
||||
|
||||
@@ -581,6 +582,30 @@ describe('Endpoints', () => {
|
||||
});
|
||||
|
||||
describe('drive/files/create', () => {
|
||||
const assignRole = async (userId: string, policies: Record<string, unknown>) => {
|
||||
const createdRole = await role(alice, {}, policies);
|
||||
|
||||
const assign = await api('admin/roles/assign', {
|
||||
userId,
|
||||
roleId: createdRole.id,
|
||||
}, alice);
|
||||
|
||||
assert.strictEqual(assign.status, 204);
|
||||
|
||||
return createdRole;
|
||||
};
|
||||
|
||||
const cleanupRole = async (userId: string, roleId: string) => {
|
||||
await api('admin/roles/unassign', {
|
||||
userId,
|
||||
roleId,
|
||||
}, alice);
|
||||
|
||||
await api('admin/roles/delete', {
|
||||
roleId,
|
||||
}, alice);
|
||||
};
|
||||
|
||||
test('ファイルを作成できる', async () => {
|
||||
const res = await uploadFile(alice);
|
||||
|
||||
@@ -659,6 +684,104 @@ describe('Endpoints', () => {
|
||||
assert.strictEqual(webpublicType, 'image/webp');
|
||||
});
|
||||
}
|
||||
|
||||
test('uploadableFileTypes が */* なら任意のファイルをアップロードできる', async () => {
|
||||
const createdRole = await assignRole(bob.id, {
|
||||
uploadableFileTypes: {
|
||||
useDefault: false,
|
||||
priority: 1,
|
||||
value: ['*/*'],
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const res = await uploadFile(bob, {
|
||||
blob: new Blob([new Uint8Array(10)]),
|
||||
});
|
||||
|
||||
assert.strictEqual(res.status, 200);
|
||||
} finally {
|
||||
await cleanupRole(bob.id, createdRole.id);
|
||||
}
|
||||
});
|
||||
|
||||
test('uploadableFileTypes に含まれない MIME type は拒否される', async () => {
|
||||
const createdRole = await assignRole(bob.id, {
|
||||
uploadableFileTypes: {
|
||||
useDefault: false,
|
||||
priority: 1,
|
||||
value: ['image/png'],
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const res = await uploadFile(bob, { path: '192.jpg' });
|
||||
|
||||
assert.strictEqual(res.status, 400);
|
||||
assert.ok(res.body);
|
||||
assert.strictEqual(castAsError(res.body).error.code, 'UNALLOWED_FILE_TYPE');
|
||||
} finally {
|
||||
await cleanupRole(bob.id, createdRole.id);
|
||||
}
|
||||
});
|
||||
|
||||
test('maxFileSizeMb 制限付きロールでも制限内ならアップロードできる', async () => {
|
||||
const allowAllTypesRole = await assignRole(bob.id, {
|
||||
uploadableFileTypes: {
|
||||
useDefault: false,
|
||||
priority: 1,
|
||||
value: ['*/*'],
|
||||
},
|
||||
});
|
||||
const tinyAttachmentRole = await assignRole(bob.id, {
|
||||
maxFileSizeMb: {
|
||||
useDefault: false,
|
||||
priority: 1,
|
||||
value: 10 / 1024 / 1024, // 10バイト
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const res = await uploadFile(bob, {
|
||||
blob: new Blob([new Uint8Array(10)]),
|
||||
});
|
||||
|
||||
assert.strictEqual(res.status, 200);
|
||||
} finally {
|
||||
await cleanupRole(bob.id, tinyAttachmentRole.id);
|
||||
await cleanupRole(bob.id, allowAllTypesRole.id);
|
||||
}
|
||||
});
|
||||
|
||||
test('maxFileSizeMb 制限を超えると 413 になる', async () => {
|
||||
const allowAllTypesRole = await assignRole(bob.id, {
|
||||
uploadableFileTypes: {
|
||||
useDefault: false,
|
||||
priority: 1,
|
||||
value: ['*/*'],
|
||||
},
|
||||
});
|
||||
const tinyAttachmentRole = await assignRole(bob.id, {
|
||||
maxFileSizeMb: {
|
||||
useDefault: false,
|
||||
priority: 1,
|
||||
value: 10 / 1024 / 1024, // 10バイト
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const res = await uploadFile(bob, {
|
||||
blob: new Blob([new Uint8Array(11)]),
|
||||
});
|
||||
|
||||
assert.strictEqual(res.status, 413);
|
||||
assert.ok(res.body);
|
||||
assert.strictEqual(castAsError(res.body).error.code, 'MAX_FILE_SIZE_EXCEEDED');
|
||||
} finally {
|
||||
await cleanupRole(bob.id, tinyAttachmentRole.id);
|
||||
await cleanupRole(bob.id, allowAllTypesRole.id);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('drive/files/update', () => {
|
||||
|
||||
Reference in New Issue
Block a user