diff --git a/dcs/terrain/terrain.py b/dcs/terrain/terrain.py index feebf210..ff79e6a3 100644 --- a/dcs/terrain/terrain.py +++ b/dcs/terrain/terrain.py @@ -614,6 +614,8 @@ def __init__(self, terrain: Terrain): def load_dict(self, data): for x in data.get("airports", {}): self.terrain.airport_by_id(x).load_from_dict(data["airports"][x]) + for uid, wh_data in data.get("warehouses", {}).items(): + self.warehouses[int(uid)] = wh_data def __str__(self): airports = self.terrain.airports diff --git a/tests/test_terrain.py b/tests/test_terrain.py index 337acf67..2516ab21 100644 --- a/tests/test_terrain.py +++ b/tests/test_terrain.py @@ -94,6 +94,24 @@ def test_parking_slots(self): slots = m.terrain.airports["Nellis"].free_parking_slots(dcs.planes.KC_135) +class WarehousesTest(unittest.TestCase): + + def test_load_dict_reads_warehouses(self): + # __str__ serializes both "airports" and "warehouses", but load_dict + # historically read only "airports", silently dropping unit/FARP/ship + # warehouse state on every save->load round-trip. load_dict must read + # "warehouses" symmetrically with the serializer. + m = dcs.mission.Mission(terrain=dcs.terrain.Caucasus()) + m.warehouses.load_dict({ + "airports": {}, + "warehouses": {"4242": {"coalition": "BLUE", "size": 100}}, + }) + + self.assertIn(4242, m.warehouses.warehouses) + self.assertEqual(m.warehouses.warehouses[4242]["coalition"], "BLUE") + self.assertEqual(m.warehouses.warehouses[4242]["size"], 100) + + class NormandyTest(unittest.TestCase): def test_creation(self):