Skip to content

andrebecker84/PB_TP4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Instituto Infnet Curso Disciplina

SAIKOO — Home Broker e Gestão de Ativos

Java Spring Boot Maven JUnit Selenium Jqwik JaCoCo CI CD Release License

Sistema CRUD de gestão financeira pessoal evoluído no TP4 com pipeline CI/CD automatizada via GitHub Actions — build, testes, cobertura JaCoCo ≥ 85% e entrega contínua a cada push.

LinkedIn GitHub


Sumário


Sobre o Projeto

O SAIKOO é um sistema CRUD de gestão financeira pessoal construído com Java 21 e Spring Boot 3.3, cobrindo o portfólio completo do investidor: Ações, FIIs, Criptomoedas, Renda Fixa, Precatórios e Ativos Reais. A interface usa dark theme inspirado em terminais profissionais de home broker.

O TP4 evolui o sistema incorporando uma pipeline CI/CD completa com GitHub Actions, automatizando validação, cobertura de código, testes E2E com Selenium e entrega do artefato a cada alteração no repositório.


Pipeline CI/CD

O foco do TP4 é a automação completa do ciclo de vida do software via dois workflows independentes em .github/workflows/.

CI — Integração Contínua (ci.yml)

Dispara em todo push (qualquer branch) e em pull requests para main.

push / pull_request
        │
        ▼
  Job 1: testes-unitarios-integracao   (timeout: 15 min)
  ├── Setup Java 21 (Temurin) + cache Maven
  ├── mvn -B clean verify -Dtest="!AtivoSeleniumTest"
  │   ├── compila o projeto
  │   ├── executa 50+ testes unitários e de integração
  │   └── JaCoCo gate — falha o build se cobertura < 85%
  ├── Upload: surefire-reports
  └── Upload: jacoco-coverage-report
        │
        │ (needs — só avança se job 1 passou)
        ▼
  Job 2: testes-e2e   (timeout: 10 min)
  ├── mvn -B test -Dtest=AtivoSeleniumTest
  │   └── Chrome headless (configurado no próprio teste)
  └── Upload: selenium-screenshots  (if: always)

CD — Entrega Contínua (cd.yml)

Dispara somente após o CI passar com sucesso em main (via workflow_run) ou em push de tag v*.*.*.

CI concluído com sucesso em main  (ou tag v*.*.*)
        │
        ▼
  Job 1: build-artefato   (timeout: 10 min)
  ├── mvn -B clean package -DskipTests
  │   └── gera saikoo-1.0.0.jar (fat-JAR Spring Boot)
  └── Upload: saikoo-jar (30 dias)
        │
        │ (needs + somente em tags v*.*.*)
        ▼
  Job 2: release   (timeout: 5 min)
  ├── Cria GitHub Release com JAR anexado
  └── Gera changelog automático dos commits

Execução validada no GitHub Actions

Run Trigger Status Duração Artefatos
CI #1 push main ✅ Success 2m 17s jacoco-report · screenshots · surefire-reports
CD #1 workflow_run (CI passou) ✅ Success 21s saikoo-jar (43,5 MB)
CD #2 tag v1.0.0 ✅ Success 48s saikoo-jar + GitHub Release

Ver Actions Ver Release


Boas Práticas Aplicadas

Prática O que resolve
workflow_run no CD CD só executa após CI aprovado — impede artefato de código quebrado
-B em todos os mvn Logs limpos no runner — sem ANSI colors e sem prompts interativos
concurrency com cancel Cancela runs obsoletos em branches de feature, preserva execuções em main
timeout-minutes por job Impede que runner seja bloqueado por teste ou build travado
permissions: contents: read no CI Princípio do menor privilégio — CI não precisa escrever no repositório

Tecnologias

Categoria Tecnologia Versão Uso
Backend Java 21 Linguagem principal
Backend Spring Boot 3.3.0 Web, Data JPA, Thymeleaf, Validation
Backend H2 Database Banco em memória para dev e testes
Frontend Thymeleaf SSR Templates com arquitetura de componentes
Frontend Bootstrap 5 + Icons Layout responsivo e ícones
Frontend Chart.js Gráficos interativos no dashboard
Testes JUnit 5 + Mockito Testes unitários e de integração
Testes Selenium WebDriver 4.21.0 Automação E2E no browser
Testes Jqwik 1.8.5 Property-based e fuzz testing
Testes JaCoCo 0.8.12 Cobertura de código (mínimo 85%)
CI/CD GitHub Actions Pipeline CI — build, testes, cobertura
CI/CD GitHub Actions Pipeline CD — empacotamento e release

