Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
52e275d
up
rezwana-karim Nov 13, 2025
a633005
up
rezwana-karim Nov 13, 2025
5e73cc5
Up
rezwana-karim Nov 13, 2025
330d6c2
up
rezwana-karim Nov 13, 2025
ec910b5
up
rezwana-karim Nov 13, 2025
bcd25e9
up
rezwana-karim Nov 13, 2025
83255c3
plan
rezwana-karim Nov 13, 2025
aecd324
tasks
rezwana-karim Nov 13, 2025
6b14dfa
up
rezwana-karim Nov 13, 2025
2aae3f1
API
rezwana-karim Nov 13, 2025
ead0fae
Updated
rezwana-karim Nov 13, 2025
f28a305
up
rezwana-karim Nov 13, 2025
0440189
up
rezwana-karim Nov 13, 2025
a3522cb
Tests
rezwana-karim Nov 13, 2025
aa7df57
up
rezwana-karim Nov 13, 2025
35e1bc4
hii
rafiqul4 Nov 14, 2025
b54d911
hiii
rafiqul4 Nov 14, 2025
8b84e1b
hi
rafiqul4 Nov 14, 2025
64a7c65
hi
rafiqul4 Nov 14, 2025
47f128c
hi
rafiqul4 Nov 14, 2025
79e8ac5
hhuu
rafiqul4 Nov 14, 2025
0eb63a5
uppp
rafiqul4 Nov 14, 2025
c21d34d
fff
rafiqul4 Nov 14, 2025
d692b0e
ffff
rafiqul4 Nov 14, 2025
a52d245
upp
rafiqul4 Nov 14, 2025
dcc6f5f
hhh
rafiqul4 Nov 14, 2025
23f7b1d
up
rafiqul4 Nov 14, 2025
943f4ee
uppp
rafiqul4 Nov 14, 2025
dd633d3
upp
rafiqul4 Nov 14, 2025
ea4c479
up
rafiqul4 Nov 14, 2025
6db2c3f
up
rafiqul4 Nov 14, 2025
01d1878
upp
rafiqul4 Nov 14, 2025
361dc9f
Add export job status API endpoint
rafiqul4 Nov 14, 2025
eeb35b6
upp
rafiqul4 Nov 14, 2025
f45f1ef
upp
rafiqul4 Nov 14, 2025
feba3cc
upp
rafiqul4 Nov 14, 2025
96f9455
uo
rafiqul4 Nov 14, 2025
05df87b
up
rafiqul4 Nov 14, 2025
d698f7f
up
rafiqul4 Nov 14, 2025
267079f
up
rafiqul4 Nov 14, 2025
063c402
up
rafiqul4 Nov 14, 2025
4a52c82
up
rafiqul4 Nov 14, 2025
1768c85
upp
rafiqul4 Nov 14, 2025
2628285
up
rafiqul4 Nov 14, 2025
45e7853
fix: ESM compatibility and Node memory limits for Vitest
rafiqul4 Nov 14, 2025
ae1755e
uppp
rafiqul4 Nov 14, 2025
bb631e4
up
rafiqul4 Nov 14, 2025
9e92e0c
upp
rafiqul4 Nov 14, 2025
7e92a0d
Add REST audit script and payment robustness docs
rafiqul4 Nov 14, 2025
2d138ab
up
rafiqul4 Nov 14, 2025
e48041d
up
rafiqul4 Nov 14, 2025
75f922e
up
rafiqul4 Nov 14, 2025
32ad47d
Add response format standardization summary
rafiqul4 Nov 14, 2025
82409b3
up
rafiqul4 Nov 14, 2025
719ed09
up
rafiqul4 Nov 14, 2025
e94d025
up
rafiqul4 Nov 14, 2025
da7cc98
up
rafiqul4 Nov 14, 2025
838ae15
chore: Mark T042 REST audit as complete
rafiqul4 Nov 14, 2025
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
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# StormCom - Copilot Agent Onboarding
ο»Ώ# StormCom - Copilot Agent Onboarding

**Multi-tenant e-commerce SaaS platform: Next.js 16, TypeScript 5.9.3, Prisma ORM, React 19 Server Components**

Expand Down
59 changes: 59 additions & 0 deletions .github/workflows/api-integration-gate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: API Integration Gate

on:
pull_request:
branches:
- main
- '002-harden-checkout-tenancy'
push:
branches:
- '002-harden-checkout-tenancy'

