mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-11-04 07:24:13 +00:00 
			
		
		
		
	Use built-in API (#14095)
This commit is contained in:
		
							parent
							
								
									eafae79869
								
							
						
					
					
						commit
						de1fe7cc5a
					
				
					 6 changed files with 69 additions and 73 deletions
				
			
		| 
						 | 
					@ -7,12 +7,13 @@ import { INestApplicationContext } from '@nestjs/common';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
process.env.NODE_ENV = 'test';
 | 
					process.env.NODE_ENV = 'test';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { setTimeout } from 'node:timers/promises';
 | 
				
			||||||
import * as assert from 'assert';
 | 
					import * as assert from 'assert';
 | 
				
			||||||
import { loadConfig } from '@/config.js';
 | 
					import { loadConfig } from '@/config.js';
 | 
				
			||||||
import { MiRepository, MiUser, UsersRepository, miRepository } from '@/models/_.js';
 | 
					import { MiRepository, MiUser, UsersRepository, miRepository } from '@/models/_.js';
 | 
				
			||||||
import { secureRndstr } from '@/misc/secure-rndstr.js';
 | 
					import { secureRndstr } from '@/misc/secure-rndstr.js';
 | 
				
			||||||
import { jobQueue } from '@/boot/common.js';
 | 
					import { jobQueue } from '@/boot/common.js';
 | 
				
			||||||
import { api, initTestDb, signup, sleep, successfulApiCall, uploadFile } from '../utils.js';
 | 
					import { api, initTestDb, signup, successfulApiCall, uploadFile } from '../utils.js';
 | 
				
			||||||
import type * as misskey from 'misskey-js';
 | 
					import type * as misskey from 'misskey-js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('Account Move', () => {
 | 
					describe('Account Move', () => {
 | 
				
			||||||
| 
						 | 
					@ -271,7 +272,7 @@ describe('Account Move', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			assert.strictEqual(move.status, 200);
 | 
								assert.strictEqual(move.status, 200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await sleep(1000 * 3); // wait for jobs to finish
 | 
								await setTimeout(1000 * 3); // wait for jobs to finish
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// Unfollow delayed?
 | 
								// Unfollow delayed?
 | 
				
			||||||
			const aliceFollowings = await api('users/following', {
 | 
								const aliceFollowings = await api('users/following', {
 | 
				
			||||||
| 
						 | 
					@ -330,7 +331,7 @@ describe('Account Move', () => {
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		test('Unfollowed after 10 sec (24 hours in production).', async () => {
 | 
							test('Unfollowed after 10 sec (24 hours in production).', async () => {
 | 
				
			||||||
			await sleep(1000 * 8);
 | 
								await setTimeout(1000 * 8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const following = await api('users/following', {
 | 
								const following = await api('users/following', {
 | 
				
			||||||
				userId: alice.id,
 | 
									userId: alice.id,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,8 @@
 | 
				
			||||||
process.env.NODE_ENV = 'test';
 | 
					process.env.NODE_ENV = 'test';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as assert from 'assert';
 | 
					import * as assert from 'assert';
 | 
				
			||||||
import { api, post, signup, sleep, waitFire } from '../utils.js';
 | 
					import { setTimeout } from 'node:timers/promises';
 | 
				
			||||||
 | 
					import { api, post, signup, waitFire } from '../utils.js';
 | 
				
			||||||
import type * as misskey from 'misskey-js';
 | 
					import type * as misskey from 'misskey-js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('Renote Mute', () => {
 | 
					describe('Renote Mute', () => {
 | 
				
			||||||
| 
						 | 
					@ -35,7 +36,7 @@ describe('Renote Mute', () => {
 | 
				
			||||||
		const carolNote = await post(carol, { text: 'hi' });
 | 
							const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// redisに追加されるのを待つ
 | 
							// redisに追加されるのを待つ
 | 
				
			||||||
		await sleep(100);
 | 
							await setTimeout(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const res = await api('notes/local-timeline', {}, alice);
 | 
							const res = await api('notes/local-timeline', {}, alice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,7 +53,7 @@ describe('Renote Mute', () => {
 | 
				
			||||||
		const carolNote = await post(carol, { text: 'hi' });
 | 
							const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// redisに追加されるのを待つ
 | 
							// redisに追加されるのを待つ
 | 
				
			||||||
		await sleep(100);
 | 
							await setTimeout(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const res = await api('notes/local-timeline', {}, alice);
 | 
							const res = await api('notes/local-timeline', {}, alice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +70,7 @@ describe('Renote Mute', () => {
 | 
				
			||||||
		const bobRenote = await post(bob, { renoteId: carolNote.id });
 | 
							const bobRenote = await post(bob, { renoteId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// redisに追加されるのを待つ
 | 
							// redisに追加されるのを待つ
 | 
				
			||||||
		await sleep(100);
 | 
							await setTimeout(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const res = await api('notes/local-timeline', {}, alice);
 | 
							const res = await api('notes/local-timeline', {}, alice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,16 +7,17 @@
 | 
				
			||||||
// pnpm jest -- e2e/timelines.ts
 | 
					// pnpm jest -- e2e/timelines.ts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import * as assert from 'assert';
 | 
					import * as assert from 'assert';
 | 
				
			||||||
 | 
					import { setTimeout } from 'node:timers/promises';
 | 
				
			||||||
import { Redis } from 'ioredis';
 | 
					import { Redis } from 'ioredis';
 | 
				
			||||||
import { loadConfig } from '@/config.js';
 | 
					import { loadConfig } from '@/config.js';
 | 
				
			||||||
import { api, post, randomString, sendEnvUpdateRequest, signup, sleep, uploadUrl } from '../utils.js';
 | 
					import { api, post, randomString, sendEnvUpdateRequest, signup, uploadUrl } from '../utils.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function genHost() {
 | 
					function genHost() {
 | 
				
			||||||
	return randomString() + '.example.com';
 | 
						return randomString() + '.example.com';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function waitForPushToTl() {
 | 
					function waitForPushToTl() {
 | 
				
			||||||
	return sleep(500);
 | 
						return setTimeout(500);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let redisForTimelines: Redis;
 | 
					let redisForTimelines: Redis;
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi' });
 | 
								const bobNote = await post(bob, { text: 'hi' });
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,7 +61,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -77,7 +78,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,7 +95,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
								await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -111,7 +112,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
								await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id, visibility: 'specified', visibleUserIds: [carolNote.id] });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id, visibility: 'specified', visibleUserIds: [carolNote.id] });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -128,7 +129,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
								await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi', visibility: 'followers' });
 | 
								const carolNote = await post(carol, { text: 'hi', visibility: 'followers' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,7 +148,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			await api('following/create', { userId: carol.id }, alice);
 | 
								await api('following/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await api('following/create', { userId: carol.id }, bob);
 | 
								await api('following/create', { userId: carol.id }, bob);
 | 
				
			||||||
			await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
								await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi', visibility: 'followers' });
 | 
								const carolNote = await post(carol, { text: 'hi', visibility: 'followers' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,7 +167,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('following/create', { userId: carol.id }, alice);
 | 
								await api('following/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
								await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id, visibility: 'specified', visibleUserIds: [carolNote.id] });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id, visibility: 'specified', visibleUserIds: [carolNote.id] });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -182,7 +183,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote1 = await post(bob, { text: 'hi' });
 | 
								const bobNote1 = await post(bob, { text: 'hi' });
 | 
				
			||||||
			const bobNote2 = await post(bob, { text: 'hi', replyId: bobNote1.id });
 | 
								const bobNote2 = await post(bob, { text: 'hi', replyId: bobNote1.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -198,7 +199,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const aliceNote = await post(alice, { text: 'hi' });
 | 
								const aliceNote = await post(alice, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -228,7 +229,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { renoteId: carolNote.id });
 | 
								const bobNote = await post(bob, { renoteId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -244,7 +245,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { renoteId: carolNote.id });
 | 
								const bobNote = await post(bob, { renoteId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -262,7 +263,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -280,7 +281,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [carol.id] });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [carol.id] });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -295,7 +296,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('mute/create', { userId: carol.id }, alice);
 | 
								await api('mute/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -313,7 +314,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
								await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await api('mute/create', { userId: carol.id }, alice);
 | 
								await api('mute/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -359,7 +360,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const [bobFile, carolFile] = await Promise.all([
 | 
								const [bobFile, carolFile] = await Promise.all([
 | 
				
			||||||
				uploadUrl(bob, 'https://raw.githubusercontent.com/misskey-dev/assets/main/public/icon.png'),
 | 
									uploadUrl(bob, 'https://raw.githubusercontent.com/misskey-dev/assets/main/public/icon.png'),
 | 
				
			||||||
				uploadUrl(carol, 'https://raw.githubusercontent.com/misskey-dev/assets/main/public/icon.png'),
 | 
									uploadUrl(carol, 'https://raw.githubusercontent.com/misskey-dev/assets/main/public/icon.png'),
 | 
				
			||||||
| 
						 | 
					@ -384,7 +385,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const channel = await api('channels/create', { name: 'channel' }, bob).then(x => x.body);
 | 
								const channel = await api('channels/create', { name: 'channel' }, bob).then(x => x.body);
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', channelId: channel.id });
 | 
								const bobNote = await post(bob, { text: 'hi', channelId: channel.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -411,7 +412,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [alice.id] });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [alice.id] });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -438,7 +439,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [carol.id] });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [carol.id] });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -566,7 +567,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: carol.id }, alice);
 | 
								await api('following/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi', visibility: 'home' });
 | 
								const carolNote = await post(carol, { text: 'hi', visibility: 'home' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi' });
 | 
								const bobNote = await post(bob, { text: 'hi' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -582,7 +583,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('mute/create', { userId: carol.id }, alice);
 | 
								await api('mute/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi' });
 | 
								const bobNote = await post(bob, { text: 'hi' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -599,7 +600,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('mute/create', { userId: carol.id }, alice);
 | 
								await api('mute/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -617,7 +618,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
								await api('following/update', { userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await api('mute/create', { userId: carol.id }, alice);
 | 
								await api('mute/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -633,7 +634,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const aliceNote = await post(alice, { text: 'hi' });
 | 
								const aliceNote = await post(alice, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -703,7 +704,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -717,7 +718,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const aliceNote = await post(alice, { text: 'hi' });
 | 
								const aliceNote = await post(alice, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -820,7 +821,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi' });
 | 
								const bobNote = await post(bob, { text: 'hi' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -835,7 +836,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -850,7 +851,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -865,7 +866,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -881,7 +882,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote1 = await post(bob, { text: 'hi' });
 | 
								const bobNote1 = await post(bob, { text: 'hi' });
 | 
				
			||||||
			const bobNote2 = await post(bob, { text: 'hi', replyId: bobNote1.id });
 | 
								const bobNote2 = await post(bob, { text: 'hi', replyId: bobNote1.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -899,7 +900,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await api('users/lists/update-membership', { listId: list.id, userId: bob.id, withReplies: false }, alice);
 | 
								await api('users/lists/update-membership', { listId: list.id, userId: bob.id, withReplies: false }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const aliceNote = await post(alice, { text: 'hi' });
 | 
								const aliceNote = await post(alice, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: aliceNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -916,7 +917,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await api('users/lists/update-membership', { listId: list.id, userId: bob.id, withReplies: false }, alice);
 | 
								await api('users/lists/update-membership', { listId: list.id, userId: bob.id, withReplies: false }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -933,7 +934,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await api('users/lists/update-membership', { listId: list.id, userId: bob.id, withReplies: true }, alice);
 | 
								await api('users/lists/update-membership', { listId: list.id, userId: bob.id, withReplies: true }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', replyId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -950,7 +951,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'home' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -966,7 +967,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -982,7 +983,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: alice.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: alice.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const aliceNote = await post(alice, { text: 'hi', visibility: 'followers' });
 | 
								const aliceNote = await post(alice, { text: 'hi', visibility: 'followers' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -999,7 +1000,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const channel = await api('channels/create', { name: 'channel' }, bob).then(x => x.body);
 | 
								const channel = await api('channels/create', { name: 'channel' }, bob).then(x => x.body);
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', channelId: channel.id });
 | 
								const bobNote = await post(bob, { text: 'hi', channelId: channel.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -1031,7 +1032,7 @@ describe('Timelines', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [alice.id] });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [alice.id] });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -1048,7 +1049,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
								const list = await api('users/lists/create', { name: 'list' }, alice).then(res => res.body);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: bob.id }, alice);
 | 
				
			||||||
			await api('users/lists/push', { listId: list.id, userId: carol.id }, alice);
 | 
								await api('users/lists/push', { listId: list.id, userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [carol.id] });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'specified', visibleUserIds: [carol.id] });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -1088,7 +1089,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('following/create', { userId: bob.id }, alice);
 | 
								await api('following/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
								const bobNote = await post(bob, { text: 'hi', visibility: 'followers' });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await waitForPushToTl();
 | 
								await waitForPushToTl();
 | 
				
			||||||
| 
						 | 
					@ -1228,7 +1229,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
								const [alice, bob, carol] = await Promise.all([signup(), signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('mute/create', { userId: carol.id }, alice);
 | 
								await api('mute/create', { userId: carol.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const carolNote = await post(carol, { text: 'hi' });
 | 
								const carolNote = await post(carol, { text: 'hi' });
 | 
				
			||||||
			const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
								const bobNote = await post(bob, { text: 'hi', renoteId: carolNote.id });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1243,7 +1244,7 @@ describe('Timelines', () => {
 | 
				
			||||||
			const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
								const [alice, bob] = await Promise.all([signup(), signup()]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			await api('mute/create', { userId: bob.id }, alice);
 | 
								await api('mute/create', { userId: bob.id }, alice);
 | 
				
			||||||
			await sleep(1000);
 | 
								await setTimeout(1000);
 | 
				
			||||||
			const bobNote1 = await post(bob, { text: 'hi' });
 | 
								const bobNote1 = await post(bob, { text: 'hi' });
 | 
				
			||||||
			const bobNote2 = await post(bob, { text: 'hi', replyId: bobNote1.id });
 | 
								const bobNote2 = await post(bob, { text: 'hi', replyId: bobNote1.id });
 | 
				
			||||||
			const bobNote3 = await post(bob, { text: 'hi', renoteId: bobNote1.id });
 | 
								const bobNote3 = await post(bob, { text: 'hi', renoteId: bobNote1.id });
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
process.env.NODE_ENV = 'test';
 | 
					process.env.NODE_ENV = 'test';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { setTimeout } from 'node:timers/promises';
 | 
				
			||||||
import { jest } from '@jest/globals';
 | 
					import { jest } from '@jest/globals';
 | 
				
			||||||
import { ModuleMocker } from 'jest-mock';
 | 
					import { ModuleMocker } from 'jest-mock';
 | 
				
			||||||
import { Test } from '@nestjs/testing';
 | 
					import { Test } from '@nestjs/testing';
 | 
				
			||||||
| 
						 | 
					@ -29,7 +30,6 @@ import { secureRndstr } from '@/misc/secure-rndstr.js';
 | 
				
			||||||
import { NotificationService } from '@/core/NotificationService.js';
 | 
					import { NotificationService } from '@/core/NotificationService.js';
 | 
				
			||||||
import { RoleCondFormulaValue } from '@/models/Role.js';
 | 
					import { RoleCondFormulaValue } from '@/models/Role.js';
 | 
				
			||||||
import { UserEntityService } from '@/core/entities/UserEntityService.js';
 | 
					import { UserEntityService } from '@/core/entities/UserEntityService.js';
 | 
				
			||||||
import { sleep } from '../utils.js';
 | 
					 | 
				
			||||||
import type { TestingModule } from '@nestjs/testing';
 | 
					import type { TestingModule } from '@nestjs/testing';
 | 
				
			||||||
import type { MockFunctionMetadata } from 'jest-mock';
 | 
					import type { MockFunctionMetadata } from 'jest-mock';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -278,7 +278,7 @@ describe('RoleService', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// ストリーミング経由で反映されるまでちょっと待つ
 | 
								// ストリーミング経由で反映されるまでちょっと待つ
 | 
				
			||||||
			clock.uninstall();
 | 
								clock.uninstall();
 | 
				
			||||||
			await sleep(100);
 | 
								await setTimeout(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const resultAfter25hAgain = await roleService.getUserPolicies(user.id);
 | 
								const resultAfter25hAgain = await roleService.getUserPolicies(user.id);
 | 
				
			||||||
			expect(resultAfter25hAgain.canManageCustomEmojis).toBe(true);
 | 
								expect(resultAfter25hAgain.canManageCustomEmojis).toBe(true);
 | 
				
			||||||
| 
						 | 
					@ -807,7 +807,7 @@ describe('RoleService', () => {
 | 
				
			||||||
			await roleService.assign(user.id, role.id);
 | 
								await roleService.assign(user.id, role.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			clock.uninstall();
 | 
								clock.uninstall();
 | 
				
			||||||
			await sleep(100);
 | 
								await setTimeout(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const assignments = await roleAssignmentsRepository.find({
 | 
								const assignments = await roleAssignmentsRepository.find({
 | 
				
			||||||
				where: {
 | 
									where: {
 | 
				
			||||||
| 
						 | 
					@ -835,7 +835,7 @@ describe('RoleService', () => {
 | 
				
			||||||
			await roleService.assign(user.id, role.id);
 | 
								await roleService.assign(user.id, role.id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			clock.uninstall();
 | 
								clock.uninstall();
 | 
				
			||||||
			await sleep(100);
 | 
								await setTimeout(100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			const assignments = await roleAssignmentsRepository.find({
 | 
								const assignments = await roleAssignmentsRepository.find({
 | 
				
			||||||
				where: {
 | 
									where: {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
 * SPDX-License-Identifier: AGPL-3.0-only
 | 
					 * SPDX-License-Identifier: AGPL-3.0-only
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { setTimeout } from 'node:timers/promises';
 | 
				
			||||||
import { afterEach, beforeEach, describe, expect, jest } from '@jest/globals';
 | 
					import { afterEach, beforeEach, describe, expect, jest } from '@jest/globals';
 | 
				
			||||||
import { Test, TestingModule } from '@nestjs/testing';
 | 
					import { Test, TestingModule } from '@nestjs/testing';
 | 
				
			||||||
import { MiUser } from '@/models/User.js';
 | 
					import { MiUser } from '@/models/User.js';
 | 
				
			||||||
| 
						 | 
					@ -16,7 +17,7 @@ import { DI } from '@/di-symbols.js';
 | 
				
			||||||
import { QueueService } from '@/core/QueueService.js';
 | 
					import { QueueService } from '@/core/QueueService.js';
 | 
				
			||||||
import { LoggerService } from '@/core/LoggerService.js';
 | 
					import { LoggerService } from '@/core/LoggerService.js';
 | 
				
			||||||
import { SystemWebhookService } from '@/core/SystemWebhookService.js';
 | 
					import { SystemWebhookService } from '@/core/SystemWebhookService.js';
 | 
				
			||||||
import { randomString, sleep } from '../utils.js';
 | 
					import { randomString } from '../utils.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('SystemWebhookService', () => {
 | 
					describe('SystemWebhookService', () => {
 | 
				
			||||||
	let app: TestingModule;
 | 
						let app: TestingModule;
 | 
				
			||||||
| 
						 | 
					@ -358,7 +359,7 @@ describe('SystemWebhookService', () => {
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// redisでの配信経由で更新されるのでちょっと待つ
 | 
										// redisでの配信経由で更新されるのでちょっと待つ
 | 
				
			||||||
					await sleep(500);
 | 
										await setTimeout(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
										const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
				
			||||||
					expect(fetchedWebhooks).toEqual([webhook]);
 | 
										expect(fetchedWebhooks).toEqual([webhook]);
 | 
				
			||||||
| 
						 | 
					@ -377,7 +378,7 @@ describe('SystemWebhookService', () => {
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// redisでの配信経由で更新されるのでちょっと待つ
 | 
										// redisでの配信経由で更新されるのでちょっと待つ
 | 
				
			||||||
					await sleep(500);
 | 
										await setTimeout(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
										const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
				
			||||||
					expect(fetchedWebhooks).toEqual([]);
 | 
										expect(fetchedWebhooks).toEqual([]);
 | 
				
			||||||
| 
						 | 
					@ -407,7 +408,7 @@ describe('SystemWebhookService', () => {
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// redisでの配信経由で更新されるのでちょっと待つ
 | 
										// redisでの配信経由で更新されるのでちょっと待つ
 | 
				
			||||||
					await sleep(500);
 | 
										await setTimeout(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
										const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
				
			||||||
					expect(fetchedWebhooks).toEqual([webhook2]);
 | 
										expect(fetchedWebhooks).toEqual([webhook2]);
 | 
				
			||||||
| 
						 | 
					@ -434,7 +435,7 @@ describe('SystemWebhookService', () => {
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// redisでの配信経由で更新されるのでちょっと待つ
 | 
										// redisでの配信経由で更新されるのでちょっと待つ
 | 
				
			||||||
					await sleep(500);
 | 
										await setTimeout(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
										const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
				
			||||||
					expect(fetchedWebhooks.length).toEqual(0);
 | 
										expect(fetchedWebhooks.length).toEqual(0);
 | 
				
			||||||
| 
						 | 
					@ -457,7 +458,7 @@ describe('SystemWebhookService', () => {
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// redisでの配信経由で更新されるのでちょっと待つ
 | 
										// redisでの配信経由で更新されるのでちょっと待つ
 | 
				
			||||||
					await sleep(500);
 | 
										await setTimeout(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
										const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
				
			||||||
					expect(fetchedWebhooks).toEqual([webhook2]);
 | 
										expect(fetchedWebhooks).toEqual([webhook2]);
 | 
				
			||||||
| 
						 | 
					@ -481,7 +482,7 @@ describe('SystemWebhookService', () => {
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// redisでの配信経由で更新されるのでちょっと待つ
 | 
										// redisでの配信経由で更新されるのでちょっと待つ
 | 
				
			||||||
					await sleep(500);
 | 
										await setTimeout(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
										const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
				
			||||||
					expect(fetchedWebhooks.length).toEqual(0);
 | 
										expect(fetchedWebhooks.length).toEqual(0);
 | 
				
			||||||
| 
						 | 
					@ -504,7 +505,7 @@ describe('SystemWebhookService', () => {
 | 
				
			||||||
					);
 | 
										);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// redisでの配信経由で更新されるのでちょっと待つ
 | 
										// redisでの配信経由で更新されるのでちょっと待つ
 | 
				
			||||||
					await sleep(500);
 | 
										await setTimeout(500);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
										const fetchedWebhooks = await service.fetchActiveSystemWebhooks();
 | 
				
			||||||
					expect(fetchedWebhooks.length).toEqual(0);
 | 
										expect(fetchedWebhooks.length).toEqual(0);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -605,14 +605,6 @@ export async function initTestDb(justBorrow = false, initEntities?: any[]) {
 | 
				
			||||||
	return db;
 | 
						return db;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function sleep(msec: number) {
 | 
					 | 
				
			||||||
	return new Promise<void>(res => {
 | 
					 | 
				
			||||||
		setTimeout(() => {
 | 
					 | 
				
			||||||
			res();
 | 
					 | 
				
			||||||
		}, msec);
 | 
					 | 
				
			||||||
	});
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export async function sendEnvUpdateRequest(params: { key: string, value?: string }) {
 | 
					export async function sendEnvUpdateRequest(params: { key: string, value?: string }) {
 | 
				
			||||||
	const res = await fetch(
 | 
						const res = await fetch(
 | 
				
			||||||
		`http://localhost:${port + 1000}/env`,
 | 
							`http://localhost:${port + 1000}/env`,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue