Files
ServerKit/backend/tests/test_backup_expectations.py
Juan DenisandClaude Opus 4.8 63ede5fe46 test(recovery): restore 18 lost proving-test suites from pyc trove (plan 42 ph1)
Re-arm the proving surface the data loss silently took: 18 backend test
files reconstructed from winfr-carved .pyc fragments (marshal+dis extractor
for clean pycs; string-salvage + surviving-source reconstruction for
fragmented ones). Restores coverage for backup drills/offsite (plan 30),
fleet sweep + fleet-doctor DNS + DNS cutover + ssh import + observe
enforcement (plans 26/31), survey catalog/api + setup security + workspace
scoping (plans 28/22/19), and sdk contract + cron preview + notification
prefs + runtime frontend (plans 32/25/34/24).

Where a restored test proved its feature HOLLOW (code died with its test),
the affected cases are @pytest.mark.skip(reason="plan 42: ...") naming the
exact missing symbol, so the canary stays green while flagging the gap for a
named follow-up. Full suite: 2373 passed, 56 skipped, 0 failed; collected
2322 -> 2429. test_gpu dropped as redundant (coverage survives in
test_gpu_extension.py post core-slim).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 04:41:00 -04:00

50 lines
2.0 KiB
Python

"""Plan 30 Phase 2 — expectations captured at backup time, compared at drill.
Covers the writer (`_collect_expectations` for DB + file targets), the
manifest round-trip, and the drill-side comparison upgrades (table-count match,
row-count drift on the largest tables, extracted-file count).
NOTE (plan 42 recovery): the whole ``_collect_expectations`` writer + its
manifest round-trip and drill-side comparison upgrades were lost with the tests
— ``app.services.backup_verify_service._collect_expectations`` does not exist in
the recovered tree. The reconstructed test below is kept faithful to the salvage
but skipped as a hollow-feature marker; restore is owned by plan 42.
"""
import io
import tarfile
import pytest
from app import db # noqa: F401 (kept for parity with the original module)
def _tar_gz(dest, files):
with tarfile.open(dest, 'w:gz') as tar:
for name, content in files.items():
data = io.BytesIO(content)
info = tarfile.TarInfo(name)
info.size = len(content)
tar.addfile(info, data)
@pytest.mark.skip(reason="plan 42: hollow feature — backup_verify_service._collect_expectations "
"(backup-time DB/file expectation capture, plan 30 Phase 2) is absent "
"from the recovered tree; restored by plan 42")
def test_db_expectations_capture(app, monkeypatch):
from app.services.database_service import DatabaseService
from app.services import backup_verify_service
def _mysql_get_tables(name, **kws):
return [{'name': 'wp_posts', 'rows': 10}, {'name': 'wp_users', 'rows': 3}]
monkeypatch.setattr(DatabaseService, 'mysql_get_tables',
staticmethod(_mysql_get_tables))
with app.app_context():
target = {'target_type': 'database',
'db_config': {'db_type': 'mysql', 'db_name': 'shop'}}
exp = backup_verify_service._collect_expectations(target)
assert exp['table_count'] == 2
assert 'tables' in exp
assert 'row_counts' in exp