- .forgejo/workflows/ci.yml: four jobs (lint, test, validate-json, markdown-links) running on push to main and on pull requests - pyproject.toml: project metadata, flask dep, dev extras (ruff, pytest), ruff config (E/F/I/W/B/UP rulesets, 100-char lines, py311 target), pytest config (pythonpath=webinstaller so tests can import drives) - tests/test_drives.py: 11 unit tests covering parse_size_gb (TB/GB/MB, European comma decimal, empty input, unknown units), drive type scoring (nvme/ssd/hdd), size scoring bands, and score_device summing - .gitignore: ignore .pytest_cache, *.egg-info, .ruff_cache - webinstaller/drives.py: refactor subprocess.run to capture_output kwarg (ruff UP022) — drops four lines, same behavior - webinstaller/app.py: ruff-sorted imports (isort) All checks pass locally: ruff check + format, pytest 11/11, JSON valid. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
from drives import (
|
|
get_drive_type_score,
|
|
get_size_score,
|
|
parse_size_gb,
|
|
score_device,
|
|
)
|
|
|
|
|
|
def test_parse_size_gb_terabytes():
|
|
assert parse_size_gb("1T") == 1024.0
|
|
|
|
|
|
def test_parse_size_gb_gigabytes():
|
|
assert parse_size_gb("500G") == 500.0
|
|
|
|
|
|
def test_parse_size_gb_megabytes():
|
|
assert parse_size_gb("2048M") == 2.0
|
|
|
|
|
|
def test_parse_size_gb_european_comma_decimal():
|
|
assert parse_size_gb("1,5T") == 1.5 * 1024
|
|
|
|
|
|
def test_parse_size_gb_empty_returns_none():
|
|
assert parse_size_gb("") is None
|
|
|
|
|
|
def test_parse_size_gb_unknown_unit_returns_none():
|
|
assert parse_size_gb("500K") is None
|
|
|
|
|
|
def test_drive_type_score_nvme():
|
|
assert get_drive_type_score("/dev/nvme0n1") == 15
|
|
|
|
|
|
def test_drive_type_score_ssd():
|
|
assert get_drive_type_score("/dev/ssd0") == 10
|
|
|
|
|
|
def test_drive_type_score_hdd_fallback():
|
|
assert get_drive_type_score("/dev/sda") == 5
|
|
|
|
|
|
def test_size_score_bands():
|
|
assert get_size_score(None) == 5
|
|
assert get_size_score(64) == 5
|
|
assert get_size_score(256) == 7
|
|
assert get_size_score(1024) == 10
|
|
|
|
|
|
def test_score_device_sums_type_and_size(monkeypatch):
|
|
import drives
|
|
|
|
monkeypatch.setattr(drives, "get_drive_health", lambda _: 10)
|
|
assert score_device("/dev/nvme0n1", 1024) == 15 + 10 + 10
|
|
assert score_device("/dev/sda", 64) == 5 + 10 + 5
|