mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-05-04 21:15:45 +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:
@@ -20,6 +20,7 @@ import type {
|
||||
RegistrationResponseJSON,
|
||||
} from '@simplewebauthn/types';
|
||||
import type * as misskey from 'misskey-js';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
|
||||
describe('2要素認証', () => {
|
||||
let alice: misskey.entities.SignupResponse;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, beforeEach, test } from 'vitest';
|
||||
import {
|
||||
api,
|
||||
failedApiCall,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, beforeEach, test } from 'vitest';
|
||||
import { UserToken, api, post, signup } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { IncomingMessage } from 'http';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
import { IncomingMessage } from 'node:http';
|
||||
import {
|
||||
api,
|
||||
connectStream,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
import { api, castAsError, post, signup } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, beforeEach, afterEach, test } from 'vitest';
|
||||
import { DEFAULT_POLICIES } from '@/core/RoleService.js';
|
||||
import { api, ApiRequest, failedApiCall, hiddenNote, post, signup, successfulApiCall } from '../utils.js';
|
||||
import type * as Misskey from 'misskey-js';
|
||||
@@ -176,7 +177,9 @@ describe('クリップ', () => {
|
||||
{ label: 'descriptionがnull', parameters: { description: null } },
|
||||
{ label: 'descriptionが最大長', parameters: { description: 'a'.repeat(2048) } },
|
||||
];
|
||||
test.each(createClipAllowedPattern)('の作成は$labelでもできる', async ({ parameters }) => await create(parameters));
|
||||
test.each(createClipAllowedPattern)('の作成は$labelでもできる', async ({ parameters }) => {
|
||||
await create(parameters);
|
||||
});
|
||||
|
||||
const createClipDenyPattern = [
|
||||
{ label: 'nameがnull', parameters: { name: null } },
|
||||
@@ -233,11 +236,13 @@ describe('クリップ', () => {
|
||||
assert.strictEqual(res.isFavorited, false);
|
||||
});
|
||||
|
||||
test.each(createClipAllowedPattern)('の更新は$labelでもできる', async ({ parameters }) => await update({
|
||||
clipId: (await create()).id,
|
||||
name: 'updated',
|
||||
...parameters,
|
||||
}));
|
||||
test.each(createClipAllowedPattern)('の更新は$labelでもできる', async ({ parameters }) => {
|
||||
await update({
|
||||
clipId: (await create()).id,
|
||||
name: 'updated',
|
||||
...parameters,
|
||||
});
|
||||
});
|
||||
|
||||
test.each([
|
||||
{ label: 'clipIdがnull', parameters: { clipId: null } },
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
import { api, makeStreamCatcher, post, signup, uploadFile } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
@@ -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', () => {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { afterAll, beforeAll, beforeEach, describe, test } from 'vitest';
|
||||
import { api, port, post, signup, startJobQueue } from '../utils.js';
|
||||
import type { INestApplicationContext } from '@nestjs/common';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { beforeAll, beforeEach, describe, test } from 'vitest';
|
||||
import { api, channel, clip, galleryPost, page, play, post, signup, simpleGet, uploadFile } from '../utils.js';
|
||||
import type { SimpleGetResponse } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import { beforeAll, describe, test, expect } from 'vitest';
|
||||
import { validateContentTypeSetAsActivityPub, validateContentTypeSetAsJsonLD } from '@/core/activitypub/misc/validator.js';
|
||||
import { signup, uploadFile, relativeFetch } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
import { api, signup, simpleGet } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ process.env.NODE_ENV = 'test';
|
||||
|
||||
import { setTimeout } from 'node:timers/promises';
|
||||
import * as assert from 'assert';
|
||||
import { afterAll, beforeAll, afterEach, describe, test } from 'vitest';
|
||||
import { loadConfig } from '@/config.js';
|
||||
import { MiRepository, MiUser, UsersRepository, miRepository } from '@/models/_.js';
|
||||
import { secureRndstr } from '@/misc/secure-rndstr.js';
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { beforeAll, describe, test } from 'vitest';
|
||||
import { api, post, react, signup, waitFire } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, test } from 'vitest';
|
||||
import { relativeFetch } from '../utils.js';
|
||||
|
||||
describe('nodeinfo', () => {
|
||||
|
||||
@@ -8,6 +8,7 @@ import type { Repository } from "typeorm";
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, afterAll, test } from 'vitest';
|
||||
import { MiNote } from '@/models/Note.js';
|
||||
import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
|
||||
import { api, castAsError, initTestDb, post, role, signup, uploadFile, uploadUrl } from '../utils.js';
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { afterAll, beforeAll, beforeEach, describe, test } from 'vitest';
|
||||
import {
|
||||
AuthorizationCode,
|
||||
type AuthorizationTokenConfig,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { beforeAll, describe, test } from 'vitest';
|
||||
import { setTimeout } from 'node:timers/promises';
|
||||
import { api, post, signup, waitFire } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
import { ReversiMatchResponse } from 'misskey-js/entities.js';
|
||||
import { api, signup } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
import { WebSocket } from 'ws';
|
||||
import { MiFollowing } from '@/models/Following.js';
|
||||
import { api, createAppToken, initTestDb, port, post, signup, waitFire } from '../utils.js';
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
*/
|
||||
|
||||
import { entities } from 'misskey-js';
|
||||
import { beforeEach, describe, test } from '@jest/globals';
|
||||
import {
|
||||
beforeEach,
|
||||
beforeAll,
|
||||
afterAll,
|
||||
describe,
|
||||
expect,
|
||||
test,
|
||||
} from 'vitest';
|
||||
import {
|
||||
api,
|
||||
captureWebhook,
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
import { setTimeout } from 'node:timers/promises';
|
||||
import { entities } from 'misskey-js';
|
||||
import { beforeEach, describe, test } from '@jest/globals';
|
||||
import { beforeEach, describe, test, beforeAll, afterAll, expect } from 'vitest';
|
||||
import {
|
||||
api,
|
||||
captureWebhook,
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { beforeAll, describe, test } from 'vitest';
|
||||
import { api, connectStream, post, signup } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
// pnpm jest -- e2e/timelines.ts
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { describe, beforeAll, test } from 'vitest';
|
||||
import { setTimeout } from 'node:timers/promises';
|
||||
import { entities } from 'misskey-js';
|
||||
import { Redis } from 'ioredis';
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { beforeAll, describe, test } from 'vitest';
|
||||
import { api, post, signup, uploadUrl } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { beforeAll, beforeEach, describe, test } from 'vitest';
|
||||
import { inspect } from 'node:util';
|
||||
import { api, post, role, signup, successfulApiCall, uploadFile } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { beforeAll, describe, test } from 'vitest';
|
||||
import { api, host, origin, relativeFetch, signup } from '../utils.js';
|
||||
import type * as misskey from 'misskey-js';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user