This commit is contained in:
@@ -205,6 +205,18 @@ it('preserves original evidence context, linked restrictions, and staff history
|
||||
expect(document.body.textContent).toContain('Read-only moderation access');
|
||||
expect(document.body.textContent).toContain('Round 9');
|
||||
expect(document.body.textContent).toContain('Original log time · 12:34');
|
||||
const evidence = document.querySelector('[aria-labelledby="evidence-title"]')!;
|
||||
expect(
|
||||
evidence.querySelector('[aria-label="Preserved conversation excerpt"]')?.textContent
|
||||
).toContain('abusive message');
|
||||
const technical = [...evidence.querySelectorAll('details')].find(
|
||||
(node) => node.querySelector('summary')?.textContent === 'Technical details'
|
||||
)!;
|
||||
expect(technical.open).toBe(false);
|
||||
expect(technical.textContent).toContain('Archived chat · theater · match 17');
|
||||
expect(JSON.parse(technical.querySelector('pre')!.textContent!)).toEqual(
|
||||
JSON.parse(detail().case.evidence[0].snapshot!)
|
||||
);
|
||||
expect(document.body.textContent).toContain('Check the earlier warning.');
|
||||
expect(document.body.textContent).toContain('Prior warning ignored');
|
||||
expect(document.body.textContent).toContain('Policy pending');
|
||||
@@ -223,6 +235,58 @@ it('preserves original evidence context, linked restrictions, and staff history
|
||||
expect(document.querySelector('dialog')).toBeNull();
|
||||
});
|
||||
|
||||
it('summarizes a preserved conversation across midnight and keeps identifiers on demand', () => {
|
||||
const initial = detail();
|
||||
const archive = JSON.parse(initial.case.evidence[0].snapshot!);
|
||||
archive.entries = [
|
||||
{
|
||||
...archive.entry,
|
||||
messageId: 'subject-message',
|
||||
context: { realTime: '2026-10-16T03:59:00Z', round: 4 },
|
||||
message: { ...archive.entry.message, message: '<b>First message</b>', channel: 'team' }
|
||||
},
|
||||
{
|
||||
...archive.entry,
|
||||
messageId: 'witness-message',
|
||||
context: { realTime: '2026-10-16T04:01:00Z', round: 9 },
|
||||
message: { ...archive.entry.message, guid: '42', player: 'Witness', message: 'Reply' }
|
||||
},
|
||||
{
|
||||
...archive.entry,
|
||||
messageId: 'unknown-time',
|
||||
context: { realTime: null, round: null }
|
||||
}
|
||||
];
|
||||
archive.selectedMessageIds = ['subject-message', 'witness-message'];
|
||||
archive.highlightedMessageIds = ['subject-message'];
|
||||
initial.case.evidence[0].snapshot = JSON.stringify(archive);
|
||||
show(initial);
|
||||
const evidence = document.querySelector('[aria-labelledby="evidence-title"]')!;
|
||||
const excerpt = evidence.querySelector('[aria-label="Preserved conversation excerpt"]')!;
|
||||
const rows = excerpt.querySelectorAll('li');
|
||||
expect(rows).toHaveLength(3);
|
||||
expect(rows[0].classList.contains('highlighted')).toBe(true);
|
||||
expect(rows[1].classList.contains('highlighted')).toBe(false);
|
||||
expect(rows[0].textContent).toContain('Team chat');
|
||||
expect(rows[0].textContent).toContain('<b>First message</b>');
|
||||
expect(rows[0].querySelector('b')).toBeNull();
|
||||
expect(rows[1].textContent).toContain('Selected context');
|
||||
expect(rows[2].textContent).toContain('Unknown time');
|
||||
expect(excerpt.textContent).not.toContain(guid);
|
||||
expect(excerpt.textContent).not.toContain('subject-message');
|
||||
expect(excerpt.textContent).not.toContain('Round');
|
||||
const context = excerpt.previousElementSibling!.textContent!;
|
||||
expect(context).toContain('Kino Der Toten · Match #17');
|
||||
expect(context).toContain('Oct 15, 2026 – Oct 16, 2026');
|
||||
expect(context).toContain('Rounds 4–9 (some unknown)');
|
||||
expect(context).toContain('Times are estimates.');
|
||||
const details = excerpt.nextElementSibling as HTMLDetailsElement;
|
||||
expect(details.open).toBe(false);
|
||||
expect(details.textContent).toContain(`GUID ${guid}`);
|
||||
expect(details.textContent).toContain('Message identifier subject-message');
|
||||
expect(details.textContent).toContain('Message identifier witness-message');
|
||||
});
|
||||
|
||||
it('locks case restrictions to the recorded identity and revision without closing the case', async () => {
|
||||
const updated = detail();
|
||||
updated.case.revision = 5;
|
||||
|
||||
Reference in New Issue
Block a user