jobs:
api-integration-gate:
runs-on: ubuntu-latest
env:
DATABASE_URL: file:./prisma/dev.db
NEXTAUTH_SECRET: test_ci_secret_change_me
NEXTAUTH_URL: http://localhost:3000
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: |
npm install --no-audit --no-fund

- name: Create .env for CI
run: |
printf "DATABASE_URL=file:./prisma/dev.db\n" > .env
printf "NEXTAUTH_SECRET=${NEXTAUTH_SECRET}\n" >> .env
printf "NEXTAUTH_URL=${NEXTAUTH_URL}\n" >> .env

- name: Prisma generate & db push (SQLite dev)
run: |
npx prisma generate
npx prisma db push

- name: Type check
run: |
npm run type-check || (echo 'Type-check failed' && exit 1)

- name: API route integration test coverage gate
run: |
node scripts/check-api-integration-tests.mjs

- name: Run integration test suite
run: |
npx vitest run --config vitest.integration.config.ts --reporter verbose

- name: Summary
if: always()
run: |
echo "API integration gate completed"
108 changes: 108 additions & 0 deletions .github/workflows/api-integration-test-coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: API Integration Test Coverage Enforcement

on:
pull_request:
paths:
- 'src/app/api/**/route.ts'
- 'tests/integration/**/*.spec.ts'
push:
branches:
- main
- develop
paths:
- 'src/app/api/**/route.ts'
- 'tests/integration/**/*.spec.ts'

jobs:
api-test-coverage:
name: Enforce 100% API Route Test Coverage
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Check API integration test coverage
id: coverage_check
shell: pwsh
run: |
$result = & .\scripts\audit-api-test-coverage.ps1 -OutputJson | ConvertFrom-Json

if ($result.UntestedRoutes -gt 0) {
Write-Host "::error::$($result.UntestedRoutes) API routes are missing integration tests"
Write-Host "::error::Coverage: $($result.CoveragePercent)% (required: 100%)"

foreach ($route in $result.RouteDetails) {
if (-not $route.HasTest) {
Write-Host "::error file=$($route.FilePath)::Missing integration test for $($route.Route)"
}
}

exit 1
}

Write-Host "::notice::All $($result.TotalRoutes) API routes have integration tests"
Write-Host "Coverage: $($result.CoveragePercent)%"

- name: Comment PR with coverage results
if: github.event_name == 'pull_request' && always()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const { execSync } = require('child_process');

// Run audit script and get JSON output
const output = execSync('pwsh -Command "& .\\scripts\\audit-api-test-coverage.ps1 -OutputJson"', {
encoding: 'utf-8',
cwd: process.env.GITHUB_WORKSPACE
});

const result = JSON.parse(output);

let comment = `## πŸ§ͺ API Integration Test Coverage\n\n`;
comment += `- **Total API Routes**: ${result.TotalRoutes}\n`;
comment += `- **Tested Routes**: ${result.TestedRoutes}\n`;
comment += `- **Coverage**: ${result.CoveragePercent}%\n\n`;

if (result.UntestedRoutes > 0) {
comment += `### ❌ ${result.UntestedRoutes} Routes Missing Tests\n\n`;
comment += `| Route | File Path | Recommended Test Path |\n`;
comment += `|-------|-----------|----------------------|\n`;

for (const route of result.RouteDetails) {
if (!route.HasTest) {
const testPath = `tests/integration/${route.Route}/route.spec.ts`;
comment += `| \`${route.Route}\` | ${route.FilePath} | ${testPath} |\n`;
}
}

comment += `\n⚠️ **Action Required**: Add integration tests for all API routes before merging.\n`;
} else {
comment += `### βœ… All API routes have integration tests!\n`;
}

github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
});

- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v4
with:
name: api-test-coverage-report
path: |
scripts/audit-api-test-coverage.ps1
retention-days: 30
7 changes: 3 additions & 4 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,10 @@ jobs:
steps:
- name: πŸ“’ Send Slack notification
uses: slackapi/slack-github-action@v1
continue-on-error: true
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
with:
webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
webhook-type: incoming-webhook
payload: |
{
"text": "❌ E2E Tests Failed",
Expand All @@ -143,8 +144,6 @@ jobs:
}
]
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

comment:
name: Comment Test Results
Expand Down
Loading
Loading