Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
96e208e
feat(sprint-7.16): add Keycloak client automation script
Jan 17, 2026
9d4fa49
fix: corrigir broken links na documentação
Jan 17, 2026
3fcd95f
refactor: otimizar README.md - remover redundâncias e traduzir para p…
Jan 17, 2026
cb33c07
feat(sprint-7.16): integrar setup Keycloak ao código C#
Jan 17, 2026
045fd9a
refactor(sprint-7.16): remover script PowerShell obsoleto do Keycloak
Jan 17, 2026
26f7647
feat(sprint-7.16): simplify Keycloak setup with native realm import
Jan 17, 2026
5b126ac
fix(sprint-7.16): resolver todos os warnings de build
Jan 17, 2026
77a1d31
docs(sprint-7.16): adicionar padronização de C# records
Jan 17, 2026
8751cdc
refactor(sprint-7.16): converter 10 records para padrão positional
Jan 17, 2026
8885f03
refactor(tests,docs): apply code review fixes
Jan 17, 2026
4528528
refactor(i18n): fix language inconsistencies across codebase
Jan 17, 2026
7b49773
docs(code-review): apply final documentation and safety fixes
Jan 17, 2026
3e4f771
docs(versions): align tech stack versions with actual configs
Jan 17, 2026
7b8bdd6
atualiza roadmap marcando o fim da sprint 7.16
Jan 17, 2026
d517872
refactor(web-admin): refatoração de código e organização de arquivos
Jan 17, 2026
9980385
fix(tests): corrigir assinaturas de DTOs e usar APIs atualizadas do b…
Jan 17, 2026
58d8a06
docs(web-admin): traduzir comentários de helpers e services para port…
Jan 17, 2026
658ca04
refactor(web-admin): dividir AccessibilityHelper em helpers especiali…
Jan 17, 2026
6e2fe6c
fix(web-admin): aplicar correções do code review
Jan 17, 2026
1f1b09e
refactor(web-admin): extrair ConnectionStatus e IConnectionStatusService
Jan 17, 2026
75f458e
docs(web-admin): traduzir comentários de Features/Errors para português
Jan 17, 2026
1c37caf
fix(docs): corrigir problemas de formatação e status
Jan 17, 2026
fbb9340
refactor(web-admin): traduzir comentários em Pages/
Jan 17, 2026
c2d4c68
refactor(web-admin): criar Services/Interfaces/ e reorganizar
Jan 17, 2026
37bf5df
refactor(web-admin): reorganizar pasta Resilience/ com subpastas
Jan 17, 2026
b0664f7
refactor(web-admin): reorganizar Constants/ em subpastas por módulo
Jan 17, 2026
7900ea4
refactor(web-admin): criar Features/Modules/ e reorganizar features d…
Jan 17, 2026
14e5c11
docs(web-admin): resolver TODO em ErrorLoggingService com documentação
Jan 17, 2026
800a696
refactor: aplicar correções de code review
Jan 17, 2026
0a666a8
docs: aplicar correções de review
Jan 18, 2026
df17bcf
refactor(ci): remover coverage do bUnit - focar em quantidade de testes
Jan 18, 2026
343dd5a
refactor: aplicar correções de code review
Jan 18, 2026
3a5dc71
fix(aspire): downgrade Redis 13.1.0 -> 13.0.2 para resolver problema …
Jan 19, 2026
6834ca8
fix(aspire): workaround para bug de health check no Aspire 13.1.0
Jan 19, 2026
fb4ad6a
fix: corrigir múltiplos problemas de code review
Jan 19, 2026
ea581ea
docs: corrigir comentários enganosos sobre Aspire
Jan 19, 2026
b04a225
refactor: melhorar logging e tratamento de erros
Jan 19, 2026
a9ce80e
fix: alinhar política de idiomas e corrigir markdown
Jan 19, 2026
28872ff
fix: corrigir configuração Keycloak e tema do Admin Portal
Jan 20, 2026
5849bc3
fix: adicionar roles faltantes no Keycloak realm
Jan 20, 2026
75302fb
refactor: alinhar roles em todo o projeto
Jan 20, 2026
c0d0336
docs: adicionar análise de alinhamento backend/frontend
Jan 20, 2026
1cb1f09
fix: atualizar testes e aplicar feedback de code review
Jan 20, 2026
bdcf90f
docs: corrigir markdown e adicionar notas de segurança Keycloak
Jan 20, 2026
ab68f91
fix: corrigir validações e adicionar avisos de segurança
Jan 20, 2026
1c5622c
test: atualizar CreateUserRequestValidatorTests para mensagens em por…
Jan 20, 2026
ea86030
fix: adicionar protocol mapper de roles no client admin-portal
Jan 20, 2026
c6fe19c
fix: adicionar 'unsafe-eval' ao CSP para suportar Fluxor
Jan 20, 2026
83d927d
fix: configurar autenticação e logout do Admin Portal
Jan 21, 2026
f874d98
fix: ajustar CSP para permitir portas dinâmicas do Aspire
Jan 21, 2026
2205fc3
fix: corrigir autenticação JWT com portas dinâmicas do Aspire
Jan 21, 2026
f67545b
fix: remover layout do Admin Portal das páginas de autenticação
Jan 21, 2026
332d9fb
fix: corrigir redirecionamento para página de login
Jan 21, 2026
fbe3694
fix: adicionar 'unsafe-inline' ao CSP para scripts do Blazor
Jan 21, 2026
30b8943
chore: remover página de debug de claims
Jan 21, 2026
7ed6137
tenta corrigir bugs no admin portal
Jan 21, 2026
2c90262
fix: resolve multiple code review issues and E2E test failure
Jan 22, 2026
26676ec
refactor: apply code review nitpicks and improvements
Jan 22, 2026
0bcbd8c
Fix missing Shared project reference to unblock build.
Jan 22, 2026
c551e16
minor fixes on providersEffects
Jan 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 7 additions & 11 deletions .github/workflows/master-ci-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -175,17 +175,13 @@ jobs:
echo "Running Blazor WASM component tests with bUnit framework"
echo "Target: MeAjudaAi.Web.Admin (Blazor Admin Portal)"
echo ""

