chore(backend, misskey-js): add type for signup (#11043)
* chore(backend, misskey-js): add type for signup * rerun
This commit is contained in:
parent
a2c0573f84
commit
7bb8c71543
21 changed files with 354 additions and 280 deletions
|
@ -4,14 +4,14 @@ 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,
|
||||
import {
|
||||
signup,
|
||||
post,
|
||||
page,
|
||||
role,
|
||||
startServer,
|
||||
startServer,
|
||||
api,
|
||||
successfulApiCall,
|
||||
successfulApiCall,
|
||||
failedApiCall,
|
||||
uploadFile,
|
||||
} from '../utils.js';
|
||||
|
@ -36,19 +36,19 @@ describe('ユーザー', () => {
|
|||
badgeRoles: any[],
|
||||
};
|
||||
|
||||
type UserDetailedNotMe = UserLite &
|
||||
type UserDetailedNotMe = UserLite &
|
||||
misskey.entities.UserDetailed & {
|
||||
roles: any[],
|
||||
};
|
||||
|
||||
type MeDetailed = UserDetailedNotMe &
|
||||
type MeDetailed = UserDetailedNotMe &
|
||||
misskey.entities.MeDetailed & {
|
||||
achievements: object[],
|
||||
loggedInDays: number,
|
||||
policies: object,
|
||||
};
|
||||
|
||||
type User = MeDetailed & { token: string };
|
||||
|
||||
type User = MeDetailed & { token: string };
|
||||
|
||||
const show = async (id: string, me = root): Promise<MeDetailed | UserDetailedNotMe> => {
|
||||
return successfulApiCall({ endpoint: 'users/show', parameters: { userId: id }, user: me }) as any;
|
||||
|
@ -159,7 +159,7 @@ describe('ユーザー', () => {
|
|||
mutedInstances: user.mutedInstances,
|
||||
mutingNotificationTypes: user.mutingNotificationTypes,
|
||||
emailNotificationTypes: user.emailNotificationTypes,
|
||||
achievements: user.achievements,
|
||||
achievements: user.achievements,
|
||||
loggedInDays: user.loggedInDays,
|
||||
policies: user.policies,
|
||||
...(security ? {
|
||||
|
@ -222,11 +222,11 @@ describe('ユーザー', () => {
|
|||
beforeAll(async () => {
|
||||
root = await signup({ username: 'root' });
|
||||
alice = await signup({ username: 'alice' });
|
||||
aliceNote = await post(alice, { text: 'test' }) as any;
|
||||
aliceNote = await post(alice, { text: 'test' }) as any;
|
||||
alicePage = await page(alice);
|
||||
aliceList = (await api('users/list/create', { name: 'aliceList' }, alice)).body;
|
||||
bob = await signup({ username: 'bob' });
|
||||
bobNote = await post(bob, { text: 'test' }) as any;
|
||||
bobNote = await post(bob, { text: 'test' }) as any;
|
||||
carol = await signup({ username: 'carol' });
|
||||
dave = await signup({ username: 'dave' });
|
||||
ellen = await signup({ username: 'ellen' });
|
||||
|
@ -236,10 +236,10 @@ describe('ユーザー', () => {
|
|||
usersReplying = await [...Array(10)].map((_, i) => i).reduce(async (acc, i) => {
|
||||
const u = await signup({ username: `replying${i}` });
|
||||
for (let j = 0; j < 10 - i; j++) {
|
||||
const p = await post(u, { text: `test${j}` });
|
||||
const p = await post(u, { text: `test${j}` });
|
||||
await post(alice, { text: `@${u.username} test${j}`, replyId: p.id });
|
||||
}
|
||||
|
||||
|
||||
return (await acc).concat(u);
|
||||
}, Promise.resolve([] as User[]));
|
||||
|
||||
|
@ -376,7 +376,7 @@ describe('ユーザー', () => {
|
|||
assert.strictEqual(response.securityKeys, false);
|
||||
assert.deepStrictEqual(response.roles, []);
|
||||
assert.strictEqual(response.memo, null);
|
||||
|
||||
|
||||
// MeDetailedOnly
|
||||
assert.strictEqual(response.avatarId, null);
|
||||
assert.strictEqual(response.bannerId, null);
|
||||
|
@ -406,7 +406,7 @@ describe('ユーザー', () => {
|
|||
assert.deepStrictEqual(response.emailNotificationTypes, ['follow', 'receiveFollowRequest']);
|
||||
assert.deepStrictEqual(response.achievements, []);
|
||||
assert.deepStrictEqual(response.loggedInDays, 0);
|
||||
assert.deepStrictEqual(response.policies, DEFAULT_POLICIES);
|
||||
assert.deepStrictEqual(response.policies, DEFAULT_POLICIES);
|
||||
assert.notStrictEqual(response.email, undefined);
|
||||
assert.strictEqual(response.emailVerified, false);
|
||||
assert.deepStrictEqual(response.securityKeysList, []);
|
||||
|
@ -499,8 +499,8 @@ describe('ユーザー', () => {
|
|||
const response = await successfulApiCall({ endpoint: 'i/update', parameters: parameters, user: alice });
|
||||
assert.match(response.avatarUrl ?? '.', /^[-a-zA-Z0-9@:%._\+~#&?=\/]+$/);
|
||||
assert.match(response.avatarBlurhash ?? '.', /[ -~]{54}/);
|
||||
const expected = {
|
||||
...meDetailed(alice, true),
|
||||
const expected = {
|
||||
...meDetailed(alice, true),
|
||||
avatarId: aliceFile.id,
|
||||
avatarBlurhash: response.avatarBlurhash,
|
||||
avatarUrl: response.avatarUrl,
|
||||
|
@ -509,8 +509,8 @@ describe('ユーザー', () => {
|
|||
|
||||
const parameters2 = { avatarId: null };
|
||||
const response2 = await successfulApiCall({ endpoint: 'i/update', parameters: parameters2, user: alice });
|
||||
const expected2 = {
|
||||
...meDetailed(alice, true),
|
||||
const expected2 = {
|
||||
...meDetailed(alice, true),
|
||||
avatarId: null,
|
||||
avatarBlurhash: null,
|
||||
avatarUrl: alice.avatarUrl, // 解除した場合、identiconになる
|
||||
|
@ -524,8 +524,8 @@ describe('ユーザー', () => {
|
|||
const response = await successfulApiCall({ endpoint: 'i/update', parameters: parameters, user: alice });
|
||||
assert.match(response.bannerUrl ?? '.', /^[-a-zA-Z0-9@:%._\+~#&?=\/]+$/);
|
||||
assert.match(response.bannerBlurhash ?? '.', /[ -~]{54}/);
|
||||
const expected = {
|
||||
...meDetailed(alice, true),
|
||||
const expected = {
|
||||
...meDetailed(alice, true),
|
||||
bannerId: aliceFile.id,
|
||||
bannerBlurhash: response.bannerBlurhash,
|
||||
bannerUrl: response.bannerUrl,
|
||||
|
@ -534,8 +534,8 @@ describe('ユーザー', () => {
|
|||
|
||||
const parameters2 = { bannerId: null };
|
||||
const response2 = await successfulApiCall({ endpoint: 'i/update', parameters: parameters2, user: alice });
|
||||
const expected2 = {
|
||||
...meDetailed(alice, true),
|
||||
const expected2 = {
|
||||
...meDetailed(alice, true),
|
||||
bannerId: null,
|
||||
bannerBlurhash: null,
|
||||
bannerUrl: null,
|
||||
|
@ -551,7 +551,7 @@ describe('ユーザー', () => {
|
|||
const response = await successfulApiCall({ endpoint: 'i/pin', parameters, user: alice });
|
||||
const expected = { ...meDetailed(alice, false), pinnedNoteIds: [aliceNote.id], pinnedNotes: [aliceNote] };
|
||||
assert.deepStrictEqual(response, expected);
|
||||
|
||||
|
||||
const response2 = await successfulApiCall({ endpoint: 'i/unpin', parameters, user: alice });
|
||||
const expected2 = meDetailed(alice, false);
|
||||
assert.deepStrictEqual(response2, expected2);
|
||||
|
@ -612,7 +612,7 @@ describe('ユーザー', () => {
|
|||
});
|
||||
test.todo('をリスト形式で取得することができる(リモート, hostname指定)');
|
||||
test.todo('をリスト形式で取得することができる(pagenation)');
|
||||
|
||||
|
||||
//#endregion
|
||||
//#region ユーザー情報(users/show)
|
||||
|
||||
|
@ -684,9 +684,9 @@ describe('ユーザー', () => {
|
|||
const parameters = { userIds: [bob.id, alice.id, carol.id] };
|
||||
const response = await successfulApiCall({ endpoint: 'users/show', parameters, user: alice });
|
||||
const expected = [
|
||||
await successfulApiCall({ endpoint: 'users/show', parameters: { userId: bob.id }, user: alice }),
|
||||
await successfulApiCall({ endpoint: 'users/show', parameters: { userId: alice.id }, user: alice }),
|
||||
await successfulApiCall({ endpoint: 'users/show', parameters: { userId: carol.id }, user: alice }),
|
||||
await successfulApiCall({ endpoint: 'users/show', parameters: { userId: bob.id }, user: alice }),
|
||||
await successfulApiCall({ endpoint: 'users/show', parameters: { userId: alice.id }, user: alice }),
|
||||
await successfulApiCall({ endpoint: 'users/show', parameters: { userId: carol.id }, user: alice }),
|
||||
];
|
||||
assert.deepStrictEqual(response, expected);
|
||||
});
|
||||
|
@ -701,7 +701,7 @@ describe('ユーザー', () => {
|
|||
// BUG サスペンドユーザーを一般ユーザーから見るとrootユーザーが返ってくる
|
||||
//{ label: 'サスペンドユーザーが(一般ユーザーが見るときは)含まれない', user: (): User => userSuspended, me: (): User => bob, excluded: true },
|
||||
{ label: '削除済ユーザーが含まれる', user: (): User => userDeletedBySelf },
|
||||
{ label: '削除済(byAdmin)ユーザーが含まれる', user: (): User => userDeletedByAdmin },
|
||||
{ label: '削除済(byAdmin)ユーザーが含まれる', user: (): User => userDeletedByAdmin },
|
||||
] as const)('をID指定のリスト形式で取得することができ、結果に$label', async ({ user, me, excluded }) => {
|
||||
const parameters = { userIds: [user().id] };
|
||||
const response = await successfulApiCall({ endpoint: 'users/show', parameters, user: me?.() ?? alice });
|
||||
|
@ -734,7 +734,7 @@ describe('ユーザー', () => {
|
|||
{ label: 'サイレンスユーザーが含まれる', user: (): User => userSilenced },
|
||||
{ label: 'サスペンドユーザーが含まれない', user: (): User => userSuspended, excluded: true },
|
||||
{ label: '削除済ユーザーが含まれる', user: (): User => userDeletedBySelf },
|
||||
{ label: '削除済(byAdmin)ユーザーが含まれる', user: (): User => userDeletedByAdmin },
|
||||
{ label: '削除済(byAdmin)ユーザーが含まれる', user: (): User => userDeletedByAdmin },
|
||||
] as const)('を検索することができ、結果に$labelが含まれる', async ({ user, excluded }) => {
|
||||
const parameters = { query: user().username, limit: 1 };
|
||||
const response = await successfulApiCall({ endpoint: 'users/search', parameters, user: alice });
|
||||
|
@ -747,7 +747,7 @@ describe('ユーザー', () => {
|
|||
//#endregion
|
||||
//#region ID指定検索(users/search-by-username-and-host)
|
||||
|
||||
test.each([
|
||||
test.each([
|
||||
{ label: '自分', parameters: { username: 'alice' }, user: (): User[] => [alice] },
|
||||
{ label: '自分かつusernameが大文字', parameters: { username: 'ALICE' }, user: (): User[] => [alice] },
|
||||
{ label: 'ローカルのフォロイーでノートなし', parameters: { username: 'userFollowedByAlice' }, user: (): User[] => [userFollowedByAlice] },
|
||||
|
@ -786,7 +786,7 @@ describe('ユーザー', () => {
|
|||
test('がよくリプライをするユーザーのリストを取得できる', async () => {
|
||||
const parameters = { userId: alice.id, limit: 5 };
|
||||
const response = await successfulApiCall({ endpoint: 'users/get-frequently-replied-users', parameters, user: alice });
|
||||
const expected = await Promise.all(usersReplying.slice(0, parameters.limit).map(async (s, i) => ({
|
||||
const expected = await Promise.all(usersReplying.slice(0, parameters.limit).map(async (s, i) => ({
|
||||
user: await show(s.id, alice),
|
||||
weight: (usersReplying.length - i) / usersReplying.length,
|
||||
})));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue