"""Tests de Equipment, EquipmentModel, Sensor.""" from __future__ import annotations import pytest from pydantic import ValidationError from vmssailor.core import ( EquipmentCategory, EquipmentModel, EquipmentSpec, Sensor, SystemId, UnitSI, ) def test_sensor_basic() -> None: s = Sensor( id="oil_press", name="Oil Pressure", unit_si=UnitSI.BAR, range_normal_min=3.0, range_normal_max=5.5, ) assert s.unit_si == UnitSI.BAR def test_sensor_range_max_below_min_rejected() -> None: with pytest.raises(ValidationError): Sensor( id="x", name="X", unit_si=UnitSI.BAR, range_normal_min=5.0, range_normal_max=2.0, ) def test_equipment_model_with_sensors() -> None: em = EquipmentModel( id="mtu_test", manufacturer="MTU", model_name="Test", category=EquipmentCategory.ENGINE_MAIN, typical_systems=[SystemId.MAIN_ENGINE], specs=EquipmentSpec(power_kw=1432, rpm_nominal=2450), default_sensors=[ Sensor(id="rpm", name="RPM", unit_si=UnitSI.RPM), Sensor(id="oil_press", name="Oil P", unit_si=UnitSI.BAR), ], ) assert em.specs.power_kw == 1432 assert len(em.default_sensors) == 2 def test_equipment_model_duplicate_sensor_ids_rejected() -> None: with pytest.raises(ValidationError): EquipmentModel( id="x", manufacturer="X", model_name="X", category=EquipmentCategory.ENGINE_MAIN, default_sensors=[ Sensor(id="rpm", name="RPM"), Sensor(id="rpm", name="RPM dup"), ], ) def test_equipment_instance(sample_equipment) -> None: assert sample_equipment.tag_prefix == "ME_PORT" assert sample_equipment.system_id == SystemId.MAIN_ENGINE assert sample_equipment.installed def test_equipment_invalid_tag_prefix_rejected() -> None: with pytest.raises(ValidationError): from vmssailor.core import Equipment, ShipCoord Equipment( id="x", model_ref="m", tag_prefix="lowercase_bad", # debe ser mayúsculas display_name="X", location=ShipCoord(x_pp=1.0, y_cl=0.0, z_bl=0.0), system_id=SystemId.MAIN_ENGINE, )