# Define exclude patterns for Blazor WASM generated code
BLAZOR_EXCLUDE_PATTERNS="**/*.g.cs,**/*.razor.g.cs,**/obj/**,**/bin/**"
echo "⚠️ Note: Coverage NOT collected for Blazor WASM (unreliable due to generated code)"
echo "Focus: Maximum test coverage of components, not code coverage metrics"
echo ""

echo "▶️ Running Web.Admin component tests (10 tests: Providers, Dashboard, DarkMode)..."
echo "▶️ Running Web.Admin component tests (43 tests: Pages, Dialogs, Components)..."
dotnet test tests/MeAjudaAi.Web.Admin.Tests/MeAjudaAi.Web.Admin.Tests.csproj \
--configuration Release --no-restore --verbosity normal \
--collect:"XPlat Code Coverage" --results-directory TestResults/WebAdmin \
-- \
DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.ExcludeByFile="$BLAZOR_EXCLUDE_PATTERNS" \
DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.ExcludeByAttribute="Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute"
--configuration Release --no-restore --verbosity normal

echo ""
echo "✅ Frontend component tests completed successfully"
Expand Down Expand Up @@ -266,14 +262,14 @@ jobs:
env:
DOTNET_ROOT: ${{ env.DOTNET_ROOT }}
with:
reports: 'TestResults/Shared/**/coverage.cobertura.xml;TestResults/Architecture/**/coverage.cobertura.xml;TestResults/ApiService/**/coverage.cobertura.xml;TestResults/Users/**/coverage.cobertura.xml;TestResults/Documents/**/coverage.cobertura.xml;TestResults/Providers/**/coverage.cobertura.xml;TestResults/ServiceCatalogs/**/coverage.cobertura.xml;TestResults/Locations/**/coverage.cobertura.xml;TestResults/SearchProviders/**/coverage.cobertura.xml;TestResults/WebAdmin/**/coverage.cobertura.xml'
reports: 'TestResults/Shared/**/coverage.cobertura.xml;TestResults/Architecture/**/coverage.cobertura.xml;TestResults/ApiService/**/coverage.cobertura.xml;TestResults/Users/**/coverage.cobertura.xml;TestResults/Documents/**/coverage.cobertura.xml;TestResults/Providers/**/coverage.cobertura.xml;TestResults/ServiceCatalogs/**/coverage.cobertura.xml;TestResults/Locations/**/coverage.cobertura.xml;TestResults/SearchProviders/**/coverage.cobertura.xml'
targetdir: 'TestResults/Coverage'
reporttypes: 'Html;Cobertura;JsonSummary'
assemblyfilters: '-*.Tests*;-*Test*;-*.Migrations.*;-*.Database;-*.Contracts'
classfilters: '-*.Migrations.*;-*.Database.*;-*.Contracts.*;-*.Metrics.*;-*.HealthChecks.*;-*.Jobs.Hangfire*;-*.Jobs.Configuration*;-*Program*;-*AppHost*;-*.ServiceDefaults*;-*.Keycloak.*;-*.Monitoring.*;-*NoOp*;-*RabbitMq*;-*ServiceBus*;-*Hangfire*;-*.Jobs.*;-*Options;-*BaseDesignTimeDbContextFactory*;-*SchemaPermissionsManager;-*SimpleHostEnvironment;-*CacheWarmupService;-*GeoPointConverter;-*ModuleNames;-*ModuleApiInfo;-*MessagingExtensions;-*ICacheableQuery'
verbosity: 'Info'
tag: '${{ github.run_number }}_${{ github.run_id }}'
# Note: UNIT test coverage collected (backend + frontend bUnit). Integration/E2E excluded for deterministic results
# Note: UNIT test coverage for backend only. Frontend bUnit tests run separately without coverage (unreliable for Blazor WASM).
# Excluded from coverage: Tests, Migrations, Database, Contracts, Metrics, Health Checks, Jobs, Program, AppHost, Keycloak, Monitoring, NoOp, RabbitMq, ServiceBus, Hangfire, Options, Design-time factories

