# 🧪 Guia de Testes - Sistema de Notificações

## 📋 Pré-requisitos

- ✅ Tabela `sis000_notificacao` criada
- ✅ APIs atualizadas (`api_notificacoes_nao_lidas.php`, `api_notificacoes_detalhes.php`)
- ✅ Navbar integrado no `inicio.php`
- ✅ Browser com Developer Tools (F12)

---

## 🧪 Teste 1: Inserir Notificação de Teste

### Objetivo
Inserir uma notificação nova no banco com `dtnotificacao = NULL`

### Passos

1. **Abrir pgAdmin ou ferramenta SQL**
2. **Executar SQL:**
   ```sql
   INSERT INTO sis000_notificacao 
   (idusuario, rotina, titulo, descricao, lida, status)
   VALUES 
   (5, 'teste', 'Notificação de Teste', 'Esta é uma notificação de teste com dtnotificacao=NULL', 0, 0);
   
   -- Verificar que foi inserida com dtnotificacao = NULL
   SELECT id, titulo, dtnotificacao FROM sis000_notificacao 
   WHERE idusuario = 5 AND rotina = 'teste';
   ```

3. **Esperado:**
   ```
   id | titulo | dtnotificacao
   ---|--------|---------------
   1  | Notif..| (null)
   ```

---

## 🧪 Teste 2: Verificar Badge Updates

### Objetivo
Verificar se o badge aparece quando há notificações

### Passos

1. **Abrir navegador e ir para o painel**
   - URL: `http://localhost/sagadm/painel.php` (ou qualquer página com navbar)

2. **Abrir Developer Tools (F12)**
   - Tab: Console
   - Ver logs como `🔔 Verificando notificações...`

3. **Observar o sino (bell icon) no navbar**
   - Deve aparecer um **número 1** em vermelho
   - Se não aparecer, verificar error_log

4. **Esperado:**
   ```
   🔔 Verificando notificações...
   📡 Resposta recebida: 200
   📊 Dados da API: {success: true, count: 1}
   🎨 Renderizando 1 notificações
   ```

---

## 🧪 Teste 3: Verificar dtnotificacao é Preenchido

### Objetivo
Verificar se a API está atualizando `dtnotificacao` quando chamada

### Passos

1. **Antes de fazer qualquer coisa, executar SQL:**
   ```sql
   SELECT id, titulo, dtnotificacao FROM sis000_notificacao 
   WHERE idusuario = 5 AND rotina = 'teste';
   ```

2. **Esperado antes:**
   ```
   dtnotificacao = (null)
   ```

3. **Abrir DevTools (F12)** no navegador

4. **Esperar 30 segundos** ou forçar polling recarregando a página

5. **Executar SQL novamente:**
   ```sql
   SELECT id, titulo, dtnotificacao FROM sis000_notificacao 
   WHERE idusuario = 5 AND rotina = 'teste';
   ```

6. **Esperado depois:**
   ```
   dtnotificacao = 2025-12-09 14:30:00 (ou similar)
   ```

7. **Verificar error_log:**
   ```
   Notificações com dtnotificacao atualizado: 1
   ```

---

## 🧪 Teste 4: Toast Aparece Uma Única Vez

### Objetivo
Verificar se o toast aparece apenas na primeira vez que a notificação é consultada

### Passos

1. **Abrir página do painel em uma ABA NOVA**
   - Isso força um novo polling

2. **Observar:**
   - Um **card aparecer no canto superior direito** com a notificação
   - Toast tem **barra de progresso** animada
   - Após **5 segundos**, desaparece com animação

3. **Recarregar a página (F5)**
   - **Nenhum novo toast deve aparecer** (pois dtnotificacao já foi preenchido)
   - Badge continua mostrando `[1]`
   - Notificação ainda está no dropdown

4. **Esperado:**
   - Toast aparece UMA VEZ quando `dtnotificacao = NULL`
   - Não aparece mais depois (porque agora `dtnotificacao = 2025-...`)

---

## 🧪 Teste 5: Dropdown Mostra Notificações

### Objetivo
Verificar se ao clicar no sino, a notificação aparece

### Passos

1. **Clicar no sino** (bell icon) no navbar

2. **Observar dropdown que abre:**
   - Título: "Notificação de Teste"
   - Descrição: "Esta é uma notificação de..."
   - Rotina: "teste"
   - Hora: Sua hora local

3. **Esperado:**
   ```
   ═══════════════════════════════
   Notificações                [1]
   ───────────────────────────────
   Notificação de Teste
   Esta é uma notificação...
   teste    14:30:00
   ═══════════════════════════════
   Ver todas →
   ```

---

## 🧪 Teste 6: Marcar como Lida

### Objetivo
Verificar se clicar na notificação marca como lida

### Passos

1. **Dropdown aberto** (de Teste 5)

