1
0
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 commit b7b7b05d85.

* 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 commit 4715153375.

* fix: エンドポイントにまつわるテストをunitからe2eに移動

* attempt to fix e2e

* remove swc

* attempt to fix e2e

* Revert "attempt to fix e2e"

This reverts commit 9fb86a4076.

* add logs for debug

* attempt to fix e2e

* Partially revert "attempt to fix e2e"

This reverts commit fb0008c85a.

* attempt to fix test

* fix: attempt to fix test

* Revert "fix: attempt to fix test"

This reverts commit ed2f5c40e8.

* Revert "attempt to fix test"

This reverts commit d7329c46f1.

* 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 commit 26851f8282.

* update changelog
This commit is contained in:
かっこかり
2026-04-20 14:57:29 +09:00
committed by GitHub
parent 1391269a67
commit 6d15fe32d0
112 changed files with 755 additions and 3068 deletions

View File

@@ -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', () => {