- name: Upload code coverage
Expand Down
62 changes: 6 additions & 56 deletions .github/workflows/pr-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -259,8 +259,8 @@
# ⚠️ TEST CREDENTIALS ONLY - These are the standard Azurite local emulator credentials
# These are intentionally public and documented at:
# https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite#well-known-storage-account-and-key
AZURE_STORAGE_CONNECTION_STRING: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;"

Check warning on line 262 in .github/workflows/pr-validation.yml

View workflow job for this annotation

GitHub Actions / YAML Syntax Check

262:121 [line-length] line too long (257 > 120 characters)
AzureStorage__ConnectionString: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;"

Check warning on line 263 in .github/workflows/pr-validation.yml

View workflow job for this annotation

GitHub Actions / YAML Syntax Check

263:121 [line-length] line too long (256 > 120 characters)
# Map connection strings to .NET configuration using double underscore
ConnectionStrings__DefaultConnection: ${{ steps.db.outputs.connection-string }}
ConnectionStrings__Users: ${{ steps.db.outputs.connection-string }}
Expand Down Expand Up @@ -467,7 +467,7 @@
find ./coverage -type f \( -name "*.opencover.xml" -o -name "*.cobertura.xml" \) | wc -l
echo ""
echo "Coverage files by module:"
find ./coverage -type f \( -name "*.opencover.xml" -o -name "*.cobertura.xml" \) -printf "%f\n" | sort | head -20

Check warning on line 470 in .github/workflows/pr-validation.yml

View workflow job for this annotation

GitHub Actions / YAML Syntax Check

470:121 [line-length] line too long (123 > 120 characters)
echo ""

echo "🔍 DEBUG: Verifying coverage files for CodeCoverageSummary..."
Expand Down Expand Up @@ -528,75 +528,24 @@
echo "Running Blazor WASM component tests with bUnit framework"
echo "Target: MeAjudaAi.Web.Admin (Blazor Admin Portal)"
echo ""

# Source shared utility functions for coverage
RUNSETTINGS_SCRIPT="./.github/scripts/generate-runsettings.sh"
if [ ! -f "$RUNSETTINGS_SCRIPT" ] || [ ! -r "$RUNSETTINGS_SCRIPT" ]; then
echo "❌ ERROR: Required script not found: $RUNSETTINGS_SCRIPT"
exit 1
fi
if ! source "$RUNSETTINGS_SCRIPT"; then
echo "❌ ERROR: Failed to source $RUNSETTINGS_SCRIPT"
exit 1
fi

