package edgesfile import ( "encoding/json" "testing" ) // Region HA spec 2 ยง7: the placement policy reads the headroom totals and // the file's generation, so BoxChoice carries both. func TestBoxChoiceCarriesHeadroomTotalsAndGeneration(t *testing.T) { var f PlacementView body := `{"v":1,"box":"box-a","box_id":"i-a","generation":"2026-10-16T11:55:00Z","headroom":{"mem_free_mib":512,"disk_free_mib":2048,"mem_total_mib":4096,"disk_total_mib":20480,"awake":3},"hosts":{}}` if err := json.Unmarshal([]byte(body), &f); err != nil { t.Fatal(err) } f.Fresh = true got := Snapshot{Files: []PlacementView{f}, Complete: true, BoxesComplete: true}.BoxChoice() if len(got.Boxes) != 1 { t.Fatalf("boxes %+v", got.Boxes) } b := got.Boxes[0] if b.Generation != "2026-10-16T11:55:00Z" || b.Headroom == nil || b.Headroom.MemTotalMiB != 4096 || b.Headroom.DiskTotalMiB != 20480 || b.Headroom.MemFreeMiB != 512 || b.Headroom.DiskFreeMiB != 2048 || b.Headroom.Awake != 3 { t.Fatalf("box lost a field: %+v %+v", b, b.Headroom) } }