Skip to content

Feature/refatoramento monorepo#11

Merged
Benevanio merged 5 commits into
developfrom
feature/refatoramento-monorepo
Mar 22, 2026
Merged

Feature/refatoramento monorepo#11
Benevanio merged 5 commits into
developfrom
feature/refatoramento-monorepo

Conversation

@Benevanio

Copy link
Copy Markdown
Collaborator

No description provided.

Added demo images to showcase the bot's functionality.
Add demo section with images to README
… workspaces

- Updated package.json to define a monorepo structure with workspaces for frontend and backend.
- Removed obsolete files related to job scraping and exporting functionalities.
- Deleted configuration, logger, and server files as part of the refactor.
- Removed tests associated with the deleted functionalities.
- Introduced new scripts for concurrent development of frontend and backend.
…components

- Created unit tests for backend services, including app, browser, exporter, and linkedinScraper.
- Added tests for utility functions and configuration handling.
- Implemented integration tests for frontend hooks and components, ensuring proper functionality and state management.
- Established Vitest configuration for both backend and frontend, including coverage thresholds.
- Introduced mock implementations for external dependencies to isolate tests.
@Benevanio
Benevanio requested a review from Copilot March 22, 2026 17:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refatora o projeto para um monorepo com workspaces frontend e backend, atualizando scripts, Docker/Compose e CI, e adicionando configuração de testes/coverage + uma suíte inicial de testes unitários/integrados.

Changes:

  • Migração do package.json raiz para workspaces (scripts de dev/build/test/coverage centralizados) e ajustes no CI para rodar coverage por workspace.
  • Separação de configuração do Vitest por workspace (frontend/vitest.config.js e backend/vitest.config.js) e adição de testes para hooks/serviços/componentes (frontend) e utilitários/serviços/API (backend).
  • Ajustes de Docker/Compose para build por pasta (./frontend, ./backend) e mudança do serviço api para backend.

Reviewed changes

