# TESTING.md — Claude Web Chat ## Login - [ ] Otvaranje / → redirect na /login - [ ] Login sa ispravnim kredencijalima → redirect na /projects - [ ] Login sa pogrešnim kredencijalima → error poruka - [ ] Već ulogovan → /login redirect na /projects - [ ] Logout → sesija obrisana, redirect na /login - [ ] Pristup /projects bez logina → redirect na /login ## Projekti - [ ] Lista projekata se prikazuje posle logina - [ ] Projekat sa README.md prikazuje opis - [ ] Projekat bez README.md prikazuje "Bez opisa" - [ ] Klik na projekat → otvara chat ## Kreiranje projekta - [ ] Klik na "Novi projekat" → pojavi se modal sa formom - [ ] Unos validnog imena → projekat kreiran, vidljiv u listi - [ ] Unos duplog imena → error poruka "već postoji" - [ ] Unos praznog imena → browser validacija (required) - [ ] Unos specijalnih karaktera → error poruka - [ ] Klik van modala → modal se zatvara - [ ] Klik na "Otkaži" → modal se zatvara ## Chat - [ ] Chat stranica se otvori sa WebSocket konekcijom - [ ] Pošalji poruku → prikazuje se user poruka - [ ] Claude odgovara → streaming tekst u realnom vremenu - [ ] Tool use → prikazuje se kao posebna poruka - [ ] Typing indicator → prikazuje se dok Claude radi - [ ] Enter → šalje poruku, Shift+Enter → novi red - [ ] Input se čisti posle slanja ## Promena lozinke - [ ] Pristup /change-password bez logina → redirect na /login - [ ] Prikaz forme sa 3 polja (trenutna, nova, potvrda) - [ ] Pogrešna trenutna lozinka → error poruka - [ ] Nova lozinka kraća od 6 karaktera → error poruka - [ ] Nova lozinka i potvrda se ne poklapaju → error poruka - [ ] Uspešna promena → success poruka - [ ] Login sa novom lozinkom → uspešan - [ ] Login sa starom lozinkom → neuspešan - [ ] Link "Promeni lozinku" vidljiv na /projects stranici - [ ] Link "Nazad na projekte" vraća na /projects ## Tabovi (više konzola) - [ ] Otvaranje /chat/arv → jedan tab "arv" prikazan - [ ] Klik na + → dropdown sa listom projekata - [ ] Izbor projekta iz dropdown-a → novi tab otvoren - [ ] Izbor istog projekta → novi tab sa zasebnom sesijom - [ ] Klik na tab → prebacivanje terminala, fokus - [ ] Klik na × → tab zatvoren, WS prekinut - [ ] Poslednji tab se ne može zatvoriti (nema × dugme) - [ ] Refresh stranice → prvi tab se ponovo konektuje sa replay-om - [ ] Svaki tab ima nezavisan terminal (kucanje u jednom ne utiče na drugi) - [ ] Promena teme → primenjuje se na sve tabove ## Sesija persistence - [ ] Zatvori tab → otvori ponovo → sesija živa, poruke replayed - [ ] Idle sesija se čisti posle 30 minuta ## File browser - [ ] Sidebar prikazuje .md fajlove - [ ] Klik na fajl → otvara viewer sa rendered markdown-om - [ ] Escape zatvara viewer - [ ] Path traversal pokušaj → blokiran ## Unit testovi - [ ] `go test ./... -v -count=1` — svi prolaze