Arquitetura

Layered Architecture com separação estrita entre Controller, Service, Repository e Model.

src/main/java/com/infnet/financas/
├── controller/     # Roteamento HTTP — zero lógica de negócio
├── service/        # Regras de negócio + DashboardMetrics (Java 21 record)
├── repository/     # Spring Data JPA
├── model/          # Entidade JPA + enums aninhados + getPrecoMedio()
└── exception/      # Exceções de domínio + @ControllerAdvice global

Testes e Cobertura

Cobertura JaCoCo

Pacote Cobertura de Linhas
com.infnet.financas 100%
com.infnet.financas.controller 100%
com.infnet.financas.service 100%
com.infnet.financas.exception 100%
com.infnet.financas.model 86%
Total (excl. boilerplate) ≥ 85% — PASS

Suíte de Testes

Classe Tipo Casos
AtivoFinanceiroServiceTest Unitário (Mockito) 12
AtivoControllerTest Unitário (MockMvc) 17
AtivoFinanceiroRepositoryTest Integração (@DataJpaTest) 7
AtivoFinanceiroTest Unitário (modelo) 7
GerenciadorExcecoesGlobalTest Unitário 4
HomeControllerTest Unitário (MockMvc) 1
CenariosAdversosTest Cenários adversos 8
AtivoFinanceiroPropriedadeTest Property-based (Jqwik) 4 × 1.000
AtivoSeleniumTest E2E (Selenium) 6
SaikooApplicationTest Contexto Spring 2

Como Executar

Pré-requisitos: Java 21+, Maven 3.9+, Google Chrome (para testes Selenium)

# Clonar o repositório
git clone https://github.com/andrebecker84/PB_TP4.git
cd PB_TP4

# Iniciar a aplicação
mvn spring-boot:run
URL Descrição
http://localhost:8080/ Redireciona para o dashboard
http://localhost:8080/ativos/dashboard Dashboard financeiro
http://localhost:8080/ativos Gestão de Ativos (CRUD)
http://localhost:8080/h2-console Console H2 (dev)
# Suíte completa + relatório JaCoCo
mvn clean verify

# Apenas testes unitários e de integração (sem Selenium)
mvn clean verify -Dtest="!AtivoSeleniumTest" -DfailIfNoTests=false

# Apenas testes Selenium
mvn test -Dtest=AtivoSeleniumTest -DfailIfNoTests=false

Artefatos locais após mvn clean verify:

Artefato Local
Cobertura JaCoCo target/site/jacoco/index.html
Screenshots Selenium src/test/resources/screenshots/
Log da aplicação logs/saikoo-<data-hora>.log

Demonstração Visual

Dashboard SAIKOO

Dashboard financeiro capturado durante execução do teste E2E Selenium — shouldVisitDashboardWithCharts


Estrutura do Projeto

PB_TP4/
├── .github/
│   └── workflows/
│       ├── ci.yml                 # Pipeline CI (build, testes, cobertura)
│       └── cd.yml                 # Pipeline CD (empacotamento e release)
├── doc/
│   ├── DOCUMENTACAO_PB_TP4.md
│   └── images/
│       └── card.svg
├── src/
│   ├── main/
│   │   ├── java/com/infnet/financas/
│   │   │   ├── SaikooApplication.java
│   │   │   ├── controller/
│   │   │   ├── service/
│   │   │   ├── repository/
│   │   │   ├── model/
│   │   │   └── exception/
│   │   └── resources/
│   │       ├── templates/
│   │       ├── static/
│   │       └── application.properties
│   └── test/
│       └── java/com/infnet/financas/
│           ├── SaikooApplicationTest.java
│           ├── unit/
│           └── selenium/
│               ├── AtivoSeleniumTest.java
│               └── pageobjects/
├── pom.xml
├── LICENSE
└── README.md

Documentação Completa

Consulte a documentação técnica detalhada em doc/DOCUMENTACAO_PB_TP4.md.


Autor

Card


Licença

MIT — André Luis Becker. Consulte o arquivo LICENSE.

About

Gestão de ativos financeiros com CRUD completo, pipeline CI/CD automatizada (GitHub Actions), testes E2E Selenium e cobertura JaCoCo ≥ 85% — Java 21 · Spring Boot 3.3

Topics

Resources

License

Stars

Watchers

Forks

Contributors