Linhas de produção
Homologação da rota /linhas-producao: cadastro via diálogo Nova Linha, listagem em tabela, resumo por status e alteração de status por linha. Marque cada item ao validar.
Diálogo de cadastro (“Cadastrar Nova Linha”)
- Abrir o diálogo — O botão “Nova Linha” / “Linha” (mobile) abre o modal com título “Cadastrar Nova Linha” e o formulário visível.
- Fechar sem gravar — “Cancelar” fecha o diálogo; fechar pelo overlay ou ESC (comportamento do
Dialog) não perde dados de forma inesperada ao reabrir (estado reposto ou mantido conforme implementação). - Nome da linha — obrigatório — Campo vazio impede submissão (validação HTML
required); preenchimento válido permite enviar. - Código — obrigatório — Mesma regra que o nome; código único ou regras de negócio da API (duplicado, formato) retornam erro tratado na UI.
- Descrição opcional — Pode ficar vazio; envio com
descriptionomitida ou vazia conforme contrato (undefined/null aceite pela API). - Status inicial — O select lista todos os estados: Disponível, Ativo, Ocupada, Manutenção, Inativo, Parada; o valor escolhido é enviado em
statusIdno POST. - Valor padrão do status — Ao abrir novo cadastro, o status inicial padrão é Disponível (5), salvo alteração pelo utilizador.
- Estado do botão Cadastrar — Durante o pedido (
isPending), o botão mostra “Cadastrando…” e fica desabilitado, evitando duplo envio. - Sucesso no cadastro — Toast de sucesso com título e menção à linha; diálogo fecha; campos do formulário limpam para novo cadastro; status volta ao padrão Disponível.
- Erro no cadastro — Toast destrutivo “Erro ao cadastrar”; diálogo permanece aberto para correção (quando aplicável).
- Invalidação de cache — Após sucesso, a lista de linhas e o resumo por status atualizam sem recarregar a página inteira.
Listagem e tabela (“Linhas Cadastradas”)
- Carregamento — Skeletons enquanto a lista é obtida; depois tabela com colunas Código, Nome, Descrição, Status, Ações.
- Descrição vazia — Célula mostra “—” quando não há descrição.
- Badge de status — Rótulo coerente com
PRODUCTION_LINE_STATUS_LABELSpara ostatusIdretornado. - Lista vazia — Mensagem “Nenhuma linha cadastrada.” quando não há itens.
- Erro ao carregar lista — Faixa ou alerta “Erro ao carregar linhas. Tente novamente.” visível quando a query falha.
Alteração de status (mesma página)
- Select por linha — Cada linha tem um select com os mesmos estados do cadastro; alteração dispara
PATCH .../statuscom o novostatusId. - Sucesso — Toast confirma alteração com o nome do status; tabela e resumo atualizam.
- Erro — Toast destrutivo “Erro ao alterar status”.
- Durante o PATCH — Select desabilitado (
isPending) para evitar cliques concorrentes (comportamento global da mutação — validar se afeta todas as linhas ou só a em curso). - Repetir o mesmo status — Comportamento aceitável (no-op ou PATCH idempotente) sem erro de UI.
Resumo de status (cartões superiores)
- Seis indicadores — Disponível, Ativo, Ocupada, Manutenção, Inativo, Parada com contagens alinhadas à API
/status-summary. - Carregamento — Placeholder/skeleton nos cartões enquanto o resumo carrega.
- Consistência — Após criar linha ou mudar status, os números batem com o conjunto real de linhas (ou com a regra do backend se o resumo for agregado diferente da página).
Permissões e segurança
- Acesso à rota — Utilizador com
ProductionViewacede; sem permissão, guard ou negação de acesso. - API com token inválido — Mensagens de erro ou redirecionamento de sessão coerentes com o resto da app.
Regressão e dados
- Nome e código com caracteres especiais — Acentos e espaços gravam e exibem corretamente na tabela.
- Paginação implícita — Se a API paginar (ex.: 50 itens), a página lista o primeiro bloco; documentar se “ver mais” existe ou se todas vêm numa página.
Atualize quando existir edição de linha (nome/código) fora do diálogo de criação ou novos filtros na listagem.