| .. | ||
| Fixtures | ||
| Helpers | ||
| Tests | ||
| appsettings.Testing.json | ||
| BCards.IntegrationTests.csproj | ||
| README.md | ||
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
- Criação de páginas respeitando limites dos planos (Trial: 1, Basic: 3, etc.)
- Status de páginas: Creating → PendingModeration → Active/Rejected
- Preview tokens: Acesso a páginas em desenvolvimento (4h de validade)
- Validação de limites: Links normais vs produto por plano
Workflow de Moderação
- Submissão para moderação: Creating → PendingModeration
- Aprovação: PendingModeration → Active (page vira pública)
- Rejeição: PendingModeration → Inactive/Rejected
- 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
- PlanLimitationTests: Validar todas as limitações por plano
- StripeIntegrationTests: Testar upgrades via webhook
- PerformanceTests: Testar carga no sistema de moderação
- E2E Tests: Testes completos com PuppeteerSharp
- TrialExpirationTests: Validar exclusão automática após 7 dias