This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import { randomUUID } from 'node:crypto';
|
||||
import { afterEach, beforeEach, expect, it, vi } from 'vitest';
|
||||
import { newFixture, type Fixture } from '../helpers/fixture.js';
|
||||
|
||||
let fixture: Fixture;
|
||||
beforeEach(async () => {
|
||||
vi.resetModules();
|
||||
fixture = await newFixture();
|
||||
const { db } = await import('../../src/lib/server/db/index.js');
|
||||
for (const id of ['first', 'second'])
|
||||
db()
|
||||
.prepare(
|
||||
`INSERT INTO auth_users(id,username,display_name,password_hash,role,created_at,updated_at)
|
||||
VALUES(?,?,?,'unused','moderator',0,0)`
|
||||
)
|
||||
.run(id, id, id);
|
||||
});
|
||||
afterEach(async () => fixture.cleanup());
|
||||
|
||||
it('filters case queues by workflow, priority and ownership while prioritizing active work', async () => {
|
||||
const { mutateModeration } = await import('../../src/lib/server/moderation/actions.js');
|
||||
const { moderationOverview, moderationQuery } =
|
||||
await import('../../src/lib/server/moderation/overview.js');
|
||||
const { db } = await import('../../src/lib/server/db/index.js');
|
||||
const ids: string[] = [];
|
||||
for (const [title, priority, status, owner] of [
|
||||
['Normal report', 'normal', 'open', null],
|
||||
['Urgent review', 'urgent', 'in_review', 'first'],
|
||||
['High escalation', 'high', 'escalated', 'second'],
|
||||
['Closed urgent appeal', 'urgent', 'appeal_upheld', 'first']
|
||||
]) {
|
||||
const { id } = mutateModeration('first', {
|
||||
op: 'create-case',
|
||||
game: 't5',
|
||||
guid: '123',
|
||||
title,
|
||||
idempotencyKey: randomUUID()
|
||||
});
|
||||
ids.push(id);
|
||||
db()
|
||||
.prepare('UPDATE moderation_cases SET priority=?,status=?,assignee_id=? WHERE id=?')
|
||||
.run(priority, status, owner, id);
|
||||
}
|
||||
const read = (extra = '') =>
|
||||
moderationOverview('first', moderationQuery(new URLSearchParams(`view=cases&${extra}`)));
|
||||
expect(read().cases.map((item) => item.id)).toEqual([ids[1], ids[2], ids[0], ids[3]]);
|
||||
expect(read('caseStatus=active').total).toBe(3);
|
||||
expect(read('caseStatus=closed').cases.map((item) => item.id)).toEqual([ids[3]]);
|
||||
expect(read('caseStatus=escalated&priority=high').cases.map((item) => item.id)).toEqual([
|
||||
ids[2]
|
||||
]);
|
||||
expect(read('assignedTo=me').cases.map((item) => item.id)).toEqual([ids[1], ids[3]]);
|
||||
expect(read('assignedTo=unassigned').cases.map((item) => item.id)).toEqual([ids[0]]);
|
||||
expect(read('assignedTo=second').cases[0].assignee).toBe('second');
|
||||
expect(
|
||||
read('caseStatus=active&assignedTo=me&priority=urgent&game=t5&guid=123&q=review&offset=100')
|
||||
.query.offset
|
||||
).toBe(0);
|
||||
expect(read('caseStatus=active&assignedTo=me&priority=urgent&game=t6').total).toBe(0);
|
||||
expect(read('caseStatus=invalid&priority=invalid').total).toBe(4);
|
||||
expect(
|
||||
moderationOverview(
|
||||
'first',
|
||||
moderationQuery(
|
||||
new URLSearchParams('caseStatus=closed&assignedTo=unassigned&priority=urgent')
|
||||
)
|
||||
).total
|
||||
).toBe(1);
|
||||
});
|
||||
Reference in New Issue
Block a user