# Create output directory for frontend tests
FRONTEND_COVERAGE_DIR="./coverage/webadmin"
mkdir -p "$FRONTEND_COVERAGE_DIR"

# Define coverage filters for Blazor WASM
INCLUDE_FILTER="[MeAjudaAi.Web.Admin]*"
EXCLUDE_FILTER="[*.Tests*]*,[testhost]*"
EXCLUDE_BY_FILE="**/*.g.cs,**/*.razor.g.cs,**/obj/**,**/bin/**,**/wwwroot/**"
EXCLUDE_BY_ATTRIBUTE="Obsolete,GeneratedCode,CompilerGenerated"

echo " Include: $INCLUDE_FILTER"
echo " Exclude: $EXCLUDE_FILTER"
echo " ExcludeByFile: $EXCLUDE_BY_FILE"
echo "⚠️ Note: Coverage NOT collected for Blazor WASM (unreliable due to generated code)"
echo "Focus: Maximum test coverage of components, not code coverage metrics"
echo ""

# Create runsettings file for frontend tests
FRONTEND_RUNSETTINGS="/tmp/webadmin.runsettings"
generate_runsettings \
"$FRONTEND_RUNSETTINGS" \
"$EXCLUDE_FILTER" \
"$EXCLUDE_BY_FILE" \
"$EXCLUDE_BY_ATTRIBUTE" \
"$INCLUDE_FILTER"

echo "▶️ Running Web.Admin component tests (Providers, Dashboard, DarkMode)..."
dotnet test tests/MeAjudaAi.Web.Admin.Tests/MeAjudaAi.Web.Admin.Tests.csproj \
--configuration Release \
--no-restore \
--no-build \
--verbosity normal \
--collect:"XPlat Code Coverage" \
--results-directory "$FRONTEND_COVERAGE_DIR" \
--logger "trx;LogFileName=webadmin-test-results.trx" \
--settings "$FRONTEND_RUNSETTINGS"
--logger "trx;LogFileName=webadmin-test-results.trx"

FRONTEND_EXIT_CODE=$?
if [ $FRONTEND_EXIT_CODE -ne 0 ]; then
echo "❌ Frontend component tests failed with exit code $FRONTEND_EXIT_CODE"
exit $FRONTEND_EXIT_CODE
fi

# Find and rename coverage file
COVERAGE_FILE=$(find "$FRONTEND_COVERAGE_DIR" -type f \
\( -name "coverage.opencover.xml" -o -name "coverage.cobertura.xml" \) \
-print -quit)

if [ -f "$COVERAGE_FILE" ]; then
echo "✅ Found coverage file: $COVERAGE_FILE"
if [[ "$COVERAGE_FILE" == *"cobertura"* ]]; then
cp "$COVERAGE_FILE" "$FRONTEND_COVERAGE_DIR/webadmin.cobertura.xml"
else
cp "$COVERAGE_FILE" "$FRONTEND_COVERAGE_DIR/webadmin.opencover.xml"
fi
else
echo "⚠️ Coverage file not found - coverage data may be incomplete"
fi

echo ""
echo "✅ Frontend component tests completed successfully"
echo "===================================="
Expand Down Expand Up @@ -820,14 +769,15 @@
env:
DOTNET_ROOT: ${{ env.DOTNET_ROOT }}
with:
reports: 'coverage/users/*.opencover.xml;coverage/providers/*.opencover.xml;coverage/documents/*.opencover.xml;coverage/servicecatalogs/*.opencover.xml;coverage/locations/*.opencover.xml;coverage/searchproviders/*.opencover.xml;coverage/shared/*.opencover.xml;coverage/apiservice/*.opencover.xml;coverage/webadmin/*.opencover.xml;coverage/integration/**/*.xml;coverage/e2e/**/*.xml'
reports: 'coverage/users/*.opencover.xml;coverage/providers/*.opencover.xml;coverage/documents/*.opencover.xml;coverage/servicecatalogs/*.opencover.xml;coverage/locations/*.opencover.xml;coverage/searchproviders/*.opencover.xml;coverage/shared/*.opencover.xml;coverage/apiservice/*.opencover.xml;coverage/integration/**/*.xml;coverage/e2e/**/*.xml'
targetdir: 'coverage/aggregate'
reporttypes: 'Cobertura;JsonSummary'
assemblyfilters: '+MeAjudaAi.Modules.Users.*;+MeAjudaAi.Modules.Providers.*;+MeAjudaAi.Modules.Documents.*;+MeAjudaAi.Modules.ServiceCatalogs.*;+MeAjudaAi.Modules.Locations.*;+MeAjudaAi.Modules.SearchProviders.*;+MeAjudaAi.Shared*;+MeAjudaAi.ApiService*;+MeAjudaAi.Web.Admin*'
assemblyfilters: '+MeAjudaAi.Modules.Users.*;+MeAjudaAi.Modules.Providers.*;+MeAjudaAi.Modules.Documents.*;+MeAjudaAi.Modules.ServiceCatalogs.*;+MeAjudaAi.Modules.Locations.*;+MeAjudaAi.Modules.SearchProviders.*;+MeAjudaAi.Shared*;+MeAjudaAi.ApiService*'
classfilters: '-*.Tests;-*.Tests.*;-*Test*;-testhost;-xunit*;-*.Migrations.*;-*.Contracts;-*.Database;-*DbContextFactory;-*.Program;-*.Keycloak.*;-*.Monitoring.*;-*NoOp*;-*RabbitMq*;-*ServiceBus*;-*Hangfire*;-*.Jobs.*;-*Options;-*BaseDesignTimeDbContextFactory*;-*SchemaPermissionsManager;-*SimpleHostEnvironment;-*CacheWarmupService;-*GeoPointConverter;-*ModuleNames;-*ModuleApiInfo;-*MessagingExtensions;-*ICacheableQuery'
filefilters: '-*Migrations*'
verbosity: 'Info'
tag: '${{ github.run_number }}_${{ github.run_id }}'
# Note: Backend coverage only. Frontend bUnit tests run separately without coverage (unreliable for Blazor WASM).

- name: Display coverage summary
run: |
Expand Down
7 changes: 6 additions & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,12 @@
<PackageVersion Include="Aspire.Hosting.Keycloak" Version="13.1.0-preview.1.25616.3" />
<PackageVersion Include="Aspire.Hosting.PostgreSQL" Version="13.1.0" />
<PackageVersion Include="Aspire.Hosting.RabbitMQ" Version="13.1.0" />
<PackageVersion Include="Aspire.Hosting.Redis" Version="13.1.0" />
<!-- Aspire.Hosting.Redis: DOWNGRADE para 13.0.2 devido a bug em 13.1.0 -->
<!-- 13.1.0 força configuração TLS (rediss://) causando erros de health check -->
<!-- Health check tenta conexão TCP sem TLS mas container espera SSL handshake -->
<!-- Erro observado: "An error occurred while writing to logger(s). (SSL Handshake failed)" -->
<!-- Monitorar: https://github.com/dotnet/aspire/issues para issue sobre Redis TLS em desenvolvimento -->
<PackageVersion Include="Aspire.Hosting.Redis" Version="13.0.2" />
<PackageVersion Include="Aspire.Hosting.Seq" Version="13.1.0" />
<PackageVersion Include="Aspire.Npgsql" Version="13.1.0" />
<PackageVersion Include="Aspire.StackExchange.Redis" Version="13.0.2" />
Expand Down
1 change: 1 addition & 0 deletions MeAjudaAi.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -131,5 +131,6 @@
<Project Path="tests/MeAjudaAi.E2E.Tests/MeAjudaAi.E2E.Tests.csproj" />
<Project Path="tests/MeAjudaAi.Integration.Tests/MeAjudaAi.Integration.Tests.csproj" />
<Project Path="tests/MeAjudaAi.Shared.Tests/MeAjudaAi.Shared.Tests.csproj" />
<Project Path="tests/MeAjudaAi.Web.Admin.Tests/MeAjudaAi.Web.Admin.Tests.csproj" />
</Folder>
</Solution>
Loading
Loading