BCards/src/BCards.IntegrationTests/README.md
2025-07-14 23:21:25 -03:00

5.0 KiB

BCards Integration Tests

Este projeto contém testes integrados para o sistema BCards, validando workflows completos desde a criação de páginas até o sistema de moderação.

Estrutura dos Testes

Fixtures

  • BCardsWebApplicationFactory: Factory personalizada que configura ambiente de teste com MongoDB container
  • MongoDbTestFixture: Helper para criar e gerenciar dados de teste no MongoDB
  • StripeTestFixture: Mock para integração Stripe (futuro)

Helpers

  • AuthenticationHelper: Mock para autenticação OAuth (Google/Microsoft)
  • PuppeteerTestHelper: Automação de browser para testes E2E
  • TestDataBuilder: Builders para criar objetos de teste (futuro)

Tests

  • PageCreationTests: Validação de criação de páginas e limites por plano
  • PreviewTokenTests: Sistema de preview tokens para páginas não-ativas
  • ModerationWorkflowTests: Workflow completo de moderação
  • PlanLimitationTests: Validação de limitações por plano (futuro)
  • StripeIntegrationTests: Testes de upgrade via Stripe (futuro)

Cenários Testados

Sistema de Páginas

  1. Criação de páginas respeitando limites dos planos (Trial: 1, Basic: 3, etc.)
  2. Status de páginas: Creating → PendingModeration → Active/Rejected
  3. Preview tokens: Acesso a páginas em desenvolvimento (4h de validade)
  4. Validação de limites: Links normais vs produto por plano

Workflow de Moderação

  1. Submissão para moderação: Creating → PendingModeration
  2. Aprovação: PendingModeration → Active (page vira pública)
  3. Rejeição: PendingModeration → Inactive/Rejected
  4. Preview system: Acesso via token para pages não-Active

Plan Limitations (Basic vs Professional)

  • Basic: 5 links máximo
  • Professional: 15 links máximo
  • Trial: 1 página, 3 links + 1 produto

Tecnologias Utilizadas

  • xUnit: Framework de testes
  • FluentAssertions: Assertions expressivas
  • WebApplicationFactory: Testes integrados ASP.NET Core
  • Testcontainers: MongoDB container para isolamento
  • PuppeteerSharp: Automação de browser (Chrome)
  • MongoDB.Driver: Acesso direto ao banco para validações

Configuração

Pré-requisitos

  • .NET 8 SDK
  • Docker (para MongoDB container)
  • Chrome/Chromium (baixado automaticamente pelo PuppeteerSharp)

Executar Testes

# Todos os testes
dotnet test src/BCards.IntegrationTests/

# Testes específicos
dotnet test src/BCards.IntegrationTests/ --filter "PageCreationTests"
dotnet test src/BCards.IntegrationTests/ --filter "PreviewTokenTests"

Configuração Manual (MongoDB local)

Se preferir usar MongoDB local em vez do container:

// appsettings.Testing.json
{
  "MongoDb": {
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "BCardsDB_Test"
  }
}

Estrutura de Dados de Teste

User

  • Trial: 1 página máx, links limitados
  • Basic: 3 páginas, 5 links por página
  • Professional: 5 páginas, 15 links por página

UserPage

  • Status: Creating, PendingModeration, Active, Rejected
  • Preview Tokens: 4h de validade para access não-Active
  • Links: Normal vs Product (limites diferentes por plano)

Categories

  • tecnologia: Empresas de tech
  • negocios: Empresas e empreendedores
  • pessoal: Freelancers e páginas pessoais
  • saude: Profissionais da área da saúde

Padrões de Teste

Arrange-Act-Assert

Todos os testes seguem o padrão AAA:

// Arrange
var user = await _dbFixture.CreateTestUserAsync(PlanType.Basic);
var page = await _dbFixture.CreateTestUserPageAsync(user.Id, PageStatus.Creating);

// Act
var response = await client.PostAsync($"/Admin/SubmitForModeration/{page.Id}", null);

// Assert
response.IsSuccessStatusCode.Should().BeTrue();

Cleanup Automático

  • Cada teste usa database isolada (GUID no nome)
  • Container MongoDB é destruído após os testes
  • Sem interferência entre testes

Mocks

  • EmailService: Mockado para evitar envios reais
  • StripeService: Mockado para evitar cobrança real
  • OAuth: Mockado para evitar dependência externa

Debug e Troubleshooting

PuppeteerSharp

Para debug visual dos testes de browser:

_browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
    Headless = false, // Mostra o browser
    SlowMo = 100     // Delay entre ações
});

MongoDB

Para inspecionar dados durante testes, conecte no container:

docker exec -it <container-id> mongosh BCardsDB_Test

Logs

Logs são configurados para mostrar apenas warnings/errors durante testes. Para debug detalhado, altere em BCardsWebApplicationFactory:

logging.SetMinimumLevel(LogLevel.Information);

Próximos Passos

  1. PlanLimitationTests: Validar todas as limitações por plano
  2. StripeIntegrationTests: Testar upgrades via webhook
  3. PerformanceTests: Testar carga no sistema de moderação
  4. E2E Tests: Testes completos com PuppeteerSharp
  5. TrialExpirationTests: Validar exclusão automática após 7 dias