test_sensors.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import pytest
  2. from flexmeasures.api.common.schemas.sensors import (
  3. SensorField,
  4. EntityAddressValidationError,
  5. )
  6. from flexmeasures.utils.entity_address_utils import build_entity_address
  7. @pytest.mark.parametrize(
  8. "entity_address, entity_type, fm_scheme, exp_deserialization_name",
  9. [
  10. (
  11. build_entity_address(dict(sensor_id=1), "sensor"),
  12. "sensor",
  13. "fm1",
  14. "height",
  15. ),
  16. ],
  17. )
  18. def test_sensor_field_straightforward(
  19. add_sensors,
  20. setup_markets,
  21. add_battery_assets,
  22. entity_address,
  23. entity_type,
  24. fm_scheme,
  25. exp_deserialization_name,
  26. ):
  27. """Testing straightforward cases"""
  28. sf = SensorField(entity_type, fm_scheme)
  29. deser = sf.deserialize(entity_address, None, None)
  30. assert deser.name == exp_deserialization_name
  31. assert sf.serialize(entity_type, {entity_type: deser}) == entity_address
  32. @pytest.mark.parametrize(
  33. "entity_address, entity_type, fm_scheme, error_msg",
  34. [
  35. (
  36. build_entity_address(
  37. dict(market_name="epex_da"), "market", fm_scheme="fm0"
  38. ),
  39. "market",
  40. "fm0",
  41. "fm0 scheme is no longer supported",
  42. ),
  43. (
  44. "ea1.2021-01.io.flexmeasures:fm1.some.weird:identifier%that^is*not)used",
  45. "sensor",
  46. "fm1",
  47. "Could not parse",
  48. ),
  49. (
  50. build_entity_address(
  51. dict(sensor_id=99999999999999), "sensor", fm_scheme="fm1"
  52. ),
  53. "sensor",
  54. "fm1",
  55. "doesn't exist",
  56. ),
  57. (
  58. build_entity_address(dict(sensor_id=-1), "sensor", fm_scheme="fm1"),
  59. "sensor",
  60. "fm1",
  61. "Could not parse",
  62. ),
  63. ("ea1.2021-13.io.flexmeasures:fm1.9", "sensor", "fm1", "date specification"),
  64. ],
  65. )
  66. def test_sensor_field_invalid(entity_address, entity_type, fm_scheme, error_msg):
  67. sf = SensorField(entity_type, fm_scheme)
  68. with pytest.raises(EntityAddressValidationError) as ve:
  69. sf.deserialize(entity_address, None, None)
  70. assert error_msg in str(ve)