Copilot reviewed 35 out of 50 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
vitest.config.js Remove configuração global do Vitest (agora por workspace).
package.json Converte para raiz de monorepo (workspaces + scripts agregadores).
frontend/vitest.config.js Configura Vitest do frontend (jsdom, setup, coverage, alias).
frontend/tsconfig.json Inclui tipos e pasta de testes no TS.
frontend/tests/** Adiciona testes unitários/integrados para hooks, services e componentes.
frontend/tests/setup.js Setup do jest-dom para Vitest no frontend.
frontend/package.json Adiciona scripts e deps de test/coverage no frontend.
frontend/Dockerfile Ajusta COPY para build com context ./frontend.
docker-compose.yml Ajusta serviços para backend/frontend com contexts separados e remove scraper dedicado.
backend/vitest.config.js Configura Vitest do backend (node + coverage thresholds).
backend/tests/** Adiciona/atualiza testes unitários e integrados do backend.
backend/src/jobsApiApp.js Garante criação do diretório de output na listagem de arquivos.
backend/package.json Cria package do backend com scripts/deps próprios.
TESTING.md Documenta estratégia de testes e comandos do monorepo.
README.md Atualiza documentação para estrutura monorepo e novos comandos.
.github/workflows/ci.yml Troca pipeline para rodar coverage por workspace + lint/build do frontend.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +14 to +18
it("nao permite pagina menor que 1", () => {
const { result } = renderHook(() => useJobsPagination({ filteredJobs: JOBS, initialPageSize: 2 }));
result.current.setCurrentPage(0);
expect(result.current.currentPage).toBe(1);
});

Copilot AI Mar 22, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Atualizações de estado disparadas por hooks (ex.: setCurrentPage) devem ser envolvidas por act(...) (ou então aguardar re-render com waitFor) para garantir que o estado tenha sido aplicado antes do assert. Do jeito atual, o teste pode ficar intermitente ou falhar em ambientes/versões diferentes do React/testing-library.

Copilot uses AI. Check for mistakes.

describe("jobsService", () => {
afterEach(() => {
vi.restoreAllMocks();

Copilot AI Mar 22, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vi.restoreAllMocks() não reverte necessariamente vi.stubGlobal(...). Como estes testes fazem vi.stubGlobal('fetch', ...), o stub pode vazar para outros arquivos de teste. Sugestão: no afterEach, também chamar vi.unstubAllGlobals() (ou garantir que fetch seja restaurado explicitamente) para isolar os testes.

Suggested change
vi.restoreAllMocks();
vi.restoreAllMocks();
vi.unstubAllGlobals();

Copilot uses AI. Check for mistakes.
Comment thread backend/src/jobsApiApp.js
import cors from "cors";
import express from "express";
import { existsSync, readdirSync, statSync } from "fs";
import { existsSync, mkdirSync, readdirSync, statSync } from "fs";

Copilot AI Mar 22, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depois de mkdirSync(outputDir, { recursive: true }), o existsSync(outputDir) tende a ser redundante (se mkdirSync falhar, vai lançar e cair no catch do handler). Além disso, mkdirSync é executado a cada request que chama listXlsxFiles(). Recomendações: (1) inverter a ordem para checar existsSync antes e só então criar; ou (2) mover a criação do diretório para a inicialização do app (fora do caminho quente de request), mantendo o fluxo mais eficiente e claro.

Copilot uses AI. Check for mistakes.
Comment thread backend/src/jobsApiApp.js
Comment on lines 14 to +19
app.use(cors());

function listXlsxFiles() {
// Garante que a pasta exista tambem no primeiro boot em ambiente Docker.
mkdirSync(outputDir, { recursive: true });

Copilot AI Mar 22, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depois de mkdirSync(outputDir, { recursive: true }), o existsSync(outputDir) tende a ser redundante (se mkdirSync falhar, vai lançar e cair no catch do handler). Além disso, mkdirSync é executado a cada request que chama listXlsxFiles(). Recomendações: (1) inverter a ordem para checar existsSync antes e só então criar; ou (2) mover a criação do diretório para a inicialização do app (fora do caminho quente de request), mantendo o fluxo mais eficiente e claro.

Suggested change
app.use(cors());
function listXlsxFiles() {
// Garante que a pasta exista tambem no primeiro boot em ambiente Docker.
mkdirSync(outputDir, { recursive: true });
// Garante que a pasta exista tambem no primeiro boot em ambiente Docker.
mkdirSync(outputDir, { recursive: true });
app.use(cors());
function listXlsxFiles() {

Copilot uses AI. Check for mistakes.
Comment on lines +18 to +23
beforeEach(() => {
vi.resetModules();
vi.clearAllMocks();
process.env.PORT = "3100";
vi.spyOn(console, "log").mockImplementation(mocks.consoleLog);
});

Copilot AI Mar 22, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O console.log é espionado e mockado em beforeEach, mas não há afterEach restaurando (mockRestore/vi.restoreAllMocks). Isso pode vazar para outros testes e também tornar o segundo spyOn na mesma função frágil dependendo do runner. Sugestão: adicionar afterEach(() => vi.restoreAllMocks()) (ou restaurar apenas o spy do console) para garantir isolamento.

Copilot uses AI. Check for mistakes.
Comment on lines +8 to +12
const created = [];

afterEach(() => {
created.length = 0;
});

Copilot AI Mar 22, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O array created é populado, mas o afterEach apenas zera a lista e não remove os arquivos/diretórios temporários criados com mkdtempSync. Isso pode poluir o ambiente de execução local/CI com lixo em /tmp. Sugestão: remover created se não for necessário, ou usá-lo para fazer cleanup real (remover arquivos e/ou o diretório temporário) no afterEach.

Copilot uses AI. Check for mistakes.
@Benevanio
Benevanio merged commit 75d9bf0 into develop Mar 22, 2026
1 check passed
@Benevanio
Benevanio deleted the feature/refatoramento-monorepo branch March 22, 2026 17:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants