Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
d88aa20
docs: add Communications module to Sprint 9 roadmap
Apr 8, 2026
c393f06
docs: add roadmap-current.md detailing frontend stack, project struct…
Apr 8, 2026
dfc930d
test: add integration tests for modules and unit tests for module con…
Apr 8, 2026
e61a444
feat: implement initial structure and core services for the Communica…
Apr 9, 2026
509cce1
feat(communications): initial infrastructure, outbox pattern and inte…
Apr 9, 2026
bb422c3
fix(communications): apply review findings - domain validation, outbo…
Apr 9, 2026
8dbdd73
feat: implement outbox processor service with integration event handl…
Apr 9, 2026
530a599
feat(communications,search-providers): apply review findings and impl…
Apr 9, 2026
710f48f
fix(communications): apply final block A review findings - stuck mess…
Apr 9, 2026
57b00ee
feat(search-providers): implement E2E tests and fix communications re…
Apr 9, 2026
0677892
fix(integration-tests): fix base test seeding and migration flow, app…
Apr 9, 2026
750e728
fix(communications,search-providers): apply review findings, fix enum…
Apr 9, 2026
d960612
feat(security): implement security hardening - rate limiting, securit…
Apr 9, 2026
742447a
fix(communications,integration-tests): apply final review findings - …
Apr 9, 2026
5793ae5
fix(communications,integration-tests): apply final review findings, f…
Apr 9, 2026
a578cab
fix(tests): stabilize E2E and integration tests with reliable migrati…
Apr 9, 2026
1be1325
feat: add roadmap documentation, security headers middleware, email r…
Apr 9, 2026
0690da9
feat: implement base integration test infrastructure and add initial …
Apr 9, 2026
43ad872
feat: implement SecurityHeadersMiddleware and establish base integrat…
Apr 9, 2026
429e1ae
feat: implement API service bootstrap, base database context with dom…
Apr 10, 2026
06faca7
feat: implement security headers middleware and add E2E search provid…
Apr 10, 2026
1449918
test: add unit tests for SecurityHeadersMiddleware to verify header i…
Apr 10, 2026
960c36e
feat: implement security headers middleware and add communications mo…
Apr 10, 2026
d427091
feat: implement snake case naming strategy, add security headers midd…
Apr 10, 2026
dc47794
chore: initialize dependency lock files for test projects
Apr 10, 2026
c63ff64
feat: implement CEP lookup infrastructure with multi-provider support…
Apr 10, 2026
24d9026
test: add integration tests for CEP provider fallback and failure sce…
Apr 10, 2026
ef2cadc
feat: add CI pipeline for backend build and test automation
Apr 10, 2026
cf5cf36
feat: implement address domain model and CEP lookup service with mult…
Apr 11, 2026
e7bf2b1
test: add integration tests for CEP provider fallback mechanisms and …
Apr 11, 2026
2a0ba20
test: fix CEP integration tests and enable full parallelism with isol…
Apr 11, 2026
0725aae
test(communications): improve test coverage for Application and Domai…
Apr 11, 2026
14a686f
fix(ci): add Communications.Tests to solution and fix assembly name
Apr 12, 2026
8f571a1
refactor: address code review findings and improve Communications module
Apr 12, 2026
efa8df2
feat(shared): generalize outbox pattern and update roadmap
Apr 12, 2026
67613db
fix(communications): add migration for generic outbox type column
Apr 12, 2026
9db5565
refactor: address second code review and improve system robustness
Apr 12, 2026
75f2bf3
feat(sprint9): finalize technical debt and security hardening
Apr 12, 2026
2c81974
refactor: address final code review findings and enhance system resil…
Apr 12, 2026
c37de27
fix(communications): enable stubs by default in appsettings to avoid …
Apr 12, 2026
31970fa
fix(communications): default EnableStubs to true if not configured to…
Apr 12, 2026
8d52bd5
refactor: address second code review and fix failing unit test
Apr 12, 2026
c221691
fix(shared): restore explicit message.MarkAsProcessing() in OutboxPro…
Apr 12, 2026
a61b99d
fix(security): enhance antiforgery issuance and fix integration tests
Apr 12, 2026
3fb4cdb
fix(security): resolve middleware regression and stabilize E2E tests
Apr 12, 2026
0cf039f
fix(monitoring): ensure metric isolation in tests and finalize roadma…
Apr 12, 2026
35359a6
fix(integration): stabilize compression security tests and address re…
Apr 13, 2026
01bfe01
fix(unit): fix build error in CompressionSecurityMiddlewareTests
Apr 13, 2026
1edfe8f
fix(test): stabilize users integration tests and finalize translations
Apr 13, 2026
38aa1da
fix(security): prevent middleware short-circuiting during antiforgery…
Apr 13, 2026
26f8196
refactor: finalize code review findings and stabilize all test suites
Apr 13, 2026
7590142
fix(tests): ensure unique usernames and emails in UserRepositoryInteg…
Apr 13, 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
49 changes: 25 additions & 24 deletions .github/workflows/ci-backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ jobs:
- name: Wait for PostgreSQL
shell: bash
run: |
max_attempts=30
max_attempts=60
attempt=0
until pg_isready -h localhost -p 5432 -U "$POSTGRES_USER"; do
attempt=$((attempt + 1))
Expand All @@ -147,25 +147,8 @@ jobs:
postgres-user: ${{ env.POSTGRES_USER }}
postgres-password: ${{ env.POSTGRES_PASSWORD }}

- name: Wait for PostgreSQL
shell: bash
run: |
max_attempts=60
attempt=0
until pg_isready -h localhost -p 5432 -U "$POSTGRES_USER"; do
attempt=$((attempt + 1))
if [ $attempt -ge $max_attempts ]; then
echo "ERROR: PostgreSQL did not become ready after $max_attempts attempts"
exit 1
fi
echo "Waiting for PostgreSQL... (attempt $attempt/$max_attempts)"
sleep 2
done
echo "PostgreSQL is ready"

- name: Run Unit Tests with Coverage
id: unit-tests
continue-on-error: true
env:
ASPNETCORE_ENVIRONMENT: Testing
MEAJUDAAI_DB_PASS: ${{ env.POSTGRES_PASSWORD }}
Expand All @@ -188,6 +171,7 @@ jobs:
"src/Modules/Documents/Tests/MeAjudaAi.Modules.Documents.Tests.csproj"
"src/Modules/ServiceCatalogs/Tests/MeAjudaAi.Modules.ServiceCatalogs.Tests.csproj"
"src/Modules/Locations/Tests/MeAjudaAi.Modules.Locations.Tests.csproj"
"src/Modules/Communications/Tests/MeAjudaAi.Modules.Communications.Tests.csproj"
"src/Modules/SearchProviders/Tests/MeAjudaAi.Modules.SearchProviders.Tests.csproj"
"tests/MeAjudaAi.Shared.Tests/MeAjudaAi.Shared.Tests.csproj"
"tests/MeAjudaAi.ApiService.Tests/MeAjudaAi.ApiService.Tests.csproj"
Expand All @@ -207,7 +191,8 @@ jobs:

- name: Run Integration Tests
id: integration-tests
continue-on-error: true
if: success()
timeout-minutes: 45
env:
ASPNETCORE_ENVIRONMENT: Testing
INTEGRATION_TESTS: true
Expand All @@ -220,18 +205,33 @@ jobs:
ConnectionStrings__meajudaai-db: ${{ steps.db.outputs.connection-string }}
AZURE_STORAGE_CONNECTION_STRING: "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;"
run: |
echo "🚀 Running Integration Tests (expected duration ~40m)..."
echo "🚀 Running Integration Tests..."
dotnet test tests/MeAjudaAi.Integration.Tests/MeAjudaAi.Integration.Tests.csproj \
--configuration Release --no-build \
--collect:"XPlat Code Coverage" \
--results-directory ./coverage/integration \
--settings ./coverlet.runsettings \
--blame-hang-timeout 10min \
--verbosity normal

- name: Check test results
if: always()
run: |
if [[ "${{ steps.unit-tests.outcome }}" == "failure" ]]; then
echo "❌ Unit tests failed."
exit 1
fi
if [[ "${{ steps.integration-tests.outcome }}" == "failure" ]]; then
echo "❌ Integration tests failed."
exit 1
fi
echo "✅ All tests passed."

- name: Collect and aggregate coverage files
if: always()
run: |
mkdir -p ./coverage/aggregate
# Use mapfile for robust array handling (avoids subshell issue with pipe|while)
# Coleta de unitários, integração e retry
mapfile -t coverage_files < <(find ./coverage -type f -name "coverage.cobertura.xml")

counter=0
Expand All @@ -249,11 +249,13 @@ jobs:
fi

- name: Configure DOTNET_ROOT for ReportGenerator
if: always()
run: |
DOTNET_PATH="$(which dotnet)"
echo "DOTNET_ROOT=$(dirname "$(readlink -f "$DOTNET_PATH")")" >> $GITHUB_ENV

- name: Generate aggregated coverage report
if: always()
uses: danielpalme/ReportGenerator-GitHub-Action@5
with:
reports: "coverage/aggregate/**/*.cobertura.xml"
Expand All @@ -272,6 +274,7 @@ jobs:

- name: Code Coverage Summary
uses: irongut/CodeCoverageSummary@v1.3.0
if: always()
with:
filename: "coverage/final_report/Cobertura.xml"
badge: true
Expand All @@ -282,7 +285,7 @@ jobs:

- name: Add Coverage PR Comment
uses: marocchino/sticky-pull-request-comment@v3
if: github.event_name == 'pull_request'
if: always() && github.event_name == 'pull_request'
with:
recreate: true
header: coverage-report
Expand All @@ -305,8 +308,6 @@ jobs:
cat security-audit-report.txt
- name: Verify No Critical Direct Vulnerabilities
run: |
# Parse output to find if there are critical vulnerabilities in direct dependencies
# We check the top-level references specifically. A basic scan verifies if "Critical" shows up without being in a Transitive block, or simply checks top-level explicitly.
dotnet list package --vulnerable > direct-security-audit.txt
if grep -qi "Critical" direct-security-audit.txt; then
echo "Critical direct vulnerabilities found!"
Expand Down
16 changes: 16 additions & 0 deletions MeAjudaAi.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,22 @@
<Project Path="src/Client/MeAjudaAi.Client.Contracts/MeAjudaAi.Client.Contracts.csproj" />
</Folder>
<Folder Name="/src/Modules/" />
<Folder Name="/src/Modules/Communications/" />
<Folder Name="/src/Modules/Communications/API/">
<Project Path="src/Modules/Communications/API/MeAjudaAi.Modules.Communications.API.csproj" />
</Folder>
<Folder Name="/src/Modules/Communications/Application/">
<Project Path="src/Modules/Communications/Application/MeAjudaAi.Modules.Communications.Application.csproj" />
</Folder>
<Folder Name="/src/Modules/Communications/Domain/">
<Project Path="src/Modules/Communications/Domain/MeAjudaAi.Modules.Communications.Domain.csproj" />
</Folder>
<Folder Name="/src/Modules/Communications/Infrastructure/">
<Project Path="src/Modules/Communications/Infrastructure/MeAjudaAi.Modules.Communications.Infrastructure.csproj" />
</Folder>
<Folder Name="/src/Modules/Communications/Tests/">
<Project Path="src/Modules/Communications/Tests/MeAjudaAi.Modules.Communications.Tests.csproj" />
</Folder>
<Folder Name="/src/Modules/Documents/" />
<Folder Name="/src/Modules/Documents/API/">
<Project Path="src/Modules/Documents/API/MeAjudaAi.Modules.Documents.API.csproj" />
Expand Down
Loading
Loading