Ticket jde uzavrit, komentare jsou videt, zakaznik bez soudu, Dashboard misto Portalu

Karta Resitel ma tlacitko Uzavrit ticket a Znovu otevrit; meni jen priznak
closed, text stavu zustava a meni se v poli Stav nezavisle.

Komentar je vlastni druh radku logu (kind comment) s autorem; detail ma
sekci Komentare se seznamem (jmeno, cas, text) a formularem, log ho ukazuje
s autorem. Test tests/data/comments.test.ts.

Sekce Zakaznik jen popisuje: pryc odznak "nedohledan", varovne zbarveni,
text o CRM a garantovi i zvyrazneni v tabulce a na karte; ID v CRM jen
kdyz existuje.

Uzivatelske texty: Portal a Prehled -> Dashboard (zalozka Prehled v Lidech
je Souhrn), v auditu "odepreni" -> "zamitnute pokusy".

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
JiriUhlir
2026-09-10 07:56:55 +02:00
co-authored by Claude Fable 5.1
parent 5d41600578
commit 0ae9dab1d4
29 changed files with 296 additions and 136 deletions
+39
View File
@@ -0,0 +1,39 @@
import { beforeAll, describe, expect, test } from 'vitest';
import { bootstrapData } from '../../src/data/bootstrap.js';
import { addComment, createTicket, getTicket } from '../../src/data/ticketStore.js';
const TENANT = 'tnt_automia';
describe('komentar k ticketu', () => {
beforeAll(async () => {
await bootstrapData({ databaseReady: false });
});
test('je vlastni radek logu s autorem, ne poznamka "autor: text"', () => {
const ticket = createTicket({
tenantId: TENANT,
subject: 'Komentare',
channel: 'portal',
priority: 'normal',
});
addComment(ticket.id, 'Karel Vomacka', 'Zavolal jsem klientovi.', [TENANT]);
const detail = getTicket(ticket.id, [TENANT]);
const comment = detail?.trace.find((entry) => entry.kind === 'comment');
expect(comment).toBeDefined();
expect(comment?.author).toBe('Karel Vomacka');
expect(comment?.label).toBe('Zavolal jsem klientovi.');
});
test('cizi firma komentar nezapise', () => {
const ticket = createTicket({
tenantId: TENANT,
subject: 'Cizi',
channel: 'portal',
priority: 'normal',
});
expect(addComment(ticket.id, 'Nekdo', 'Ahoj', ['tnt_nordis'])).toBeUndefined();
expect(getTicket(ticket.id, [TENANT])?.trace.some((e) => e.kind === 'comment')).toBe(false);
});
});