Critérios de Aceite - acnscoelho/ppp-gestao-gastos-domesticos-api GitHub Wiki
📝 Contexto
Os Critérios de Aceite foram definidos para cada User Story identificada nos Épicos e User Stories. Cada critério segue o formato Given-When-Then (Dado-Quando-Então) para facilitar a automação de testes.
🎯 Épico 1 - Gerenciamento de Usuários
US01 - Registro de Usuário
| Critério |
Descrição |
| CA01.1 |
DADO que sou um usuário não cadastradoQUANDO eu envio uma requisição POST para /api/users/register com name, email e password válidosENTÃO o sistema deve criar minha conta, retornar meus dados (sem senha) e um token JWT |
| CA01.2 |
DADO que sou um usuário não cadastradoQUANDO eu tento me registrar com um email já existenteENTÃO o sistema deve retornar erro 400 com mensagem "Email já está em uso" |
| CA01.3 |
DADO que sou um usuário não cadastradoQUANDO eu tento me registrar sem preencher campos obrigatórios (name, email, password)ENTÃO o sistema deve retornar erro 400 com mensagem de validação |
| CA01.4 |
DADO que sou um usuário não cadastradoQUANDO eu tento me registrar com senha menor que 6 caracteresENTÃO o sistema deve retornar erro 400 com mensagem de validação |
US02 - Login de Usuário
| Critério |
Descrição |
| CA02.1 |
DADO que sou um usuário cadastradoQUANDO eu envio uma requisição POST para /api/users/login com email e password corretosENTÃO o sistema deve autenticar minha conta e retornar meus dados com token JWT |
| CA02.2 |
DADO que sou um usuário cadastradoQUANDO eu tento fazer login com senha incorretaENTÃO o sistema deve retornar erro 401 com mensagem "Credenciais inválidas" |
| CA02.3 |
DADO que não sou cadastradoQUANDO eu tento fazer login com email não existenteENTÃO o sistema deve retornar erro 401 com mensagem "Credenciais inválidas" |
US03 - Visualizar Perfil
| Critério |
Descrição |
| CA03.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição GET para /api/users/profile com token válidoENTÃO o sistema deve retornar meus dados completos (sem senha) |
| CA03.2 |
DADO que não estou autenticadoQUANDO eu tento acessar o perfil sem tokenENTÃO o sistema deve retornar erro 401 com mensagem "Token não fornecido" |
| CA03.3 |
DADO que estou autenticadoQUANDO eu envio um token inválido ou expiradoENTÃO o sistema deve retornar erro 401 com mensagem "Token inválido" |
US04 - Atualizar Perfil
| Critério |
Descrição |
| CA04.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição PUT para /api/users/profile com novos dados válidosENTÃO o sistema deve atualizar meus dados e retornar as informações atualizadas |
| CA04.2 |
DADO que sou um usuário autenticadoQUANDO eu tento atualizar meu email para um já existenteENTÃO o sistema deve retornar erro 400 com mensagem "Email já está em uso" |
US05 - Excluir Conta
| Critério |
Descrição |
| CA05.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição DELETE para /api/users/profileENTÃO o sistema deve excluir minha conta e todos os dados relacionados |
🎯 Épico 2 - Gerenciamento de Despesas Fixas
US06 - Cadastrar Despesa Fixa
| Critério |
Descrição |
| CA06.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição POST para /api/expenses/fixed com name e value válidosENTÃO o sistema deve criar a despesa fixa com status "Pendente", paidValue = 0 e remainingValue = value |
| CA06.2 |
DADO que sou um usuário autenticadoQUANDO eu tento criar uma despesa fixa sem name ou valueENTÃO o sistema deve retornar erro 400 com mensagem de validação |
| CA06.3 |
DADO que sou um usuário autenticadoQUANDO eu tento criar uma despesa fixa com value negativoENTÃO o sistema deve retornar erro 400 com mensagem de validação |
US07 - Listar Despesas Fixas
| Critério |
Descrição |
| CA07.1 |
DADO que existem despesas fixas cadastradasQUANDO eu envio uma requisição GET para /api/expenses/fixedENTÃO o sistema deve retornar array com todas as despesas fixas |
| CA07.2 |
DADO que não existem despesas fixas cadastradasQUANDO eu envio uma requisição GET para /api/expenses/fixedENTÃO o sistema deve retornar array vazio |
US08 - Visualizar Despesa Fixa
| Critério |
Descrição |
| CA08.1 |
DADO que existe uma despesa fixa com ID específicoQUANDO eu envio uma requisição GET para /api/expenses/fixed/:idENTÃO o sistema deve retornar os detalhes completos da despesa |
| CA08.2 |
DADO que não existe despesa fixa com o ID informadoQUANDO eu tento visualizar uma despesa inexistenteENTÃO o sistema deve retornar erro 404 com mensagem "Despesa não encontrada" |
US09 - Atualizar Despesa Fixa
| Critério |
Descrição |
| CA09.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição PUT para /api/expenses/fixed/:id com dados válidosENTÃO o sistema deve atualizar a despesa e retornar os dados atualizados |
| CA09.2 |
DADO que sou um usuário autenticadoQUANDO eu tento atualizar uma despesa inexistenteENTÃO o sistema deve retornar erro 404 com mensagem "Despesa não encontrada" |
US10 - Excluir Despesa Fixa
| Critério |
Descrição |
| CA10.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição DELETE para /api/expenses/fixed/:idENTÃO o sistema deve excluir a despesa e todos os pagamentos relacionados |
| CA10.2 |
DADO que a despesa tem pagamentos associadosQUANDO eu excluo a despesaENTÃO o sistema deve estornar os valores na receita dos usuários que pagaram |
🎯 Épico 3 - Gerenciamento de Despesas Variáveis
US11 - Cadastrar Despesa Variável
| Critério |
Descrição |
| CA11.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição POST para /api/expenses/variable com name e value válidosENTÃO o sistema deve criar a despesa variável com status "Pendente", paidValue = 0 e remainingValue = value |
| CA11.2 |
DADO que sou um usuário autenticadoQUANDO eu tento criar uma despesa variável sem name ou valueENTÃO o sistema deve retornar erro 400 com mensagem de validação |
US12 - Listar Despesas Variáveis
| Critério |
Descrição |
| CA12.1 |
DADO que existem despesas variáveis cadastradasQUANDO eu envio uma requisição GET para /api/expenses/variableENTÃO o sistema deve retornar array com todas as despesas variáveis |
US13 - Visualizar Despesa Variável
| Critério |
Descrição |
| CA13.1 |
DADO que existe uma despesa variável com ID específicoQUANDO eu envio uma requisição GET para /api/expenses/variable/:idENTÃO o sistema deve retornar os detalhes completos da despesa |
| CA13.2 |
DADO que não existe despesa variável com o ID informadoQUANDO eu tento visualizar uma despesa inexistenteENTÃO o sistema deve retornar erro 404 |
US14 - Atualizar Despesa Variável
| Critério |
Descrição |
| CA14.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição PUT para /api/expenses/variable/:id com dados válidosENTÃO o sistema deve atualizar a despesa e retornar os dados atualizados |
US15 - Excluir Despesa Variável
| Critério |
Descrição |
| CA15.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição DELETE para /api/expenses/variable/:idENTÃO o sistema deve excluir a despesa e todos os pagamentos relacionados |
🎯 Épico 4 - Gerenciamento de Receitas
US16 - Cadastrar Receita
| Critério |
Descrição |
| CA16.1 |
DADO que sou um usuário autenticado sem receita cadastradaQUANDO eu envio uma requisição POST para /api/revenues com currentValue válidoENTÃO o sistema deve criar minha receita com usedValue = 0 e availableValue = currentValue |
| CA16.2 |
DADO que sou um usuário autenticado e já tenho receita cadastradaQUANDO eu tento criar uma nova receitaENTÃO o sistema deve retornar erro 400 com mensagem "Usuário já possui receita registrada" |
| CA16.3 |
DADO que sou um usuário autenticadoQUANDO eu tento criar receita com currentValue negativoENTÃO o sistema deve retornar erro 400 com mensagem de validação |
US17 - Visualizar Receita
| Critério |
Descrição |
| CA17.1 |
DADO que sou um usuário autenticado com receita cadastradaQUANDO eu envio uma requisição GET para /api/revenuesENTÃO o sistema deve retornar minha receita com todos os campos (currentValue, previousValue, usedValue, availableValue) |
| CA17.2 |
DADO que sou um usuário autenticado sem receita cadastradaQUANDO eu tento visualizar minha receitaENTÃO o sistema deve retornar erro 404 com mensagem "Receita não encontrada" |
US18 - Atualizar Receita
| Critério |
Descrição |
| CA18.1 |
DADO que sou um usuário autenticado com receita cadastradaQUANDO eu envio uma requisição PUT para /api/revenues com novo currentValue válidoENTÃO o sistema deve atualizar minha receita e recalcular availableValue |
| CA18.2 |
DADO que tenho receita com usedValue = 500QUANDO eu tento atualizar currentValue para valor menor que 500ENTÃO o sistema deve retornar erro 400 com mensagem "Valor atual não pode ser menor que o valor já utilizado" |
US19 - Excluir Receita
| Critério |
Descrição |
| CA19.1 |
DADO que sou um usuário autenticado com receita sem valores utilizados (usedValue = 0)QUANDO eu envio uma requisição DELETE para /api/revenuesENTÃO o sistema deve excluir minha receita |
| CA19.2 |
DADO que tenho receita com usedValue > 0QUANDO eu tento excluir minha receitaENTÃO o sistema deve retornar erro 400 com mensagem "Não é possível deletar receita com valores utilizados" |
US20 - Resumo de Receita
| Critério |
Descrição |
| CA20.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição GET para /api/revenues/summaryENTÃO o sistema deve retornar estatísticas da minha receita |
🎯 Épico 5 - Processamento de Pagamentos
US21 e US22 - Registrar Pagamento
| Critério |
Descrição |
| CA21.1 |
DADO que sou um usuário autenticado com receita disponívelQUANDO eu envio uma requisição POST para /api/expenses/payment com expenseId, expenseType e amount válidosENTÃO o sistema deve criar o pagamento, deduzir da minha receita e atualizar paidValue da despesa |
| CA21.2 |
DADO que tenho receita insuficienteQUANDO eu tento fazer pagamento com amount maior que availableValueENTÃO o sistema deve retornar erro 400 com mensagem "Receita insuficiente para realizar o pagamento" |
| CA21.3 |
DADO que não tenho receita cadastradaQUANDO eu tento fazer um pagamentoENTÃO o sistema deve retornar erro 400 com mensagem "Usuário não possui receita registrada" |
US23 - Dedução Automática da Receita
| Critério |
Descrição |
| CA23.1 |
DADO que tenho availableValue = 1000 e faço pagamento de 300QUANDO o pagamento é processadoENTÃO usedValue deve aumentar em 300 e availableValue deve diminuir para 700 |
US24 - Atualização de Status da Despesa
| Critério |
Descrição |
| CA24.1 |
DADO que uma despesa tem value = 1000 e paidValue = 0QUANDO eu faço pagamento de 1000ENTÃO o status deve mudar para "Pago" e remainingValue = 0 |
| CA24.2 |
DADO que uma despesa tem value = 1000 e paidValue = 0QUANDO eu faço pagamento de 500ENTÃO o status deve mudar para "OK", paidValue = 500 e remainingValue = 500 |
US25 - Validação de Receita Suficiente
| Critério |
Descrição |
| CA25.1 |
DADO que tenho availableValue = 100QUANDO eu tento fazer pagamento de 150ENTÃO o sistema deve impedir e retornar erro 400 |
🎯 Épico 6 - Consulta de Pagamentos
US26 - Listar Todos os Pagamentos
| Critério |
Descrição |
| CA26.1 |
DADO que existem pagamentos cadastradosQUANDO eu envio uma requisição GET para /api/paymentsENTÃO o sistema deve retornar array com todos os pagamentos |
| CA26.2 |
DADO que posso filtrar por query params (userId, expenseId, expenseType, startDate, endDate)QUANDO eu envio filtrosENTÃO o sistema deve retornar apenas pagamentos que atendem aos filtros |
US27 - Visualizar Meus Pagamentos
| Critério |
Descrição |
| CA27.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição GET para /api/payments/user/meENTÃO o sistema deve retornar apenas meus pagamentos |
US28 - Pagamentos de Despesa Específica
| Critério |
Descrição |
| CA28.1 |
DADO que uma despesa tem pagamentos associadosQUANDO eu envio uma requisição GET para /api/payments/expense/:expenseIdENTÃO o sistema deve retornar todos os pagamentos daquela despesa |
US29 - Resumo de Pagamentos
| Critério |
Descrição |
| CA29.1 |
DADO que existem pagamentos cadastradosQUANDO eu envio uma requisição GET para /api/payments/summaryENTÃO o sistema deve retornar totalPayments, totalAmount, byExpenseType, byMonth e averagePayment |
US30 - Excluir Pagamento
| Critério |
Descrição |
| CA30.1 |
DADO que sou um usuário autenticadoQUANDO eu envio uma requisição DELETE para /api/payments/:idENTÃO o sistema deve excluir o pagamento e estornar o valor na receita |
🎯 Épico 7 - Dashboard e Relatórios
US31 - Dashboard Visual
| Critério |
Descrição |
| CA31.1 |
DADO que acesso o dashboardQUANDO eu envio uma requisição GET para /api/dashboardENTÃO o sistema deve renderizar página HTML com gráficos, tabelas e resumo financeiro |
US32 - Resumo Financeiro
| Critério |
Descrição |
| CA32.1 |
DADO que existem despesas e receitas cadastradasQUANDO eu envio uma requisição GET para /api/expenses/summaryENTÃO o sistema deve retornar totais de despesas fixas, variáveis, receitas e situação final |
US33 - Despesas por Tipo
| Critério |
Descrição |
| CA33.1 |
DADO que existem despesas cadastradasQUANDO eu envio uma requisição GET para /api/expenses/type/:type (fixed ou variable)ENTÃO o sistema deve retornar apenas despesas do tipo especificado |
US34 - Dados do Dashboard via API
| Critério |
Descrição |
| CA34.1 |
DADO que preciso de dados em JSONQUANDO eu envio uma requisição GET para /api/dashboard/dataENTÃO o sistema deve retornar dados do dashboard em formato JSON |