mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-23 00:33:50 +02:00
use oxfmt instead of prettier
This commit is contained in:
@@ -10,7 +10,7 @@ vi.mock('vue-i18n', () => ({
|
||||
locale: require('vue').ref('en')
|
||||
}),
|
||||
createI18n: () => ({
|
||||
global: { t: (key) => key , locale: require('vue').ref('en') },
|
||||
global: { t: (key) => key, locale: require('vue').ref('en') },
|
||||
install: vi.fn()
|
||||
})
|
||||
}));
|
||||
|
||||
@@ -3,12 +3,11 @@ import { mount } from '@vue/test-utils';
|
||||
|
||||
vi.mock('vue-i18n', () => ({
|
||||
useI18n: () => ({
|
||||
t: (key) => key
|
||||
,
|
||||
locale: require('vue').ref('en')
|
||||
}),
|
||||
t: (key) => key,
|
||||
locale: require('vue').ref('en')
|
||||
}),
|
||||
createI18n: () => ({
|
||||
global: { t: (key) => key , locale: require('vue').ref('en') },
|
||||
global: { t: (key) => key, locale: require('vue').ref('en') },
|
||||
install: vi.fn()
|
||||
})
|
||||
}));
|
||||
@@ -53,7 +52,8 @@ function mountComponent(props = {}) {
|
||||
Trash2: { template: '<svg class="trash-icon" />' },
|
||||
X: { template: '<svg class="x-icon" />' },
|
||||
TooltipWrapper: {
|
||||
template: '<div class="tooltip-stub"><slot /><slot name="content" /></div>'
|
||||
template:
|
||||
'<div class="tooltip-stub"><slot /><slot name="content" /></div>'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -68,24 +68,32 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
describe('rendering', () => {
|
||||
test('renders user ID input field', () => {
|
||||
const wrapper = mountComponent();
|
||||
expect(wrapper.text()).toContain('dialog.group_member_moderation.user_id');
|
||||
expect(wrapper.text()).toContain(
|
||||
'dialog.group_member_moderation.user_id'
|
||||
);
|
||||
});
|
||||
|
||||
test('renders selected users section', () => {
|
||||
const wrapper = mountComponent();
|
||||
expect(wrapper.text()).toContain('dialog.group_member_moderation.selected_users');
|
||||
expect(wrapper.text()).toContain(
|
||||
'dialog.group_member_moderation.selected_users'
|
||||
);
|
||||
});
|
||||
|
||||
test('renders roles dropdown with available roles', () => {
|
||||
const wrapper = mountComponent();
|
||||
expect(wrapper.text()).toContain('dialog.group_member_moderation.selected_roles');
|
||||
expect(wrapper.text()).toContain(
|
||||
'dialog.group_member_moderation.selected_roles'
|
||||
);
|
||||
});
|
||||
|
||||
test('renders action buttons', () => {
|
||||
const wrapper = mountComponent();
|
||||
const text = wrapper.text();
|
||||
expect(text).toContain('dialog.group_member_moderation.add_roles');
|
||||
expect(text).toContain('dialog.group_member_moderation.remove_roles');
|
||||
expect(text).toContain(
|
||||
'dialog.group_member_moderation.remove_roles'
|
||||
);
|
||||
expect(text).toContain('dialog.group_member_moderation.save_note');
|
||||
expect(text).toContain('dialog.group_member_moderation.kick');
|
||||
expect(text).toContain('dialog.group_member_moderation.ban');
|
||||
@@ -95,8 +103,18 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
test('renders selected user badges', () => {
|
||||
const wrapper = mountComponent({
|
||||
selectedUsersArray: [
|
||||
{ id: 'usr_1', userId: 'usr_1', membershipStatus: 'member', user: { displayName: 'Alice' } },
|
||||
{ id: 'usr_2', userId: 'usr_2', membershipStatus: 'member', user: { displayName: 'Bob' } }
|
||||
{
|
||||
id: 'usr_1',
|
||||
userId: 'usr_1',
|
||||
membershipStatus: 'member',
|
||||
user: { displayName: 'Alice' }
|
||||
},
|
||||
{
|
||||
id: 'usr_2',
|
||||
userId: 'usr_2',
|
||||
membershipStatus: 'member',
|
||||
user: { displayName: 'Bob' }
|
||||
}
|
||||
]
|
||||
});
|
||||
expect(wrapper.text()).toContain('Alice');
|
||||
@@ -106,54 +124,88 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
test('shows warning tooltip for non-member users', () => {
|
||||
const wrapper = mountComponent({
|
||||
selectedUsersArray: [
|
||||
{ id: 'usr_1', userId: 'usr_1', membershipStatus: 'banned', user: { displayName: 'Charlie' } }
|
||||
{
|
||||
id: 'usr_1',
|
||||
userId: 'usr_1',
|
||||
membershipStatus: 'banned',
|
||||
user: { displayName: 'Charlie' }
|
||||
}
|
||||
]
|
||||
});
|
||||
expect(wrapper.text()).toContain('dialog.group_member_moderation.user_isnt_in_group');
|
||||
expect(wrapper.text()).toContain(
|
||||
'dialog.group_member_moderation.user_isnt_in_group'
|
||||
);
|
||||
});
|
||||
|
||||
test('does not show warning for member users', () => {
|
||||
const wrapper = mountComponent({
|
||||
selectedUsersArray: [
|
||||
{ id: 'usr_1', userId: 'usr_1', membershipStatus: 'member', user: { displayName: 'Alice' } }
|
||||
{
|
||||
id: 'usr_1',
|
||||
userId: 'usr_1',
|
||||
membershipStatus: 'member',
|
||||
user: { displayName: 'Alice' }
|
||||
}
|
||||
]
|
||||
});
|
||||
expect(wrapper.text()).not.toContain('dialog.group_member_moderation.user_isnt_in_group');
|
||||
expect(wrapper.text()).not.toContain(
|
||||
'dialog.group_member_moderation.user_isnt_in_group'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('progress indicator', () => {
|
||||
test('shows progress when progressCurrent > 0', () => {
|
||||
const wrapper = mountComponent({ progressCurrent: 3, progressTotal: 10 });
|
||||
expect(wrapper.text()).toContain('dialog.group_member_moderation.progress');
|
||||
const wrapper = mountComponent({
|
||||
progressCurrent: 3,
|
||||
progressTotal: 10
|
||||
});
|
||||
expect(wrapper.text()).toContain(
|
||||
'dialog.group_member_moderation.progress'
|
||||
);
|
||||
expect(wrapper.text()).toContain('3/10');
|
||||
});
|
||||
|
||||
test('shows cancel button during progress', () => {
|
||||
const wrapper = mountComponent({ progressCurrent: 3, progressTotal: 10 });
|
||||
expect(wrapper.text()).toContain('dialog.group_member_moderation.cancel');
|
||||
const wrapper = mountComponent({
|
||||
progressCurrent: 3,
|
||||
progressTotal: 10
|
||||
});
|
||||
expect(wrapper.text()).toContain(
|
||||
'dialog.group_member_moderation.cancel'
|
||||
);
|
||||
});
|
||||
|
||||
test('hides progress when not in progress', () => {
|
||||
const wrapper = mountComponent({ progressCurrent: 0 });
|
||||
expect(wrapper.text()).not.toContain('dialog.group_member_moderation.progress');
|
||||
expect(wrapper.text()).not.toContain(
|
||||
'dialog.group_member_moderation.progress'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('button disabled states', () => {
|
||||
test('add/remove roles disabled when no roles selected', () => {
|
||||
const wrapper = mountComponent({ selectedRoles: [] });
|
||||
const addBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.add_roles')
|
||||
);
|
||||
const addBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b
|
||||
.text()
|
||||
.includes('dialog.group_member_moderation.add_roles')
|
||||
);
|
||||
expect(addBtn.attributes('disabled')).toBeDefined();
|
||||
});
|
||||
|
||||
test('add/remove roles enabled when roles are selected', () => {
|
||||
const wrapper = mountComponent({ selectedRoles: ['role_1'] });
|
||||
const addBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.add_roles')
|
||||
);
|
||||
const addBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b
|
||||
.text()
|
||||
.includes('dialog.group_member_moderation.add_roles')
|
||||
);
|
||||
expect(addBtn.attributes('disabled')).toBeUndefined();
|
||||
});
|
||||
|
||||
@@ -163,25 +215,35 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
progressCurrent: 5,
|
||||
progressTotal: 10
|
||||
});
|
||||
const kickBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.kick')
|
||||
);
|
||||
const kickBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.kick')
|
||||
);
|
||||
expect(kickBtn.attributes('disabled')).toBeDefined();
|
||||
});
|
||||
|
||||
test('select user button disabled when no user ID entered', () => {
|
||||
const wrapper = mountComponent({ selectUserId: '' });
|
||||
const selectBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.select_user')
|
||||
);
|
||||
const selectBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b
|
||||
.text()
|
||||
.includes('dialog.group_member_moderation.select_user')
|
||||
);
|
||||
expect(selectBtn.attributes('disabled')).toBeDefined();
|
||||
});
|
||||
|
||||
test('select user button enabled when user ID is entered', () => {
|
||||
const wrapper = mountComponent({ selectUserId: 'usr_test' });
|
||||
const selectBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.select_user')
|
||||
);
|
||||
const selectBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b
|
||||
.text()
|
||||
.includes('dialog.group_member_moderation.select_user')
|
||||
);
|
||||
expect(selectBtn.attributes('disabled')).toBeUndefined();
|
||||
});
|
||||
});
|
||||
@@ -194,9 +256,11 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
_mockPermissions: ['group-bans-manage']
|
||||
}
|
||||
});
|
||||
const kickBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.kick')
|
||||
);
|
||||
const kickBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.kick')
|
||||
);
|
||||
expect(kickBtn.attributes('disabled')).toBeDefined();
|
||||
});
|
||||
|
||||
@@ -207,12 +271,16 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
_mockPermissions: ['group-members-remove']
|
||||
}
|
||||
});
|
||||
const banBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.ban')
|
||||
);
|
||||
const unbanBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.unban')
|
||||
);
|
||||
const banBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.ban')
|
||||
);
|
||||
const unbanBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.unban')
|
||||
);
|
||||
expect(banBtn.attributes('disabled')).toBeDefined();
|
||||
expect(unbanBtn.attributes('disabled')).toBeDefined();
|
||||
});
|
||||
@@ -221,9 +289,13 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
describe('events', () => {
|
||||
test('emits select-user on select button click', async () => {
|
||||
const wrapper = mountComponent({ selectUserId: 'usr_test' });
|
||||
const selectBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.select_user')
|
||||
);
|
||||
const selectBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b
|
||||
.text()
|
||||
.includes('dialog.group_member_moderation.select_user')
|
||||
);
|
||||
await selectBtn.trigger('click');
|
||||
expect(wrapper.emitted('select-user')).toBeTruthy();
|
||||
});
|
||||
@@ -241,7 +313,12 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
});
|
||||
|
||||
test('emits delete-user when removing a selected user', async () => {
|
||||
const user = { id: 'usr_1', userId: 'usr_1', membershipStatus: 'member', user: { displayName: 'Alice' } };
|
||||
const user = {
|
||||
id: 'usr_1',
|
||||
userId: 'usr_1',
|
||||
membershipStatus: 'member',
|
||||
user: { displayName: 'Alice' }
|
||||
};
|
||||
const wrapper = mountComponent({ selectedUsersArray: [user] });
|
||||
// The X button is a native <button type="button"> inside each Badge
|
||||
const deleteBtn = wrapper.find('button[type="button"]');
|
||||
@@ -251,18 +328,25 @@ describe('GroupModerationBulkActions.vue', () => {
|
||||
|
||||
test('emits ban on ban button click', async () => {
|
||||
const wrapper = mountComponent();
|
||||
const banBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.ban')
|
||||
);
|
||||
const banBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.ban')
|
||||
);
|
||||
await banBtn.trigger('click');
|
||||
expect(wrapper.emitted('ban')).toBeTruthy();
|
||||
});
|
||||
|
||||
test('emits cancel-progress on cancel click', async () => {
|
||||
const wrapper = mountComponent({ progressCurrent: 3, progressTotal: 10 });
|
||||
const cancelBtn = wrapper.findAll('button').find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.cancel')
|
||||
);
|
||||
const wrapper = mountComponent({
|
||||
progressCurrent: 3,
|
||||
progressTotal: 10
|
||||
});
|
||||
const cancelBtn = wrapper
|
||||
.findAll('button')
|
||||
.find((b) =>
|
||||
b.text().includes('dialog.group_member_moderation.cancel')
|
||||
);
|
||||
await cancelBtn.trigger('click');
|
||||
expect(wrapper.emitted('cancel-progress')).toBeTruthy();
|
||||
});
|
||||
|
||||
@@ -54,7 +54,10 @@ describe('useGroupDialogCommands', () => {
|
||||
it('returns early when dialog is not visible', () => {
|
||||
const groupDialog = createGroupDialog({ visible: false });
|
||||
const deps = createDeps();
|
||||
const { groupDialogCommand } = useGroupDialogCommands(groupDialog, deps);
|
||||
const { groupDialogCommand } = useGroupDialogCommands(
|
||||
groupDialog,
|
||||
deps
|
||||
);
|
||||
|
||||
groupDialogCommand('Refresh');
|
||||
expect(deps.showGroupDialog).not.toHaveBeenCalled();
|
||||
@@ -63,7 +66,10 @@ describe('useGroupDialogCommands', () => {
|
||||
it('Share copies group URL', () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const deps = createDeps();
|
||||
const { groupDialogCommand } = useGroupDialogCommands(groupDialog, deps);
|
||||
const { groupDialogCommand } = useGroupDialogCommands(
|
||||
groupDialog,
|
||||
deps
|
||||
);
|
||||
|
||||
groupDialogCommand('Share');
|
||||
expect(copyToClipboard).toHaveBeenCalledWith(
|
||||
@@ -74,7 +80,10 @@ describe('useGroupDialogCommands', () => {
|
||||
it('Invite To Group dispatches invite callback', () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const deps = createDeps();
|
||||
const { groupDialogCommand } = useGroupDialogCommands(groupDialog, deps);
|
||||
const { groupDialogCommand } = useGroupDialogCommands(
|
||||
groupDialog,
|
||||
deps
|
||||
);
|
||||
|
||||
groupDialogCommand('Invite To Group');
|
||||
expect(deps.showInviteGroupDialog).toHaveBeenCalledWith('grp_123', '');
|
||||
@@ -83,7 +92,10 @@ describe('useGroupDialogCommands', () => {
|
||||
it('Refresh calls showGroupDialog with forceRefresh', () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const deps = createDeps();
|
||||
const { groupDialogCommand } = useGroupDialogCommands(groupDialog, deps);
|
||||
const { groupDialogCommand } = useGroupDialogCommands(
|
||||
groupDialog,
|
||||
deps
|
||||
);
|
||||
|
||||
groupDialogCommand('Refresh');
|
||||
expect(deps.showGroupDialog).toHaveBeenCalledWith('grp_123', {
|
||||
@@ -94,7 +106,10 @@ describe('useGroupDialogCommands', () => {
|
||||
it('Block Group confirms and calls blockGroup', async () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const deps = createDeps();
|
||||
const { groupDialogCommand } = useGroupDialogCommands(groupDialog, deps);
|
||||
const { groupDialogCommand } = useGroupDialogCommands(
|
||||
groupDialog,
|
||||
deps
|
||||
);
|
||||
|
||||
groupDialogCommand('Block Group');
|
||||
await vi.waitFor(() => {
|
||||
@@ -109,7 +124,10 @@ describe('useGroupDialogCommands', () => {
|
||||
it('Unblock Group confirms and calls unblockGroup', async () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const deps = createDeps();
|
||||
const { groupDialogCommand } = useGroupDialogCommands(groupDialog, deps);
|
||||
const { groupDialogCommand } = useGroupDialogCommands(
|
||||
groupDialog,
|
||||
deps
|
||||
);
|
||||
|
||||
groupDialogCommand('Unblock Group');
|
||||
await vi.waitFor(() => {
|
||||
@@ -129,7 +147,10 @@ describe('useGroupDialogCommands', () => {
|
||||
confirm: vi.fn().mockResolvedValue({ ok: false })
|
||||
}
|
||||
});
|
||||
const { groupDialogCommand } = useGroupDialogCommands(groupDialog, deps);
|
||||
const { groupDialogCommand } = useGroupDialogCommands(
|
||||
groupDialog,
|
||||
deps
|
||||
);
|
||||
|
||||
groupDialogCommand('Block Group');
|
||||
await vi.waitFor(() => {
|
||||
|
||||
@@ -233,9 +233,7 @@ describe('useGroupGalleries', () => {
|
||||
.spyOn(console, 'error')
|
||||
.mockImplementation(() => {});
|
||||
|
||||
queryRequest.fetch.mockRejectedValueOnce(
|
||||
new Error('API Error')
|
||||
);
|
||||
queryRequest.fetch.mockRejectedValueOnce(new Error('API Error'));
|
||||
|
||||
await expect(
|
||||
getGroupGallery('grp_1', 'g1')
|
||||
|
||||
@@ -4,12 +4,11 @@ import { describe, expect, test, vi, beforeEach } from 'vitest';
|
||||
vi.mock('vue-sonner', () => ({ toast: { success: vi.fn(), error: vi.fn() } }));
|
||||
vi.mock('vue-i18n', () => ({
|
||||
useI18n: () => ({
|
||||
t: (key) => key
|
||||
,
|
||||
locale: require('vue').ref('en')
|
||||
}),
|
||||
t: (key) => key,
|
||||
locale: require('vue').ref('en')
|
||||
}),
|
||||
createI18n: () => ({
|
||||
global: { t: (key) => key , locale: require('vue').ref('en') },
|
||||
global: { t: (key) => key, locale: require('vue').ref('en') },
|
||||
install: vi.fn()
|
||||
})
|
||||
}));
|
||||
@@ -95,11 +94,19 @@ import { queryRequest } from '../../../../api';
|
||||
function createTables() {
|
||||
return {
|
||||
members: reactive({ data: [], pageSize: 15 }),
|
||||
bans: reactive({ data: [], filters: [{ prop: ['$displayName'], value: '' }], pageSize: 15 }),
|
||||
bans: reactive({
|
||||
data: [],
|
||||
filters: [{ prop: ['$displayName'], value: '' }],
|
||||
pageSize: 15
|
||||
}),
|
||||
invites: reactive({ data: [], pageSize: 15 }),
|
||||
joinRequests: reactive({ data: [], pageSize: 15 }),
|
||||
blocked: reactive({ data: [], pageSize: 15 }),
|
||||
logs: reactive({ data: [], filters: [{ prop: ['description'], value: '' }], pageSize: 15 })
|
||||
logs: reactive({
|
||||
data: [],
|
||||
filters: [{ prop: ['description'], value: '' }],
|
||||
pageSize: 15
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
@@ -167,11 +174,19 @@ describe('useGroupModerationData', () => {
|
||||
userId: `usr_${i}`,
|
||||
user: { displayName: `User${i}` }
|
||||
}));
|
||||
const page2 = [{ userId: 'usr_100', user: { displayName: 'User100' } }];
|
||||
const page2 = [
|
||||
{ userId: 'usr_100', user: { displayName: 'User100' } }
|
||||
];
|
||||
|
||||
deps.groupRequest.getGroupBans
|
||||
.mockResolvedValueOnce({ json: page1, params: { groupId: 'grp_test' } })
|
||||
.mockResolvedValueOnce({ json: page2, params: { groupId: 'grp_test' } });
|
||||
.mockResolvedValueOnce({
|
||||
json: page1,
|
||||
params: { groupId: 'grp_test' }
|
||||
})
|
||||
.mockResolvedValueOnce({
|
||||
json: page2,
|
||||
params: { groupId: 'grp_test' }
|
||||
});
|
||||
|
||||
const { getAllGroupBans } = useGroupModerationData(deps);
|
||||
await getAllGroupBans('grp_test');
|
||||
@@ -198,12 +213,17 @@ describe('useGroupModerationData', () => {
|
||||
test('handles API error gracefully', async () => {
|
||||
const { toast } = await import('vue-sonner');
|
||||
const deps = createDeps();
|
||||
deps.groupRequest.getGroupBans.mockRejectedValue(new Error('Network error'));
|
||||
deps.groupRequest.getGroupBans.mockRejectedValue(
|
||||
new Error('Network error')
|
||||
);
|
||||
|
||||
const { getAllGroupBans, isGroupMembersLoading } = useGroupModerationData(deps);
|
||||
const { getAllGroupBans, isGroupMembersLoading } =
|
||||
useGroupModerationData(deps);
|
||||
await getAllGroupBans('grp_test');
|
||||
|
||||
expect(toast.error).toHaveBeenCalledWith('Failed to get group bans');
|
||||
expect(toast.error).toHaveBeenCalledWith(
|
||||
'Failed to get group bans'
|
||||
);
|
||||
expect(isGroupMembersLoading.value).toBe(false);
|
||||
});
|
||||
|
||||
@@ -213,10 +233,16 @@ describe('useGroupModerationData', () => {
|
||||
userId: `usr_${i}`
|
||||
}));
|
||||
deps.groupRequest.getGroupBans
|
||||
.mockResolvedValueOnce({ json: page1, params: { groupId: 'grp_test' } })
|
||||
.mockResolvedValueOnce({
|
||||
json: page1,
|
||||
params: { groupId: 'grp_test' }
|
||||
})
|
||||
.mockImplementation(() => {
|
||||
deps.groupMemberModeration.value.visible = false;
|
||||
return Promise.resolve({ json: [{ userId: 'usr_extra' }], params: { groupId: 'grp_test' } });
|
||||
return Promise.resolve({
|
||||
json: [{ userId: 'usr_extra' }],
|
||||
params: { groupId: 'grp_test' }
|
||||
});
|
||||
});
|
||||
|
||||
const { getAllGroupBans } = useGroupModerationData(deps);
|
||||
@@ -254,7 +280,10 @@ describe('useGroupModerationData', () => {
|
||||
});
|
||||
|
||||
const { getAllGroupLogs } = useGroupModerationData(deps);
|
||||
await getAllGroupLogs('grp_test', ['group.member.ban', 'group.member.kick']);
|
||||
await getAllGroupLogs('grp_test', [
|
||||
'group.member.ban',
|
||||
'group.member.kick'
|
||||
]);
|
||||
|
||||
expect(deps.groupRequest.getGroupLogs).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
@@ -281,7 +310,8 @@ describe('useGroupModerationData', () => {
|
||||
params: { groupId: 'grp_test' }
|
||||
});
|
||||
|
||||
const { getAllGroupInvitesAndJoinRequests } = useGroupModerationData(deps);
|
||||
const { getAllGroupInvitesAndJoinRequests } =
|
||||
useGroupModerationData(deps);
|
||||
await getAllGroupInvitesAndJoinRequests('grp_test');
|
||||
|
||||
expect(deps.tables.invites.data).toHaveLength(1);
|
||||
@@ -294,7 +324,10 @@ describe('useGroupModerationData', () => {
|
||||
test('parses multiple user IDs from input', async () => {
|
||||
const deps = createDeps();
|
||||
deps.groupRequest.getGroupMember.mockResolvedValue({
|
||||
json: { userId: 'usr_aaaa1111-2222-3333-4444-555566667777', user: { displayName: 'A' } },
|
||||
json: {
|
||||
userId: 'usr_aaaa1111-2222-3333-4444-555566667777',
|
||||
user: { displayName: 'A' }
|
||||
},
|
||||
params: {}
|
||||
});
|
||||
|
||||
@@ -344,7 +377,10 @@ describe('useGroupModerationData', () => {
|
||||
const { addGroupMemberToSelection } = useGroupModerationData(deps);
|
||||
await addGroupMemberToSelection('usr_1');
|
||||
|
||||
expect(deps.selection.setSelectedUsers).toHaveBeenCalledWith('usr_1', member);
|
||||
expect(deps.selection.setSelectedUsers).toHaveBeenCalledWith(
|
||||
'usr_1',
|
||||
member
|
||||
);
|
||||
expect(queryRequest.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -362,11 +398,16 @@ describe('useGroupModerationData', () => {
|
||||
const { addGroupMemberToSelection } = useGroupModerationData(deps);
|
||||
await addGroupMemberToSelection('usr_1');
|
||||
|
||||
expect(queryRequest.fetch).toHaveBeenCalledWith('user.dialog', { userId: 'usr_1' });
|
||||
expect(deps.selection.setSelectedUsers).toHaveBeenCalledWith('usr_1', expect.objectContaining({
|
||||
userId: 'usr_1',
|
||||
displayName: 'Alice'
|
||||
}));
|
||||
expect(queryRequest.fetch).toHaveBeenCalledWith('user.dialog', {
|
||||
userId: 'usr_1'
|
||||
});
|
||||
expect(deps.selection.setSelectedUsers).toHaveBeenCalledWith(
|
||||
'usr_1',
|
||||
expect.objectContaining({
|
||||
userId: 'usr_1',
|
||||
displayName: 'Alice'
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -395,7 +436,8 @@ describe('useGroupModerationData', () => {
|
||||
const deps = createDeps();
|
||||
deps.tables.members.data = [{ userId: 'usr_1' }];
|
||||
|
||||
const { groupMembersSearch, memberSearch, isGroupMembersLoading } = useGroupModerationData(deps);
|
||||
const { groupMembersSearch, memberSearch, isGroupMembersLoading } =
|
||||
useGroupModerationData(deps);
|
||||
memberSearch.value = 'ab';
|
||||
groupMembersSearch();
|
||||
|
||||
@@ -405,9 +447,13 @@ describe('useGroupModerationData', () => {
|
||||
|
||||
test('setGroupMemberSortOrder does nothing when sort is the same', async () => {
|
||||
const deps = createDeps();
|
||||
deps.groupRequest.getGroupMember.mockResolvedValue({ json: null, params: {} });
|
||||
deps.groupRequest.getGroupMember.mockResolvedValue({
|
||||
json: null,
|
||||
params: {}
|
||||
});
|
||||
|
||||
const { setGroupMemberSortOrder, memberSortOrder } = useGroupModerationData(deps);
|
||||
const { setGroupMemberSortOrder, memberSortOrder } =
|
||||
useGroupModerationData(deps);
|
||||
const currentSort = memberSortOrder.value;
|
||||
await setGroupMemberSortOrder(currentSort);
|
||||
|
||||
@@ -418,7 +464,8 @@ describe('useGroupModerationData', () => {
|
||||
test('setGroupMemberFilter does nothing when filter is the same', async () => {
|
||||
const deps = createDeps();
|
||||
|
||||
const { setGroupMemberFilter, memberFilter } = useGroupModerationData(deps);
|
||||
const { setGroupMemberFilter, memberFilter } =
|
||||
useGroupModerationData(deps);
|
||||
const currentFilter = memberFilter.value;
|
||||
await setGroupMemberFilter(currentFilter);
|
||||
|
||||
@@ -429,7 +476,8 @@ describe('useGroupModerationData', () => {
|
||||
describe('loadAllGroupMembers', () => {
|
||||
test('does nothing when already loading', async () => {
|
||||
const deps = createDeps();
|
||||
const { loadAllGroupMembers, isGroupMembersLoading } = useGroupModerationData(deps);
|
||||
const { loadAllGroupMembers, isGroupMembersLoading } =
|
||||
useGroupModerationData(deps);
|
||||
isGroupMembersLoading.value = true;
|
||||
|
||||
await loadAllGroupMembers();
|
||||
|
||||
Reference in New Issue
Block a user