test_assets_utils.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. import pytest
  2. from flexmeasures.ui.views.assets import (
  3. get_allowed_price_sensor_data,
  4. get_allowed_inflexible_sensor_data,
  5. )
  6. from flexmeasures.ui.tests.test_utils import NewAsset
  7. @pytest.mark.parametrize(
  8. "new_asset, account_argument, expect_new_asset_sensor",
  9. [
  10. # No asset, no account - get the default sensors
  11. (None, None, False),
  12. # No account on asset and function call - get new asset sensors
  13. (
  14. {
  15. "asset_name": "No account asset",
  16. "sensor_name": "No account asset sensor",
  17. },
  18. None,
  19. True,
  20. ),
  21. # Asset with account, function call without - do not get new asset sensors
  22. (
  23. {
  24. "asset_name": "Have account asset",
  25. "sensor_name": "Have account asset sensor",
  26. "set_account": True,
  27. },
  28. None,
  29. False,
  30. ),
  31. # Asset without account, function call with - do not get new asset sensors
  32. (
  33. {
  34. "asset_name": "Have account asset",
  35. "sensor_name": "Have account asset sensor",
  36. },
  37. 1,
  38. False,
  39. ),
  40. # Asset has the same account that function call - get new asset sensors
  41. (
  42. {
  43. "asset_name": "Have account asset",
  44. "sensor_name": "Have account asset sensor",
  45. "set_account": True,
  46. },
  47. 1,
  48. True,
  49. ),
  50. # Asset and function call have different accounts - do not get new asset sensors
  51. (
  52. {
  53. "asset_name": "Have account asset",
  54. "sensor_name": "Have account asset sensor",
  55. "set_account": True,
  56. },
  57. 1000,
  58. False,
  59. ),
  60. # New asset sensor has different unit - do not get new asset sensors
  61. (
  62. {
  63. "asset_name": "No account asset",
  64. "sensor_name": "No account asset sensor",
  65. "sensor_unit": "kWh",
  66. },
  67. None,
  68. False,
  69. ),
  70. ],
  71. )
  72. def test_get_allowed_price_sensor_data(
  73. db,
  74. setup_generic_asset_types,
  75. setup_accounts,
  76. new_asset,
  77. account_argument,
  78. expect_new_asset_sensor,
  79. ):
  80. with NewAsset(
  81. db, setup_generic_asset_types, setup_accounts, new_asset
  82. ) as new_asset_decorator:
  83. price_sensor_data = get_allowed_price_sensor_data(account_argument)
  84. if expect_new_asset_sensor:
  85. assert len(price_sensor_data) == 3
  86. assert (
  87. price_sensor_data[new_asset_decorator.price_sensor.id]
  88. == f'{new_asset["asset_name"]}:{new_asset["sensor_name"]}'
  89. )
  90. # we are adding these sensors in assets without account by default
  91. assert price_sensor_data[1] == "epex:epex_da"
  92. assert price_sensor_data[2] == "epex:epex_da_production"
  93. @pytest.mark.parametrize(
  94. "new_asset, account_argument, expect_new_asset_sensor",
  95. [
  96. # No asset, no account - get the default sensors
  97. (None, None, False),
  98. # No account on asset and function call - get new asset sensors
  99. (
  100. {
  101. "asset_name": "No account asset",
  102. "sensor_name": "No account asset sensor",
  103. "sensor_unit": "kWh",
  104. },
  105. None,
  106. True,
  107. ),
  108. # Asset with account, function call without - do not get new asset sensors
  109. (
  110. {
  111. "asset_name": "Have account asset",
  112. "sensor_name": "Have account asset sensor",
  113. "sensor_unit": "kWh",
  114. "set_account": True,
  115. },
  116. None,
  117. False,
  118. ),
  119. # Asset without account, function call with - do not get new asset sensors
  120. (
  121. {
  122. "asset_name": "Have account asset",
  123. "sensor_name": "Have account asset sensor",
  124. "sensor_unit": "kWh",
  125. },
  126. 1,
  127. False,
  128. ),
  129. # Asset has the same account that function call - get new asset sensors
  130. (
  131. {
  132. "asset_name": "Have account asset",
  133. "sensor_name": "Have account asset sensor",
  134. "sensor_unit": "kWh",
  135. "set_account": True,
  136. },
  137. 1,
  138. True,
  139. ),
  140. # Asset and function call have different accounts - do not get new asset sensors
  141. (
  142. {
  143. "asset_name": "Have account asset",
  144. "sensor_name": "Have account asset sensor",
  145. "sensor_unit": "kWh",
  146. "set_account": True,
  147. },
  148. 1000,
  149. False,
  150. ),
  151. # New asset sensor has energy unit - still use it
  152. (
  153. {
  154. "asset_name": "No account asset",
  155. "sensor_name": "No account asset sensor",
  156. "sensor_unit": "kW",
  157. },
  158. None,
  159. True,
  160. ),
  161. # New asset sensor has temperature unit - do not get new asset sensors
  162. (
  163. {
  164. "asset_name": "No account asset",
  165. "sensor_name": "No account asset sensor",
  166. "sensor_unit": "°C",
  167. },
  168. None,
  169. False,
  170. ),
  171. ],
  172. )
  173. def test_get_allowed_inflexible_sensor_data(
  174. db,
  175. setup_generic_asset_types,
  176. setup_accounts,
  177. new_asset,
  178. account_argument,
  179. expect_new_asset_sensor,
  180. ):
  181. with NewAsset(
  182. db, setup_generic_asset_types, setup_accounts, new_asset
  183. ) as new_asset_decorator:
  184. price_sensor_data = get_allowed_inflexible_sensor_data(account_argument)
  185. if expect_new_asset_sensor:
  186. assert len(price_sensor_data) == 1
  187. assert (
  188. price_sensor_data[new_asset_decorator.price_sensor.id]
  189. == f'{new_asset["asset_name"]}:{new_asset["sensor_name"]}'
  190. )