mirror of
				https://codeberg.org/yeentown/barkey.git
				synced 2025-10-29 04:24:14 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			130 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: syuilo and misskey-project
 | |
|  * SPDX-License-Identifier: AGPL-3.0-only
 | |
|  */
 | |
| 
 | |
| import { setTimeout } from 'node:timers/promises';
 | |
| import { entities } from 'misskey-js';
 | |
| import { beforeEach, describe, test } from '@jest/globals';
 | |
| import {
 | |
| 	api,
 | |
| 	captureWebhook,
 | |
| 	randomString,
 | |
| 	role,
 | |
| 	signup,
 | |
| 	startJobQueue,
 | |
| 	UserToken,
 | |
| 	WEBHOOK_HOST,
 | |
| } from '../../utils.js';
 | |
| import type { INestApplicationContext } from '@nestjs/common';
 | |
| 
 | |
| describe('[シナリオ] ユーザ作成', () => {
 | |
| 	let queue: INestApplicationContext;
 | |
| 	let admin: entities.SignupResponse;
 | |
| 
 | |
| 	async function createSystemWebhook(args?: Partial<entities.AdminSystemWebhookCreateRequest>, credential?: UserToken): Promise<entities.AdminSystemWebhookCreateResponse> {
 | |
| 		const res = await api(
 | |
| 			'admin/system-webhook/create',
 | |
| 			{
 | |
| 				isActive: true,
 | |
| 				name: randomString(),
 | |
| 				on: ['userCreated'],
 | |
| 				url: WEBHOOK_HOST,
 | |
| 				secret: randomString(),
 | |
| 				...args,
 | |
| 			},
 | |
| 			credential ?? admin,
 | |
| 		);
 | |
| 		return res.body;
 | |
| 	}
 | |
| 
 | |
| 	// -------------------------------------------------------------------------------------------
 | |
| 
 | |
| 	beforeAll(async () => {
 | |
| 		queue = await startJobQueue();
 | |
| 		admin = await signup({ username: 'admin' });
 | |
| 
 | |
| 		await role(admin, { isAdministrator: true });
 | |
| 	}, 1000 * 60 * 2);
 | |
| 
 | |
| 	afterAll(async () => {
 | |
| 		await queue.close();
 | |
| 	});
 | |
| 
 | |
| 	// -------------------------------------------------------------------------------------------
 | |
| 
 | |
| 	describe('SystemWebhook', () => {
 | |
| 		beforeEach(async () => {
 | |
| 			const webhooks = await api('admin/system-webhook/list', {}, admin);
 | |
| 			for (const webhook of webhooks.body) {
 | |
| 				await api('admin/system-webhook/delete', { id: webhook.id }, admin);
 | |
| 			}
 | |
| 		});
 | |
| 
 | |
| 		test('ユーザが作成された -> userCreatedが送出される', async () => {
 | |
| 			const webhook = await createSystemWebhook({
 | |
| 				on: ['userCreated'],
 | |
| 				isActive: true,
 | |
| 			});
 | |
| 
 | |
| 			let alice: any = null;
 | |
| 			const webhookBody = await captureWebhook(async () => {
 | |
| 				alice = await signup({ username: 'alice' });
 | |
| 			});
 | |
| 
 | |
| 			// webhookの送出後にいろいろやってるのでちょっと待つ必要がある
 | |
| 			await setTimeout(2000);
 | |
| 
 | |
| 			console.log(alice);
 | |
| 			console.log(JSON.stringify(webhookBody, null, 2));
 | |
| 
 | |
| 			expect(webhookBody.hookId).toBe(webhook.id);
 | |
| 			expect(webhookBody.type).toBe('userCreated');
 | |
| 
 | |
| 			const body = webhookBody.body as entities.UserLite;
 | |
| 			expect(alice.id).toBe(body.id);
 | |
| 			expect(alice.name).toBe(body.name);
 | |
| 			expect(alice.username).toBe(body.username);
 | |
| 			expect(alice.host).toBe(body.host);
 | |
| 			expect(alice.avatarUrl).toBe(body.avatarUrl);
 | |
| 			expect(alice.avatarBlurhash).toBe(body.avatarBlurhash);
 | |
| 			expect(alice.avatarDecorations).toEqual(body.avatarDecorations);
 | |
| 			expect(alice.isBot).toBe(body.isBot);
 | |
| 			expect(alice.isCat).toBe(body.isCat);
 | |
| 			expect(alice.instance).toEqual(body.instance);
 | |
| 			expect(alice.emojis).toEqual(body.emojis);
 | |
| 			expect(alice.onlineStatus).toBe(body.onlineStatus);
 | |
| 			expect(alice.badgeRoles).toEqual(body.badgeRoles);
 | |
| 		});
 | |
| 
 | |
| 		test('ユーザ作成 -> userCreatedが未許可の場合は送出されない', async () => {
 | |
| 			await createSystemWebhook({
 | |
| 				on: [],
 | |
| 				isActive: true,
 | |
| 			});
 | |
| 
 | |
| 			let alice: any = null;
 | |
| 			const webhookBody = await captureWebhook(async () => {
 | |
| 				alice = await signup({ username: 'alice' });
 | |
| 			}).catch(e => e.message);
 | |
| 
 | |
| 			expect(webhookBody).toBe('timeout');
 | |
| 			expect(alice.id).not.toBeNull();
 | |
| 		});
 | |
| 
 | |
| 		test('ユーザ作成 -> Webhookが無効の場合は送出されない', async () => {
 | |
| 			await createSystemWebhook({
 | |
| 				on: ['userCreated'],
 | |
| 				isActive: false,
 | |
| 			});
 | |
| 
 | |
| 			let alice: any = null;
 | |
| 			const webhookBody = await captureWebhook(async () => {
 | |
| 				alice = await signup({ username: 'alice' });
 | |
| 			}).catch(e => e.message);
 | |
| 
 | |
| 			expect(webhookBody).toBe('timeout');
 | |
| 			expect(alice.id).not.toBeNull();
 | |
| 		});
 | |
| 	});
 | |
| });
 |