test_utils.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import sys
  2. import pytest
  3. from datetime import datetime
  4. from pytz import utc
  5. from flexmeasures.cli import is_running as cli_is_running
  6. def test_cli_is_running(app, monkeypatch):
  7. assert cli_is_running() is False
  8. monkeypatch.setattr(
  9. sys, "argv", ["/bin/flexmeasures", "add", "account", "--name", "XCorp."]
  10. )
  11. assert cli_is_running() is True
  12. @pytest.mark.parametrize(
  13. "now, flag, expected_start, expected_end",
  14. [
  15. (
  16. datetime(2023, 4, 4, 1, 30, tzinfo=utc),
  17. "last_hour",
  18. datetime(2023, 4, 4, 0, tzinfo=utc),
  19. datetime(2023, 4, 4, 1, tzinfo=utc),
  20. ),
  21. (
  22. datetime(2023, 4, 4, 1, 30, tzinfo=utc),
  23. "last_day",
  24. datetime(2023, 4, 3, 0, tzinfo=utc),
  25. datetime(2023, 4, 4, 0, tzinfo=utc),
  26. ),
  27. (
  28. datetime(2023, 4, 8, 1, 30, tzinfo=utc),
  29. "last_7_days",
  30. datetime(2023, 4, 1, 0, tzinfo=utc),
  31. datetime(2023, 4, 8, 0, tzinfo=utc),
  32. ),
  33. (
  34. datetime(2023, 4, 8, 1, 30, tzinfo=utc),
  35. "last_month",
  36. datetime(2023, 3, 1, 0, tzinfo=utc),
  37. datetime(2023, 4, 1, 0, tzinfo=utc),
  38. ),
  39. (
  40. datetime(2023, 1, 1, tzinfo=utc),
  41. "last_month",
  42. datetime(2022, 12, 1, tzinfo=utc),
  43. datetime(2023, 1, 1, tzinfo=utc),
  44. ),
  45. (
  46. datetime(2023, 1, 2, tzinfo=utc),
  47. "last_year",
  48. datetime(2022, 1, 1, tzinfo=utc),
  49. datetime(2023, 1, 1, tzinfo=utc),
  50. ),
  51. ],
  52. )
  53. def test_get_timerange_from_flag(monkeypatch, now, flag, expected_start, expected_end):
  54. import flexmeasures.utils.time_utils as time_utils
  55. from flexmeasures.cli.utils import get_timerange_from_flag
  56. # mock server_now to `now`
  57. monkeypatch.setattr(time_utils, "server_now", lambda: now)
  58. input_arguments = {flag: True, "timezone": utc}
  59. start, end = get_timerange_from_flag(**input_arguments)
  60. assert start == expected_start
  61. assert end == expected_end
  62. def test_get_unique_sensor_names(app, db, add_asset_with_children):
  63. from flexmeasures.cli.utils import get_sensor_aliases
  64. from flexmeasures.cli.data_show import find_duplicates
  65. sensors = []
  66. for assets in add_asset_with_children.values():
  67. for asset in assets.values():
  68. sensors.extend(asset.sensors)
  69. duplicates = find_duplicates(sensors, "name")
  70. aliases = get_sensor_aliases(sensors, duplicates)
  71. expected_aliases = [
  72. "power (Test Supplier Account/parent/child_1)",
  73. "power (Test Supplier Account/parent/child_2)",
  74. "power (Test Supplier Account/parent)",
  75. "power (Test Dummy Account/parent/child_1)",
  76. "power (Test Dummy Account/parent/child_2)",
  77. "power (Test Dummy Account/parent)",
  78. ]
  79. assert list(aliases.values()) == expected_aliases
  80. duplicates = find_duplicates(sensors, "name")
  81. aliases = get_sensor_aliases(sensors[:2], duplicates)
  82. expected_aliases = [
  83. "power (child_1)",
  84. "power (child_2)",
  85. ]
  86. assert list(aliases.values()) == expected_aliases
  87. duplicates = find_duplicates(sensors, "name")
  88. aliases = get_sensor_aliases(sensors[:3], duplicates)
  89. expected_aliases = [
  90. "power (parent/child_1)",
  91. "power (parent/child_2)",
  92. "power (parent)",
  93. ]
  94. assert list(aliases.values()) == expected_aliases