summaryrefslogtreecommitdiff
path: root/packages/backend/test
diff options
context:
space:
mode:
authorおさむのひと <46447427+samunohito@users.noreply.github.com>2024-01-08 17:43:52 +0900
committerGitHub <noreply@github.com>2024-01-08 17:43:52 +0900
commit35ec41fc1eddd7ebf5552e6f0bceebfbfa077a21 (patch)
treed3bb804799399798c5c8d1d4654932c2d25d868e /packages/backend/test
parentfix(backend): `drive/files/update`におけるファイル名のバリデー... (diff)
downloadsharkey-35ec41fc1eddd7ebf5552e6f0bceebfbfa077a21.tar.gz
sharkey-35ec41fc1eddd7ebf5552e6f0bceebfbfa077a21.tar.bz2
sharkey-35ec41fc1eddd7ebf5552e6f0bceebfbfa077a21.zip
enhance(backend): テストの高速化 (#12939)
* enhance(backend): テストの高速化 * add ls * 自動的にマージされるようなので不要 * 起動方法を揃える * fix test
Diffstat (limited to 'packages/backend/test')
-rw-r--r--packages/backend/test/e2e/2fa.ts9
-rw-r--r--packages/backend/test/e2e/antennas.ts24
-rw-r--r--packages/backend/test/e2e/api-visibility.ts13
-rw-r--r--packages/backend/test/e2e/api.ts19
-rw-r--r--packages/backend/test/e2e/block.ts10
-rw-r--r--packages/backend/test/e2e/clips.ts19
-rw-r--r--packages/backend/test/e2e/endpoints.ts10
-rw-r--r--packages/backend/test/e2e/exports.ts9
-rw-r--r--packages/backend/test/e2e/fetch-resource.ts10
-rw-r--r--packages/backend/test/e2e/ff-visibility.ts10
-rw-r--r--packages/backend/test/e2e/move.ts12
-rw-r--r--packages/backend/test/e2e/mute.ts10
-rw-r--r--packages/backend/test/e2e/nodeinfo.ts13
-rw-r--r--packages/backend/test/e2e/note.ts9
-rw-r--r--packages/backend/test/e2e/oauth.ts20
-rw-r--r--packages/backend/test/e2e/renote-mute.ts10
-rw-r--r--packages/backend/test/e2e/streaming.ts9
-rw-r--r--packages/backend/test/e2e/thread-mute.ts10
-rw-r--r--packages/backend/test/e2e/timelines.ts28
-rw-r--r--packages/backend/test/e2e/user-notes.ts10
-rw-r--r--packages/backend/test/e2e/users.ts24
-rw-r--r--packages/backend/test/e2e/well-known.ts10
-rw-r--r--packages/backend/test/jest.setup.ts8
-rw-r--r--packages/backend/test/misc/mock-resolver.ts8
-rw-r--r--packages/backend/test/unit/AnnouncementService.ts8
-rw-r--r--packages/backend/test/unit/DriveService.ts8
-rw-r--r--packages/backend/test/unit/FetchInstanceMetadataService.ts3
-rw-r--r--packages/backend/test/unit/FileInfoService.ts2
-rw-r--r--packages/backend/test/unit/MetaService.ts4
-rw-r--r--packages/backend/test/unit/RoleService.ts2
-rw-r--r--packages/backend/test/unit/S3Service.ts8
-rw-r--r--packages/backend/test/unit/misc/id.ts4
-rw-r--r--packages/backend/test/unit/misc/others.ts2
-rw-r--r--packages/backend/test/utils.ts49
34 files changed, 150 insertions, 254 deletions
diff --git a/packages/backend/test/e2e/2fa.ts b/packages/backend/test/e2e/2fa.ts
index dfed8b2fce..165a1055c9 100644
--- a/packages/backend/test/e2e/2fa.ts
+++ b/packages/backend/test/e2e/2fa.ts
@@ -10,7 +10,7 @@ import * as crypto from 'node:crypto';
import cbor from 'cbor';
import * as OTPAuth from 'otpauth';
import { loadConfig } from '@/config.js';
-import { api, signup, startServer } from '../utils.js';
+import { api, signup } from '../utils.js';
import type {
AuthenticationResponseJSON,
AuthenticatorAssertionResponseJSON,
@@ -19,11 +19,9 @@ import type {
PublicKeyCredentialRequestOptionsJSON,
RegistrationResponseJSON,
} from '@simplewebauthn/typescript-types';
-import type { INestApplicationContext } from '@nestjs/common';
import type * as misskey from 'misskey-js';
describe('2要素認証', () => {
- let app: INestApplicationContext;
let alice: misskey.entities.SignupResponse;
const config = loadConfig();
@@ -185,14 +183,9 @@ describe('2要素認証', () => {
};
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username, password });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('が設定でき、OTPでログインできる。', async () => {
const registerResponse = await api('/i/2fa/register', {
password,
diff --git a/packages/backend/test/e2e/antennas.ts b/packages/backend/test/e2e/antennas.ts
index 9bac5122d4..e63722b246 100644
--- a/packages/backend/test/e2e/antennas.ts
+++ b/packages/backend/test/e2e/antennas.ts
@@ -6,24 +6,20 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { inspect } from 'node:util';
import { DEFAULT_POLICIES } from '@/core/RoleService.js';
import type { Packed } from '@/misc/json-schema.js';
import {
- signup,
+ api,
+ failedApiCall,
post,
- userList,
- page,
role,
- startServer,
- api,
+ signup,
successfulApiCall,
- failedApiCall,
- uploadFile,
testPaginationConsistency,
+ uploadFile,
+ userList,
} from '../utils.js';
import type * as misskey from 'misskey-js';
-import type { INestApplicationContext } from '@nestjs/common';
const compareBy = <T extends { id: string }>(selector: (s: T) => string = (s: T): string => s.id) => (a: T, b: T): number => {
return selector(a).localeCompare(selector(b));
@@ -54,8 +50,6 @@ describe('アンテナ', () => {
withReplies: false,
};
- let app: INestApplicationContext;
-
let root: User;
let alice: User;
let bob: User;
@@ -80,10 +74,6 @@ describe('アンテナ', () => {
let userMutedByAlice: User;
beforeAll(async () => {
- app = await startServer();
- }, 1000 * 60 * 2);
-
- beforeAll(async () => {
root = await signup({ username: 'root' });
alice = await signup({ username: 'alice' });
alicePost = await post(alice, { text: 'test' });
@@ -136,10 +126,6 @@ describe('アンテナ', () => {
await api('mute/create', { userId: userMutedByAlice.id }, alice);
}, 1000 * 60 * 10);
- afterAll(async () => {
- await app.close();
- });
-
beforeEach(async () => {
// テスト間で影響し合わないように毎回全部消す。
for (const user of [alice, bob]) {
diff --git a/packages/backend/test/e2e/api-visibility.ts b/packages/backend/test/e2e/api-visibility.ts
index afe4f9c05a..89d8b42271 100644
--- a/packages/backend/test/e2e/api-visibility.ts
+++ b/packages/backend/test/e2e/api-visibility.ts
@@ -6,21 +6,10 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, post, startServer } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, post, signup } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('API visibility', () => {
- let app: INestApplicationContext;
-
- beforeAll(async () => {
- app = await startServer();
- }, 1000 * 60 * 2);
-
- afterAll(async () => {
- await app.close();
- });
-
describe('Note visibility', () => {
//#region vars
/** ヒロイン */
diff --git a/packages/backend/test/e2e/api.ts b/packages/backend/test/e2e/api.ts
index ad351eebbb..25d5bdb175 100644
--- a/packages/backend/test/e2e/api.ts
+++ b/packages/backend/test/e2e/api.ts
@@ -7,27 +7,30 @@ process.env.NODE_ENV = 'test';
import * as assert from 'assert';
import { IncomingMessage } from 'http';
-import { signup, api, startServer, successfulApiCall, failedApiCall, uploadFile, waitFire, connectStream, relativeFetch, createAppToken } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import {
+ api,
+ connectStream,
+ createAppToken,
+ failedApiCall,
+ relativeFetch,
+ signup,
+ successfulApiCall,
+ uploadFile,
+ waitFire,
+} from '../utils.js';
import type * as misskey from 'misskey-js';
describe('API', () => {
- let app: INestApplicationContext;
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
let carol: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
carol = await signup({ username: 'carol' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
describe('General validation', () => {
test('wrong type', async () => {
const res = await api('/test', {
diff --git a/packages/backend/test/e2e/block.ts b/packages/backend/test/e2e/block.ts
index 25ff9f11ac..1dfc87c64f 100644
--- a/packages/backend/test/e2e/block.ts
+++ b/packages/backend/test/e2e/block.ts
@@ -6,29 +6,21 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, post, startServer } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, post, signup } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Block', () => {
- let app: INestApplicationContext;
-
// alice blocks bob
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
let carol: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
carol = await signup({ username: 'carol' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('Block作成', async () => {
const res = await api('/blocking/create', {
userId: bob.id,
diff --git a/packages/backend/test/e2e/clips.ts b/packages/backend/test/e2e/clips.ts
index 49092fba63..b679eea8cf 100644
--- a/packages/backend/test/e2e/clips.ts
+++ b/packages/backend/test/e2e/clips.ts
@@ -18,25 +18,13 @@ import { paramDef as UnfavoriteParamDef } from '@/server/api/endpoints/clips/unf
import { paramDef as AddNoteParamDef } from '@/server/api/endpoints/clips/add-note.js';
import { paramDef as RemoveNoteParamDef } from '@/server/api/endpoints/clips/remove-note.js';
import { paramDef as NotesParamDef } from '@/server/api/endpoints/clips/notes.js';
-import {
- signup,
- post,
- startServer,
- api,
- successfulApiCall,
- failedApiCall,
- ApiRequest,
- hiddenNote,
-} from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, ApiRequest, failedApiCall, hiddenNote, post, signup, successfulApiCall } from '../utils.js';
describe('クリップ', () => {
type User = Packed<'User'>;
type Note = Packed<'Note'>;
type Clip = Packed<'Clip'>;
- let app: INestApplicationContext;
-
let alice: User;
let bob: User;
let aliceNote: Note;
@@ -145,7 +133,6 @@ describe('クリップ', () => {
};
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
@@ -160,10 +147,6 @@ describe('クリップ', () => {
bobSpecifiedNote = await post(bob, { text: 'specified only', visibility: 'specified' }) as any;
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
afterEach(async () => {
// テスト間で影響し合わないように毎回全部消す。
for (const user of [alice, bob]) {
diff --git a/packages/backend/test/e2e/endpoints.ts b/packages/backend/test/e2e/endpoints.ts
index d75549c816..b12b062a63 100644
--- a/packages/backend/test/e2e/endpoints.ts
+++ b/packages/backend/test/e2e/endpoints.ts
@@ -10,30 +10,22 @@ import * as assert from 'assert';
// https://github.com/node-fetch/node-fetch/pull/1664
import { Blob } from 'node-fetch';
import { MiUser } from '@/models/_.js';
-import { startServer, signup, post, api, uploadFile, simpleGet, initTestDb } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, initTestDb, post, signup, simpleGet, uploadFile } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Endpoints', () => {
- let app: INestApplicationContext;
-
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
let carol: misskey.entities.SignupResponse;
let dave: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
carol = await signup({ username: 'carol' });
dave = await signup({ username: 'dave' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
describe('signup', () => {
test('不正なユーザー名でアカウントが作成できない', async () => {
const res = await api('signup', {
diff --git a/packages/backend/test/e2e/exports.ts b/packages/backend/test/e2e/exports.ts
index 9686f2b7fd..f9b59144a3 100644
--- a/packages/backend/test/e2e/exports.ts
+++ b/packages/backend/test/e2e/exports.ts
@@ -6,12 +6,12 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, startServer, startJobQueue, port, post } from '../utils.js';
+import { api, port, post, signup, startJobQueue } from '../utils.js';
import type { INestApplicationContext } from '@nestjs/common';
import type * as misskey from 'misskey-js';
describe('export-clips', () => {
- let app: INestApplicationContext;
+ let queue: INestApplicationContext;
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
@@ -33,14 +33,13 @@ describe('export-clips', () => {
}
beforeAll(async () => {
- app = await startServer();
- await startJobQueue();
+ queue = await startJobQueue();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
}, 1000 * 60 * 2);
afterAll(async () => {
- await app.close();
+ await queue.close();
});
beforeEach(async () => {
diff --git a/packages/backend/test/e2e/fetch-resource.ts b/packages/backend/test/e2e/fetch-resource.ts
index 28affe7768..0d23b4fe67 100644
--- a/packages/backend/test/e2e/fetch-resource.ts
+++ b/packages/backend/test/e2e/fetch-resource.ts
@@ -6,9 +6,8 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { startServer, channel, clip, cookie, galleryPost, signup, page, play, post, simpleGet, uploadFile } from '../utils.js';
+import { channel, clip, cookie, galleryPost, page, play, post, signup, simpleGet, uploadFile } from '../utils.js';
import type { SimpleGetResponse } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
import type * as misskey from 'misskey-js';
// Request Accept
@@ -23,8 +22,6 @@ const HTML = 'text/html; charset=utf-8';
const JSON_UTF8 = 'application/json; charset=utf-8';
describe('Webリソース', () => {
- let app: INestApplicationContext;
-
let alice: misskey.entities.SignupResponse;
let aliceUploadedFile: any;
let alicesPost: any;
@@ -79,7 +76,6 @@ describe('Webリソース', () => {
};
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
aliceUploadedFile = await uploadFile(alice);
alicesPost = await post(alice, {
@@ -96,10 +92,6 @@ describe('Webリソース', () => {
bob = await signup({ username: 'bob' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
describe.each([
{ path: '/', type: HTML },
{ path: '/docs/ja-JP/about', type: HTML }, // "指定されたURLに該当するページはありませんでした。"
diff --git a/packages/backend/test/e2e/ff-visibility.ts b/packages/backend/test/e2e/ff-visibility.ts
index 4d323e14e7..1fe0478a18 100644
--- a/packages/backend/test/e2e/ff-visibility.ts
+++ b/packages/backend/test/e2e/ff-visibility.ts
@@ -6,26 +6,18 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, startServer, simpleGet } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, signup, simpleGet } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('FF visibility', () => {
- let app: INestApplicationContext;
-
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('followingVisibility, followersVisibility がともに public なユーザーのフォロー/フォロワーを誰でも見れる', async () => {
await api('/i/update', {
followingVisibility: 'public',
diff --git a/packages/backend/test/e2e/move.ts b/packages/backend/test/e2e/move.ts
index f7da66a27c..3937203569 100644
--- a/packages/backend/test/e2e/move.ts
+++ b/packages/backend/test/e2e/move.ts
@@ -3,19 +3,19 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
+import { INestApplicationContext } from '@nestjs/common';
+
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
import { loadConfig } from '@/config.js';
import { MiUser, UsersRepository } from '@/models/_.js';
-import { jobQueue } from '@/boot/common.js';
import { secureRndstr } from '@/misc/secure-rndstr.js';
-import { uploadFile, signup, startServer, initTestDb, api, sleep, successfulApiCall } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { jobQueue } from '@/boot/common.js';
+import { api, initTestDb, signup, sleep, successfulApiCall, uploadFile } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Account Move', () => {
- let app: INestApplicationContext;
let jq: INestApplicationContext;
let url: URL;
@@ -30,8 +30,8 @@ describe('Account Move', () => {
let Users: UsersRepository;
beforeAll(async () => {
- app = await startServer();
jq = await jobQueue();
+
const config = loadConfig();
url = new URL(config.url);
const connection = await initTestDb(false);
@@ -46,7 +46,7 @@ describe('Account Move', () => {
}, 1000 * 60 * 2);
afterAll(async () => {
- await Promise.all([app.close(), jq.close()]);
+ await jq.close();
});
describe('Create Alias', () => {
diff --git a/packages/backend/test/e2e/mute.ts b/packages/backend/test/e2e/mute.ts
index 3b5542dfe0..5144df5ebe 100644
--- a/packages/backend/test/e2e/mute.ts
+++ b/packages/backend/test/e2e/mute.ts
@@ -6,29 +6,21 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, post, react, startServer, waitFire } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, post, react, signup, waitFire } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Mute', () => {
- let app: INestApplicationContext;
-
// alice mutes carol
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
let carol: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
carol = await signup({ username: 'carol' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('ミュート作成', async () => {
const res = await api('/mute/create', {
userId: carol.id,
diff --git a/packages/backend/test/e2e/nodeinfo.ts b/packages/backend/test/e2e/nodeinfo.ts
index 7eed39c5ed..934ef08507 100644
--- a/packages/backend/test/e2e/nodeinfo.ts
+++ b/packages/backend/test/e2e/nodeinfo.ts
@@ -6,20 +6,9 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { relativeFetch, startServer } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { relativeFetch } from '../utils.js';
describe('nodeinfo', () => {
- let app: INestApplicationContext;
-
- beforeAll(async () => {
- app = await startServer();
- }, 1000 * 60 * 2);
-
- afterAll(async () => {
- await app.close();
- });
-
test('nodeinfo 2.1', async () => {
const res = await relativeFetch('nodeinfo/2.1');
assert.ok(res.ok);
diff --git a/packages/backend/test/e2e/note.ts b/packages/backend/test/e2e/note.ts
index 8d33c63485..0f2e08e675 100644
--- a/packages/backend/test/e2e/note.ts
+++ b/packages/backend/test/e2e/note.ts
@@ -8,29 +8,22 @@ process.env.NODE_ENV = 'test';
import * as assert from 'assert';
import { MiNote } from '@/models/Note.js';
import { MAX_NOTE_TEXT_LENGTH } from '@/const.js';
-import { signup, post, uploadUrl, startServer, initTestDb, api, uploadFile } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, initTestDb, post, signup, uploadFile, uploadUrl } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Note', () => {
- let app: INestApplicationContext;
let Notes: any;
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
const connection = await initTestDb(true);
Notes = connection.getRepository(MiNote);
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('投稿できる', async () => {
const post = {
text: 'test',
diff --git a/packages/backend/test/e2e/oauth.ts b/packages/backend/test/e2e/oauth.ts
index 3ca1f8b542..df6ff42df9 100644
--- a/packages/backend/test/e2e/oauth.ts
+++ b/packages/backend/test/e2e/oauth.ts
@@ -11,13 +11,18 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { AuthorizationCode, ResourceOwnerPassword, type AuthorizationTokenConfig, ClientCredentials, ModuleOptions } from 'simple-oauth2';
+import {
+ AuthorizationCode,
+ type AuthorizationTokenConfig,
+ ClientCredentials,
+ ModuleOptions,
+ ResourceOwnerPassword,
+} from 'simple-oauth2';
import pkceChallenge from 'pkce-challenge';
import { JSDOM } from 'jsdom';
-import Fastify, { type FastifyReply, type FastifyInstance } from 'fastify';
-import { api, port, signup, startServer } from '../utils.js';
+import Fastify, { type FastifyInstance, type FastifyReply } from 'fastify';
+import { api, port, sendEnvUpdateRequest, signup } from '../utils.js';
import type * as misskey from 'misskey-js';
-import type { INestApplicationContext } from '@nestjs/common';
const host = `http://127.0.0.1:${port}`;
@@ -147,7 +152,6 @@ async function assertDirectError(response: Response, status: number, error: stri
}
describe('OAuth', () => {
- let app: INestApplicationContext;
let fastify: FastifyInstance;
let alice: misskey.entities.SignupResponse;
@@ -156,7 +160,6 @@ describe('OAuth', () => {
let sender: (reply: FastifyReply) => void;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
@@ -168,7 +171,7 @@ describe('OAuth', () => {
}, 1000 * 60 * 2);
beforeEach(async () => {
- process.env.MISSKEY_TEST_CHECK_IP_RANGE = '';
+ await sendEnvUpdateRequest({ key: 'MISSKEY_TEST_CHECK_IP_RANGE', value: '' });
sender = (reply): void => {
reply.send(`
<!DOCTYPE html>
@@ -180,7 +183,6 @@ describe('OAuth', () => {
afterAll(async () => {
await fastify.close();
- await app.close();
});
test('Full flow', async () => {
@@ -881,7 +883,7 @@ describe('OAuth', () => {
});
test('Disallow loopback', async () => {
- process.env.MISSKEY_TEST_CHECK_IP_RANGE = '1';
+ await sendEnvUpdateRequest({ key: 'MISSKEY_TEST_CHECK_IP_RANGE', value: '1' });
const client = new AuthorizationCode(clientConfig);
const response = await fetch(client.authorizeURL({
diff --git a/packages/backend/test/e2e/renote-mute.ts b/packages/backend/test/e2e/renote-mute.ts
index fededdff32..42cc414c3f 100644
--- a/packages/backend/test/e2e/renote-mute.ts
+++ b/packages/backend/test/e2e/renote-mute.ts
@@ -6,29 +6,21 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, post, react, startServer, waitFire, sleep } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, post, signup, sleep, waitFire } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Renote Mute', () => {
- let app: INestApplicationContext;
-
// alice mutes carol
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
let carol: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
carol = await signup({ username: 'carol' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('ミュート作成', async () => {
const res = await api('/renote-mute/create', {
userId: carol.id,
diff --git a/packages/backend/test/e2e/streaming.ts b/packages/backend/test/e2e/streaming.ts
index a447ba94ae..b6f584fa70 100644
--- a/packages/backend/test/e2e/streaming.ts
+++ b/packages/backend/test/e2e/streaming.ts
@@ -8,12 +8,10 @@ process.env.NODE_ENV = 'test';
import * as assert from 'assert';
import { WebSocket } from 'ws';
import { MiFollowing } from '@/models/Following.js';
-import { signup, api, post, startServer, initTestDb, waitFire, createAppToken, port } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, createAppToken, initTestDb, port, post, signup, waitFire } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Streaming', () => {
- let app: INestApplicationContext;
let Followings: any;
const follow = async (follower: any, followee: any) => {
@@ -48,7 +46,6 @@ describe('Streaming', () => {
let list: any;
beforeAll(async () => {
- app = await startServer();
const connection = await initTestDb(true);
Followings = connection.getRepository(MiFollowing);
@@ -95,10 +92,6 @@ describe('Streaming', () => {
}, chitose);
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
describe('Events', () => {
test('mention event', async () => {
const fired = await waitFire(
diff --git a/packages/backend/test/e2e/thread-mute.ts b/packages/backend/test/e2e/thread-mute.ts
index 5c68e2b150..26c30d6c4c 100644
--- a/packages/backend/test/e2e/thread-mute.ts
+++ b/packages/backend/test/e2e/thread-mute.ts
@@ -6,28 +6,20 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, post, connectStream, startServer } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, connectStream, post, signup } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('Note thread mute', () => {
- let app: INestApplicationContext;
-
let alice: misskey.entities.SignupResponse;
let bob: misskey.entities.SignupResponse;
let carol: misskey.entities.SignupResponse;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
bob = await signup({ username: 'bob' });
carol = await signup({ username: 'carol' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('notes/mentions にミュートしているスレッドの投稿が含まれない', async () => {
const bobNote = await post(bob, { text: '@alice @carol root note' });
const aliceReply = await post(alice, { replyId: bobNote.id, text: '@bob @carol child note' });
diff --git a/packages/backend/test/e2e/timelines.ts b/packages/backend/test/e2e/timelines.ts
index cb9558b416..88f89c4a6f 100644
--- a/packages/backend/test/e2e/timelines.ts
+++ b/packages/backend/test/e2e/timelines.ts
@@ -6,12 +6,8 @@
// How to run:
// pnpm jest -- e2e/timelines.ts
-process.env.NODE_ENV = 'test';
-process.env.FORCE_FOLLOW_REMOTE_USER_FOR_TESTING = 'true';
-
import * as assert from 'assert';
-import { api, post, randomString, signup, sleep, startServer, uploadUrl } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, post, randomString, sendEnvUpdateRequest, signup, sleep, uploadUrl } from '../utils.js';
function genHost() {
return randomString() + '.example.com';
@@ -21,16 +17,6 @@ function waitForPushToTl() {
return sleep(500);
}
-let app: INestApplicationContext;
-
-beforeAll(async () => {
- app = await startServer();
-}, 1000 * 60 * 2);
-
-afterAll(async () => {
- await app.close();
-});
-
describe('Timelines', () => {
describe('Home TL', () => {
test.concurrent('自分の visibility: followers なノートが含まれる', async () => {
@@ -334,8 +320,9 @@ describe('Timelines', () => {
test.concurrent('フォローしているリモートユーザーのノートが含まれる', async () => {
const [alice, bob] = await Promise.all([signup(), signup({ host: genHost() })]);
+ await sendEnvUpdateRequest({ key: 'FORCE_FOLLOW_REMOTE_USER_FOR_TESTING', value: 'true' });
await api('/following/create', { userId: bob.id }, alice);
- await sleep(1000);
+
const bobNote = await post(bob, { text: 'hi' });
await waitForPushToTl();
@@ -348,8 +335,9 @@ describe('Timelines', () => {
test.concurrent('フォローしているリモートユーザーの visibility: home なノートが含まれる', async () => {
const [alice, bob] = await Promise.all([signup(), signup({ host: genHost() })]);
+ await sendEnvUpdateRequest({ key: 'FORCE_FOLLOW_REMOTE_USER_FOR_TESTING', value: 'true' });
await api('/following/create', { userId: bob.id }, alice);
- await sleep(1000);
+
const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
await waitForPushToTl();
@@ -762,8 +750,9 @@ describe('Timelines', () => {
test.concurrent('フォローしているリモートユーザーのノートが含まれる', async () => {
const [alice, bob] = await Promise.all([signup(), signup({ host: genHost() })]);
+ await sendEnvUpdateRequest({ key: 'FORCE_FOLLOW_REMOTE_USER_FOR_TESTING', value: 'true' });
await api('/following/create', { userId: bob.id }, alice);
- await sleep(1000);
+
const bobNote = await post(bob, { text: 'hi' });
await waitForPushToTl();
@@ -776,8 +765,9 @@ describe('Timelines', () => {
test.concurrent('フォローしているリモートユーザーの visibility: home なノートが含まれる', async () => {
const [alice, bob] = await Promise.all([signup(), signup({ host: genHost() })]);
+ await sendEnvUpdateRequest({ key: 'FORCE_FOLLOW_REMOTE_USER_FOR_TESTING', value: 'true' });
await api('/following/create', { userId: bob.id }, alice);
- await sleep(1000);
+
const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
await waitForPushToTl();
diff --git a/packages/backend/test/e2e/user-notes.ts b/packages/backend/test/e2e/user-notes.ts
index 4f2e7c4cf3..07da0db369 100644
--- a/packages/backend/test/e2e/user-notes.ts
+++ b/packages/backend/test/e2e/user-notes.ts
@@ -6,20 +6,16 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { signup, api, post, uploadUrl, startServer } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { api, post, signup, uploadUrl } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('users/notes', () => {
- let app: INestApplicationContext;
-
let alice: misskey.entities.SignupResponse;
let jpgNote: any;
let pngNote: any;
let jpgPngNote: any;
beforeAll(async () => {
- app = await startServer();
alice = await signup({ username: 'alice' });
const jpg = await uploadUrl(alice, 'https://raw.githubusercontent.com/misskey-dev/misskey/develop/packages/backend/test/resources/Lenna.jpg');
const png = await uploadUrl(alice, 'https://raw.githubusercontent.com/misskey-dev/misskey/develop/packages/backend/test/resources/Lenna.png');
@@ -34,10 +30,6 @@ describe('users/notes', () => {
});
}, 1000 * 60 * 2);
- afterAll(async() => {
- await app.close();
- });
-
test('withFiles', async () => {
const res = await api('/users/notes', {
userId: alice.id,
diff --git a/packages/backend/test/e2e/users.ts b/packages/backend/test/e2e/users.ts
index 9c4cbac368..bc23c009b2 100644
--- a/packages/backend/test/e2e/users.ts
+++ b/packages/backend/test/e2e/users.ts
@@ -8,20 +8,8 @@ process.env.NODE_ENV = 'test';
import * as assert from 'assert';
import { inspect } from 'node:util';
import { DEFAULT_POLICIES } from '@/core/RoleService.js';
-import type { Packed } from '@/misc/json-schema.js';
-import {
- signup,
- post,
- page,
- role,
- startServer,
- api,
- successfulApiCall,
- failedApiCall,
- uploadFile,
-} from '../utils.js';
+import { api, page, post, role, signup, successfulApiCall, uploadFile } from '../utils.js';
import type * as misskey from 'misskey-js';
-import type { INestApplicationContext } from '@nestjs/common';
describe('ユーザー', () => {
// エンティティとしてのユーザーを主眼においたテストを記述する
@@ -185,8 +173,6 @@ describe('ユーザー', () => {
});
};
- let app: INestApplicationContext;
-
let root: User;
let alice: User;
let aliceNote: misskey.entities.Note;
@@ -231,10 +217,6 @@ describe('ユーザー', () => {
let userFollowRequested: User;
beforeAll(async () => {
- app = await startServer();
- }, 1000 * 60 * 2);
-
- beforeAll(async () => {
root = await signup({ username: 'root' });
alice = await signup({ username: 'alice' });
aliceNote = await post(alice, { text: 'test' }) as any;
@@ -321,10 +303,6 @@ describe('ユーザー', () => {
await api('following/create', { userId: userFollowRequested.id }, userFollowRequesting);
}, 1000 * 60 * 10);
- afterAll(async () => {
- await app.close();
- });
-
beforeEach(async () => {
alice = {
...alice,
diff --git a/packages/backend/test/e2e/well-known.ts b/packages/backend/test/e2e/well-known.ts
index 14e32e1627..0429b7c8b2 100644
--- a/packages/backend/test/e2e/well-known.ts
+++ b/packages/backend/test/e2e/well-known.ts
@@ -6,24 +6,16 @@
process.env.NODE_ENV = 'test';
import * as assert from 'assert';
-import { host, origin, relativeFetch, signup, startServer } from '../utils.js';
-import type { INestApplicationContext } from '@nestjs/common';
+import { host, origin, relativeFetch, signup } from '../utils.js';
import type * as misskey from 'misskey-js';
describe('.well-known', () => {
- let app: INestApplicationContext;
let alice: misskey.entities.User;
beforeAll(async () => {
- app = await startServer();
-
alice = await signup({ username: 'alice' });
}, 1000 * 60 * 2);
- afterAll(async () => {
- await app.close();
- });
-
test('nodeinfo', async () => {
const res = await relativeFetch('.well-known/nodeinfo');
assert.ok(res.ok);
diff --git a/packages/backend/test/jest.setup.ts b/packages/backend/test/jest.setup.ts
new file mode 100644
index 0000000000..cf5b9bf24d
--- /dev/null
+++ b/packages/backend/test/jest.setup.ts
@@ -0,0 +1,8 @@
+import { initTestDb, sendEnvResetRequest } from './utils.js';
+
+beforeAll(async () => {
+ await Promise.all([
+ initTestDb(false),
+ sendEnvResetRequest(),
+ ]);
+});
diff --git a/packages/backend/test/misc/mock-resolver.ts b/packages/backend/test/misc/mock-resolver.ts
index 7cba7a2aa8..7ee65d1ab0 100644
--- a/packages/backend/test/misc/mock-resolver.ts
+++ b/packages/backend/test/misc/mock-resolver.ts
@@ -15,7 +15,13 @@ import type { LoggerService } from '@/core/LoggerService.js';
import type { MetaService } from '@/core/MetaService.js';
import type { UtilityService } from '@/core/UtilityService.js';
import { bindThis } from '@/decorators.js';
-import type { NoteReactionsRepository, NotesRepository, PollsRepository, UsersRepository, FollowRequestsRepository } from '@/models/_.js';
+import type {
+ FollowRequestsRepository,
+ NoteReactionsRepository,
+ NotesRepository,
+ PollsRepository,
+ UsersRepository,
+} from '@/models/_.js';
type MockResponse = {
type: string;
diff --git a/packages/backend/test/unit/AnnouncementService.ts b/packages/backend/test/unit/AnnouncementService.ts
index f2aa5d35e4..f02c4e6700 100644
--- a/packages/backend/test/unit/AnnouncementService.ts
+++ b/packages/backend/test/unit/AnnouncementService.ts
@@ -10,7 +10,13 @@ import { ModuleMocker } from 'jest-mock';
import { Test } from '@nestjs/testing';
import { GlobalModule } from '@/GlobalModule.js';
import { AnnouncementService } from '@/core/AnnouncementService.js';
-import type { MiAnnouncement, AnnouncementsRepository, AnnouncementReadsRepository, UsersRepository, MiUser } from '@/models/_.js';
+import type {
+ AnnouncementReadsRepository,
+ AnnouncementsRepository,
+ MiAnnouncement,
+ MiUser,
+ UsersRepository,
+} from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { genAidx } from '@/misc/id/aidx.js';
import { CacheService } from '@/core/CacheService.js';
diff --git a/packages/backend/test/unit/DriveService.ts b/packages/backend/test/unit/DriveService.ts
index 7234da2e36..64397a1a4f 100644
--- a/packages/backend/test/unit/DriveService.ts
+++ b/packages/backend/test/unit/DriveService.ts
@@ -6,7 +6,13 @@
process.env.NODE_ENV = 'test';
import { Test } from '@nestjs/testing';
-import { DeleteObjectCommandOutput, DeleteObjectCommand, NoSuchKey, InvalidObjectState, S3Client } from '@aws-sdk/client-s3';
+import {
+ DeleteObjectCommand,
+ DeleteObjectCommandOutput,
+ InvalidObjectState,
+ NoSuchKey,
+ S3Client,
+} from '@aws-sdk/client-s3';
import { mockClient } from 'aws-sdk-client-mock';
import { GlobalModule } from '@/GlobalModule.js';
import { DriveService } from '@/core/DriveService.js';
diff --git a/packages/backend/test/unit/FetchInstanceMetadataService.ts b/packages/backend/test/unit/FetchInstanceMetadataService.ts
index 34200899d4..cddc374f9a 100644
--- a/packages/backend/test/unit/FetchInstanceMetadataService.ts
+++ b/packages/backend/test/unit/FetchInstanceMetadataService.ts
@@ -55,7 +55,8 @@ describe('FetchInstanceMetadataService', () => {
return { fetch: jest.fn() };
} else if (token === DI.redis) {
return mockRedis;
- }})
+ }
+ })
.compile();
app.enableShutdownHooks();
diff --git a/packages/backend/test/unit/FileInfoService.ts b/packages/backend/test/unit/FileInfoService.ts
index de0b31488c..f3717d73cd 100644
--- a/packages/backend/test/unit/FileInfoService.ts
+++ b/packages/backend/test/unit/FileInfoService.ts
@@ -10,7 +10,7 @@ import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import { ModuleMocker } from 'jest-mock';
import { Test } from '@nestjs/testing';
-import { describe, beforeAll, afterAll, test } from '@jest/globals';
+import { afterAll, beforeAll, describe, test } from '@jest/globals';
import { GlobalModule } from '@/GlobalModule.js';
import { FileInfoService } from '@/core/FileInfoService.js';
//import { DI } from '@/di-symbols.js';
diff --git a/packages/backend/test/unit/MetaService.ts b/packages/backend/test/unit/MetaService.ts
index ab30f48283..c4c7f21913 100644
--- a/packages/backend/test/unit/MetaService.ts
+++ b/packages/backend/test/unit/MetaService.ts
@@ -6,15 +6,13 @@
process.env.NODE_ENV = 'test';
import { jest } from '@jest/globals';
-import { ModuleMocker } from 'jest-mock';
import { Test } from '@nestjs/testing';
import { GlobalModule } from '@/GlobalModule.js';
-import type { MetasRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { MetaService } from '@/core/MetaService.js';
import { CoreModule } from '@/core/CoreModule.js';
-import type { DataSource } from 'typeorm';
import type { TestingModule } from '@nestjs/testing';
+import type { DataSource } from 'typeorm';
describe('MetaService', () => {
let app: TestingModule;
diff --git a/packages/backend/test/unit/RoleService.ts b/packages/backend/test/unit/RoleService.ts
index 9879eb8e3e..46613c29c8 100644
--- a/packages/backend/test/unit/RoleService.ts
+++ b/packages/backend/test/unit/RoleService.ts
@@ -11,7 +11,7 @@ import { Test } from '@nestjs/testing';
import * as lolex from '@sinonjs/fake-timers';
import { GlobalModule } from '@/GlobalModule.js';
import { RoleService } from '@/core/RoleService.js';
-import type { MiRole, RolesRepository, RoleAssignmentsRepository, UsersRepository, MiUser } from '@/models/_.js';
+import type { MiRole, MiUser, RoleAssignmentsRepository, RolesRepository, UsersRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { MetaService } from '@/core/MetaService.js';
import { genAidx } from '@/misc/id/aidx.js';
diff --git a/packages/backend/test/unit/S3Service.ts b/packages/backend/test/unit/S3Service.ts
index c1eafc96b7..2ffc99380d 100644
--- a/packages/backend/test/unit/S3Service.ts
+++ b/packages/backend/test/unit/S3Service.ts
@@ -6,7 +6,13 @@
process.env.NODE_ENV = 'test';
import { Test } from '@nestjs/testing';
-import { UploadPartCommand, CompleteMultipartUploadCommand, CreateMultipartUploadCommand, S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
+import {
+ CompleteMultipartUploadCommand,
+ CreateMultipartUploadCommand,
+ PutObjectCommand,
+ S3Client,
+ UploadPartCommand,
+} from '@aws-sdk/client-s3';
import { mockClient } from 'aws-sdk-client-mock';
import { GlobalModule } from '@/GlobalModule.js';
import { CoreModule } from '@/core/CoreModule.js';
diff --git a/packages/backend/test/unit/misc/id.ts b/packages/backend/test/unit/misc/id.ts
index 59783a9fa1..1498c075aa 100644
--- a/packages/backend/test/unit/misc/id.ts
+++ b/packages/backend/test/unit/misc/id.ts
@@ -4,13 +4,13 @@
*/
import { ulid } from 'ulid';
-import { describe, test, expect } from '@jest/globals';
+import { describe, expect, test } from '@jest/globals';
import { aidRegExp, genAid, parseAid } from '@/misc/id/aid.js';
import { aidxRegExp, genAidx, parseAidx } from '@/misc/id/aidx.js';
import { genMeid, meidRegExp, parseMeid } from '@/misc/id/meid.js';
import { genMeidg, meidgRegExp, parseMeidg } from '@/misc/id/meidg.js';
import { genObjectId, objectIdRegExp, parseObjectId } from '@/misc/id/object-id.js';
-import { ulidRegExp, parseUlid } from '@/misc/id/ulid.js';
+import { parseUlid, ulidRegExp } from '@/misc/id/ulid.js';
describe('misc:id', () => {
test('aid', () => {
diff --git a/packages/backend/test/unit/misc/others.ts b/packages/backend/test/unit/misc/others.ts
index b16d26d866..caa815b3df 100644
--- a/packages/backend/test/unit/misc/others.ts
+++ b/packages/backend/test/unit/misc/others.ts
@@ -3,7 +3,7 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { describe, test, expect } from '@jest/globals';
+import { describe, expect, test } from '@jest/globals';
import { contentDisposition } from '@/misc/content-disposition.js';
describe('misc:content-disposition', () => {
diff --git a/packages/backend/test/utils.ts b/packages/backend/test/utils.ts
index 7c9428d476..2b232a0a5d 100644
--- a/packages/backend/test/utils.ts
+++ b/packages/backend/test/utils.ts
@@ -5,7 +5,7 @@
import * as assert from 'node:assert';
import { readFile } from 'node:fs/promises';
-import { isAbsolute, basename } from 'node:path';
+import { basename, isAbsolute } from 'node:path';
import { randomUUID } from 'node:crypto';
import { inspect } from 'node:util';
import WebSocket, { ClientOptions } from 'ws';
@@ -68,7 +68,11 @@ export const failedApiCall = async <T, >(request: ApiRequest, assertion: {
return res.body;
};
-const request = async (path: string, params: any, me?: UserToken): Promise<{ status: number, headers: Headers, body: any }> => {
+const request = async (path: string, params: any, me?: UserToken): Promise<{
+ status: number,
+ headers: Headers,
+ body: any
+}> => {
const bodyAuth: Record<string, string> = {};
const headers: Record<string, string> = {
'Content-Type': 'application/json',
@@ -275,7 +279,11 @@ interface UploadOptions {
* Upload file
* @param user User
*/
-export const uploadFile = async (user?: UserToken, { path, name, blob }: UploadOptions = {}): Promise<{ status: number, headers: Headers, body: misskey.Endpoints['drive/files/create']['res'] | null }> => {
+export const uploadFile = async (user?: UserToken, { path, name, blob }: UploadOptions = {}): Promise<{
+ status: number,
+ headers: Headers,
+ body: misskey.Endpoints['drive/files/create']['res'] | null
+}> => {
const absPath = path == null
? new URL('resources/Lenna.jpg', import.meta.url)
: isAbsolute(path.toString())
@@ -426,8 +434,8 @@ export const simpleGet = async (path: string, accept = '*/*', cookie: any = unde
];
const body =
- jsonTypes.includes(res.headers.get('content-type') ?? '') ? await res.json() :
- htmlTypes.includes(res.headers.get('content-type') ?? '') ? new JSDOM(await res.text()) :
+ jsonTypes.includes(res.headers.get('content-type') ?? '') ? await res.json() :
+ htmlTypes.includes(res.headers.get('content-type') ?? '') ? new JSDOM(await res.text()) :
null;
return {
@@ -557,3 +565,34 @@ export function sleep(msec: number) {
}, msec);
});
}
+
+export async function sendEnvUpdateRequest(params: { key: string, value?: string }) {
+ const res = await fetch(
+ `http://localhost:${port + 1000}/env`,
+ {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(params),
+ },
+ );
+
+ if (res.status !== 200) {
+ throw new Error('server env update failed.');
+ }
+}
+
+export async function sendEnvResetRequest() {
+ const res = await fetch(
+ `http://localhost:${port + 1000}/env-reset`,
+ {
+ method: 'POST',
+ body: JSON.stringify({}),
+ },
+ );
+
+ if (res.status !== 200) {
+ throw new Error('server env update failed.');
+ }
+}