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