import json
from pathlib import Path
import sys
import tempfile
import unittest
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from fleet_cycle import report
class FleetCycleEvidenceTests(unittest.TestCase):
def test_assignments_empty_returns_and_old_pickups_are_not_completed_cycles(self):
def miner(identity, ore=0, connected=False, blocks=85):
return dict(id=identity, name=identity, state="Servicing" if connected else "Transit",
sourceSha256="verified-source", jobId="assigned-task", cargoOres={"Stone": ore},
connectors=[{"status": "Connected" if connected else "Unconnected"}],
integrity=dict(currentDamage=0, inspectedBlockCount=blocks, current=blocks * 100))
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
records = [
dict(utc="2026-10-10T10:00:00+00:00", miners=[miner("old", 500)]),
dict(utc="2026-10-10T11:00:00+00:00", miners=[miner("assigned"), miner("cycle"), miner("not-docked"), miner("old", connected=True)]),
dict(utc="2026-10-10T11:01:00+00:00", miners=[miner("assigned"), miner("cycle", 100), miner("not-docked", 50)]),
dict(utc="2026-10-10T11:02:00+00:00", miners=[miner("assigned", connected=True), miner("cycle", connected=True), miner("not-docked", blocks=84)]),
]
(directory / "trace-01.jsonl").write_text("".join(json.dumps(row) + "\n" for row in records) + '{"unfinished":', encoding="utf-8")
result = report(directory, "2026-10-10T11:00:00+00:00")
self.assertEqual(3, result["samples"])
self.assertEqual(4, result["observedMiners"])
self.assertEqual(2, result["observedOrePickup"])
self.assertEqual(1, result["observedDockedEmptyAfterPickup"])
self.assertIsNone(result["miners"]["old"]["firstOreUtc"])
self.assertIsNone(result["miners"]["assigned"]["firstOreUtc"])
self.assertEqual(84, result["miners"]["not-docked"]["minimumBlockCount"])
self.assertEqual(100, result["miners"]["cycle"]["peakCargoKg"])
self.assertTrue((directory / "cycle-report.json").is_file())
if __name__ == "__main__":
unittest.main()
import json
from pathlib import Path
import sys
import tempfile
import unittest
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from fleet_cycle import report
class FleetCycleEvidenceTests(unittest.TestCase):
def test_assignments_empty_returns_and_old_pickups_are_not_completed_cycles(self):
def miner(identity, ore=0, connected=False, blocks=85):
return dict(id=identity, name=identity, state="Servicing" if connected else "Transit",
sourceSha256="verified-source", jobId="assigned-task", cargoOres={"Stone": ore},
connectors=[{"status": "Connected" if connected else "Unconnected"}],
integrity=dict(currentDamage=0, inspectedBlockCount=blocks, current=blocks * 100))
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
records = [
dict(utc="2026-10-10T10:00:00+00:00", miners=[miner("old", 500)]),
dict(utc="2026-10-10T11:00:00+00:00", miners=[miner("assigned"), miner("cycle"), miner("not-docked"), miner("old", connected=True)]),
dict(utc="2026-10-10T11:01:00+00:00", miners=[miner("assigned"), miner("cycle", 100), miner("not-docked", 50)]),
dict(utc="2026-10-10T11:02:00+00:00", miners=[miner("assigned", connected=True), miner("cycle", connected=True), miner("not-docked", blocks=84)]),
]
(directory / "trace-01.jsonl").write_text("".join(json.dumps(row) + "\n" for row in records) + '{"unfinished":', encoding="utf-8")
result = report(directory, "2026-10-10T11:00:00+00:00")
self.assertEqual(3, result["samples"])
self.assertEqual(4, result["observedMiners"])
self.assertEqual(2, result["observedOrePickup"])
self.assertEqual(1, result["observedDockedEmptyAfterPickup"])
self.assertIsNone(result["miners"]["old"]["firstOreUtc"])
self.assertIsNone(result["miners"]["assigned"]["firstOreUtc"])
self.assertEqual(84, result["miners"]["not-docked"]["minimumBlockCount"])
self.assertEqual(100, result["miners"]["cycle"]["peakCargoKg"])
self.assertTrue((directory / "cycle-report.json").is_file())
if __name__ == "__main__":
unittest.main()