mirror of
https://github.com/blackboxprogramming/BlackRoad-Operating-System.git
synced 2026-03-17 05:57:21 -05:00
Add backend test helper and fix compliance event metadata
This commit is contained in:
22
README.md
22
README.md
@@ -96,6 +96,28 @@ the validation and deploy jobs keep pointing at the same file.
|
|||||||
- **Manual check** – run `python scripts/railway/validate_env_template.py`
|
- **Manual check** – run `python scripts/railway/validate_env_template.py`
|
||||||
locally to get the same assurance before pushing.
|
locally to get the same assurance before pushing.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Backend tests run against an isolated SQLite database by default. A helper
|
||||||
|
script bootstraps a virtual environment, installs dependencies, and executes
|
||||||
|
pytest with sensible defaults for local development.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# From the repo root
|
||||||
|
bash scripts/run_backend_tests.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
The script exports `ENVIRONMENT=testing`, points `TEST_DATABASE_URL` to a local
|
||||||
|
`test.db` SQLite file (override it to point at Postgres if needed), and sets
|
||||||
|
`ALLOWED_ORIGINS` so CORS validation passes during the suite. To rerun tests
|
||||||
|
inside the prepared environment manually:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd backend
|
||||||
|
source .venv-tests/bin/activate
|
||||||
|
pytest -v --maxfail=1
|
||||||
|
```
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
### Single-Page Application
|
### Single-Page Application
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class ComplianceEvent(Base):
|
|||||||
actor = Column(String(255))
|
actor = Column(String(255))
|
||||||
action = Column(String(255))
|
action = Column(String(255))
|
||||||
resource = Column(String(255))
|
resource = Column(String(255))
|
||||||
metadata = Column(JSON, default=dict)
|
event_metadata = Column("metadata", JSON, default=dict)
|
||||||
severity = Column(String(50), default="info")
|
severity = Column(String(50), default="info")
|
||||||
timestamp = Column(DateTime(timezone=True), server_default=func.now())
|
timestamp = Column(DateTime(timezone=True), server_default=func.now())
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ from typing import List
|
|||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
from app.auth import get_current_active_user
|
from app.auth import get_current_active_user
|
||||||
from app.database import get_db
|
from app.database import get_db
|
||||||
@@ -19,10 +19,11 @@ class ComplianceEventResponse(BaseModel):
|
|||||||
action: str
|
action: str
|
||||||
resource: str
|
resource: str
|
||||||
severity: str
|
severity: str
|
||||||
metadata: dict | None = None
|
metadata: dict | None = Field(default=None, alias="event_metadata")
|
||||||
timestamp: str | None = None
|
timestamp: str | None = None
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
|
populate_by_name = True
|
||||||
from_attributes = True
|
from_attributes = True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
27
scripts/run_backend_tests.sh
Executable file
27
scripts/run_backend_tests.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Automated helper to install backend test dependencies and execute pytest
|
||||||
|
# using a lightweight SQLite database. This is intended for local development
|
||||||
|
# and CI smoke checks.
|
||||||
|
|
||||||
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
BACKEND_DIR="$ROOT_DIR/backend"
|
||||||
|
VENV_DIR="$BACKEND_DIR/.venv-tests"
|
||||||
|
|
||||||
|
cd "$BACKEND_DIR"
|
||||||
|
|
||||||
|
if [[ ! -d "$VENV_DIR" ]]; then
|
||||||
|
python -m venv "$VENV_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
source "$VENV_DIR/bin/activate"
|
||||||
|
|
||||||
|
pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
export TEST_DATABASE_URL="${TEST_DATABASE_URL:-sqlite+aiosqlite:///./test.db}"
|
||||||
|
export ENVIRONMENT="${ENVIRONMENT:-testing}"
|
||||||
|
export ALLOWED_ORIGINS="${ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:8000}"
|
||||||
|
|
||||||
|
pytest -v --maxfail=1
|
||||||
Reference in New Issue
Block a user