2. **Clicar na notificação**

3. **Observar:**
   - Notificação desaparece do dropdown
   - Badge desaparece (não há mais não-lidas)
   - Dropdown mostra "Nenhuma notificação"

4. **Verificar no banco:**
   ```sql
   SELECT id, lida, dtleitura FROM sis000_notificacao 
   WHERE idusuario = 5 AND rotina = 'teste';
   ```

5. **Esperado:**
   ```
   lida = 1
   dtleitura = 2025-12-09 14:32:15 (ou similar)
   ```

---

## 🧪 Teste 7: Múltiplas Notificações

### Objetivo
Verificar comportamento com várias notificações

### Passos

1. **Inserir 3 notificações:**
   ```sql
   INSERT INTO sis000_notificacao 
   (idusuario, rotina, titulo, descricao, lida, status)
   VALUES 
   (5, 'teste', 'Notificação 1', 'Desc 1', 0, 0),
   (5, 'teste', 'Notificação 2', 'Desc 2', 0, 0),
   (5, 'teste', 'Notificação 3', 'Desc 3', 0, 0);
   ```

2. **Esperar 30s ou recarregar página**

3. **Observar:**
   - Badge mostra `[3]`
   - Toast aparece com primeira notificação
   - Dropdown mostra as 3

4. **Recarregar página**
   - Badge continua `[3]`
   - Nenhum novo toast (todas já têm dtnotificacao preenchido)

5. **Clicar em uma notificação**
   - Aquela desaparece
   - Badge muda para `[2]`

---

## 🧪 Teste 8: Verificar Console e Error Log

### Objetivo
Garantir que não há erros nas APIs

### Passos

1. **Abrir DevTools (F12) → Console**

2. **Ver logs como:**
   ```
   👤 ID Usuário Global: 5
   🔔 Verificando notificações...
   🔗 URL Contagem: http://localhost/sagadm/include/api_notificacoes_nao_lidas.php?idusuario=5
   📡 Resposta recebida: 200
   ```

3. **Não deve ter erros 404 ou 500**

4. **Verificar error_log do PHP:**
   ```bash
   tail -f /var/log/php/error.log
   ```

5. **Ver logs como:**
   ```
   === API GET NOTIFICAÇÕES NÃO LIDAS ===
   ID Usuário extraído (GET): 5
   Query Update dtnotificacao: UPDATE sis000_notificacao SET dtnotificacao = now() WHERE ...
   Notificações com dtnotificacao atualizado: 1
   Query Count: SELECT COUNT(*) ...
   SUCESSO: 1 notificações não lidas
   ```

---

## ✅ Checklist de Validação

Marque quando cada teste passar:

- [ ] **Teste 1:** Notificação inserida com `dtnotificacao = NULL`
- [ ] **Teste 2:** Badge aparece com número correto
- [ ] **Teste 3:** `dtnotificacao` é preenchido na primeira consulta
- [ ] **Teste 4:** Toast aparece UMA VEZ
- [ ] **Teste 5:** Dropdown mostra notificações corretamente
- [ ] **Teste 6:** Clicar marca como lida e atualiza badge
- [ ] **Teste 7:** Múltiplas notificações funcionam
- [ ] **Teste 8:** Console e error_log limpos, sem erros

---

## 🐛 Troubleshooting

### Problema: Badge não aparece
**Solução:**
1. Verificar error_log: `tail -f /var/log/php/error.log`
2. Verificar DevTools Console (F12)
3. Verificar se `idusuario` está correto: `echo $_SESSION['UsuarioID']`

### Problema: Toast não aparece
**Solução:**
1. Verificar dtnotificacao no banco: `SELECT dtnotificacao FROM sis000_notificacao...`
2. Se for NULL, significar que API de UPDATE falhou
3. Ver error_log para mensagem exata

### Problema: Erro 404 em API
**Solução:**
1. Verificar caminho: deve ser `/sagadm/include/api_*.php`
2. Verificar se arquivo existe
3. Verificar permissões: `chmod 644 api_*.php`

### Problema: API retorna erro 500
**Solução:**
1. Ver error_log
2. Provavelmente conexão ao PostgreSQL
3. Verificar credenciais: `host=127.0.0.1 dbname=SAG user=postgres password=@@Sag@2020`

---

## 📊 Resultado Esperado Final

Quando todos os testes passarem, o sistema deve:

✅ Detectar notificações novas (`dtnotificacao = NULL`)  
✅ Mostrar badge com contagem  
✅ Exibir toast na primeira consulta  
✅ Preencher `dtnotificacao` automaticamente  
✅ Não repetir toast nas próximas consultas  
✅ Permitir marcar como lida  
✅ Atualizar `dtleitura` quando lida  
✅ Manter histórico completo com timestamps  

🎉 **Sistema 100% Funcional!**
