use oxfmt instead of prettier

This commit is contained in:
pa
2026-03-13 22:30:12 +09:00
parent 82122a4fab
commit 7b7c1b4568
155 changed files with 3467 additions and 1631 deletions

View File

@@ -124,9 +124,7 @@
const data = playerModerationTable.value.data;
const typeFilter = playerModerationTable.value.filters?.[0]?.value ?? [];
const searchFilter = playerModerationTable.value.filters?.[1]?.value ?? '';
const typeSet = Array.isArray(typeFilter)
? new Set(typeFilter.map((value) => String(value).toLowerCase()))
: null;
const typeSet = Array.isArray(typeFilter) ? new Set(typeFilter.map((value) => String(value).toLowerCase())) : null;
const searchValue = String(searchFilter).trim().toLowerCase();
return data.filter((row) => {

View File

@@ -35,17 +35,18 @@ vi.mock('pinia', async (importOriginal) => {
vi.mock('vue-i18n', () => ({
useI18n: () => ({
t: (key) => key
,
locale: require('vue').ref('en')
})
t: (key) => key,
locale: require('vue').ref('en')
})
}));
vi.mock('../../../stores', () => ({
useModerationStore: () => ({
playerModerationTable: mocks.playerModerationTable,
refreshPlayerModerations: (...args) => mocks.refreshPlayerModerations(...args),
handlePlayerModerationDelete: (...args) => mocks.handlePlayerModerationDelete(...args)
refreshPlayerModerations: (...args) =>
mocks.refreshPlayerModerations(...args),
handlePlayerModerationDelete: (...args) =>
mocks.handlePlayerModerationDelete(...args)
}),
useAppearanceSettingsStore: () => ({
tablePageSizes: [10, 25, 50],
@@ -68,12 +69,14 @@ vi.mock('../../../services/config.js', () => ({
vi.mock('../../../api', () => ({
playerModerationRequest: {
deletePlayerModeration: (...args) => mocks.deletePlayerModeration(...args)
deletePlayerModeration: (...args) =>
mocks.deletePlayerModeration(...args)
}
}));
vi.mock('../../../coordinators/moderationCoordinator', () => ({
runRefreshPlayerModerationsFlow: (...args) => mocks.refreshPlayerModerations(...args)
runRefreshPlayerModerationsFlow: (...args) =>
mocks.refreshPlayerModerations(...args)
}));
vi.mock('../../../shared/constants', async (importOriginal) => {
@@ -120,7 +123,8 @@ vi.mock('@/components/ui/select', () => ({
vi.mock('@/components/ui/button', () => ({
Button: {
emits: ['click'],
template: '<button data-testid="moderation-button" @click="$emit(\'click\')"><slot /></button>'
template:
'<button data-testid="moderation-button" @click="$emit(\'click\')"><slot /></button>'
}
}));
@@ -189,15 +193,23 @@ describe('Moderation.vue', () => {
mocks.configGetString.mockResolvedValue('["block"]');
mocks.modalConfirm.mockResolvedValue({ ok: true });
mocks.deletePlayerModeration.mockResolvedValue({ ok: true, id: 'pm_1' });
mocks.deletePlayerModeration.mockResolvedValue({
ok: true,
id: 'pm_1'
});
});
test('loads persisted moderation filter on init', async () => {
mountModeration();
await flushAsync();
expect(mocks.configGetString).toHaveBeenCalledWith('VRCX_playerModerationTableFilters', '[]');
expect(mocks.playerModerationTable.value.filters[0].value).toEqual(['block']);
expect(mocks.configGetString).toHaveBeenCalledWith(
'VRCX_playerModerationTableFilters',
'[]'
);
expect(mocks.playerModerationTable.value.filters[0].value).toEqual([
'block'
]);
});
test('updates moderation filter and persists value', async () => {
@@ -207,7 +219,9 @@ describe('Moderation.vue', () => {
wrapper.vm.handleModerationFilterChange(['mute']);
await nextTick();
expect(mocks.playerModerationTable.value.filters[0].value).toEqual(['mute']);
expect(mocks.playerModerationTable.value.filters[0].value).toEqual([
'mute'
]);
expect(mocks.configSetString).toHaveBeenCalledWith(
'VRCX_playerModerationTableFilters',
JSON.stringify(['mute'])
@@ -216,11 +230,22 @@ describe('Moderation.vue', () => {
test('filters table rows by type and search text', async () => {
mocks.playerModerationTable.value.data = [
{ type: 'block', sourceDisplayName: 'Alpha', targetDisplayName: 'Beta' },
{ type: 'mute', sourceDisplayName: 'Gamma', targetDisplayName: 'Delta' },
{
type: 'block',
sourceDisplayName: 'Alpha',
targetDisplayName: 'Beta'
},
{
type: 'mute',
sourceDisplayName: 'Gamma',
targetDisplayName: 'Delta'
},
{ type: 'mute', sourceDisplayName: 'X', targetDisplayName: 'Alice' }
];
mocks.playerModerationTable.value.filters = [{ value: ['mute'] }, { value: 'ali' }];
mocks.playerModerationTable.value.filters = [
{ value: ['mute'] },
{ value: 'ali' }
];
const wrapper = mountModeration();
await flushAsync();
@@ -246,7 +271,10 @@ describe('Moderation.vue', () => {
moderated: 'usr_1',
type: 'mute'
});
expect(mocks.handlePlayerModerationDelete).toHaveBeenCalledWith({ ok: true, id: 'pm_1' });
expect(mocks.handlePlayerModerationDelete).toHaveBeenCalledWith({
ok: true,
id: 'pm_1'
});
});
test('delete prompt confirms before deletion', async () => {

View File

@@ -89,9 +89,16 @@ describe('views/Moderation/columns.jsx', () => {
});
test('source and target cells open corresponding user dialog', () => {
const cols = createColumns({ onDelete: vi.fn(), onDeletePrompt: vi.fn() });
const sourceCol = cols.find((c) => c.accessorKey === 'sourceDisplayName');
const targetCol = cols.find((c) => c.accessorKey === 'targetDisplayName');
const cols = createColumns({
onDelete: vi.fn(),
onDeletePrompt: vi.fn()
});
const sourceCol = cols.find(
(c) => c.accessorKey === 'sourceDisplayName'
);
const targetCol = cols.find(
(c) => c.accessorKey === 'targetDisplayName'
);
const row = {
original: {
sourceUserId: 'usr_source',
@@ -104,15 +111,24 @@ describe('views/Moderation/columns.jsx', () => {
const sourceCell = sourceCol.cell({ row });
const targetCell = targetCol.cell({ row });
findNode(sourceCell, (n) => n.type === 'span' && typeof n.props?.onClick === 'function').props.onClick();
findNode(targetCell, (n) => n.type === 'span' && typeof n.props?.onClick === 'function').props.onClick();
findNode(
sourceCell,
(n) => n.type === 'span' && typeof n.props?.onClick === 'function'
).props.onClick();
findNode(
targetCell,
(n) => n.type === 'span' && typeof n.props?.onClick === 'function'
).props.onClick();
expect(mocks.showUserDialog).toHaveBeenNthCalledWith(1, 'usr_source');
expect(mocks.showUserDialog).toHaveBeenNthCalledWith(2, 'usr_target');
});
test('action cell hidden when source user is not current user', () => {
const cols = createColumns({ onDelete: vi.fn(), onDeletePrompt: vi.fn() });
const cols = createColumns({
onDelete: vi.fn(),
onDeletePrompt: vi.fn()
});
const actionCol = cols.find((c) => c.id === 'action');
const vnode = actionCol.cell({
row: {