test_assets_api_fresh_db.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from flask import url_for
  2. import pytest
  3. from sqlalchemy import select
  4. from flexmeasures.api.tests.utils import AccountContext
  5. from flexmeasures.data.models.generic_assets import GenericAsset
  6. from flexmeasures.api.v3_0.tests.utils import get_asset_post_data
  7. @pytest.mark.parametrize(
  8. "requesting_user",
  9. [
  10. "test_admin_user@seita.nl", # has the "site-admin" role
  11. "test_prosumer_user_2@seita.nl", # has the "account-admin" role
  12. ],
  13. indirect=True,
  14. )
  15. def test_post_an_asset_as_admin(client, setup_api_fresh_test_data, requesting_user, db):
  16. """
  17. Post one extra asset, as an admin user.
  18. """
  19. with AccountContext("Test Prosumer Account") as prosumer:
  20. post_data = get_asset_post_data(
  21. account_id=prosumer.id,
  22. asset_type_id=prosumer.generic_assets[0].generic_asset_type.id,
  23. )
  24. if requesting_user.email == "test_prosumer_user_2@seita.nl":
  25. post_data["name"] = "Test battery 3"
  26. post_assets_response = client.post(
  27. url_for("AssetAPI:post"),
  28. json=post_data,
  29. )
  30. print("Server responded with:\n%s" % post_assets_response.json)
  31. assert post_assets_response.status_code == 201
  32. assert post_assets_response.json["latitude"] == 30.1
  33. asset: GenericAsset = db.session.execute(
  34. select(GenericAsset).filter_by(name=post_data["name"])
  35. ).scalar_one_or_none()
  36. assert asset is not None
  37. assert asset.latitude == 30.1
  38. @pytest.mark.parametrize("requesting_user", ["test_admin_user@seita.nl"], indirect=True)
  39. def test_edit_an_asset(client, setup_api_fresh_test_data, requesting_user, db):
  40. with AccountContext("Test Supplier Account") as supplier:
  41. existing_asset = supplier.generic_assets[0]
  42. post_data = dict(latitude=10)
  43. edit_asset_response = client.patch(
  44. url_for("AssetAPI:patch", id=existing_asset.id),
  45. json=post_data,
  46. )
  47. assert edit_asset_response.status_code == 200
  48. updated_asset = db.session.execute(
  49. select(GenericAsset).filter_by(id=existing_asset.id)
  50. ).scalar_one_or_none()
  51. assert updated_asset.latitude == 10 # changed value
  52. assert updated_asset.longitude == existing_asset.longitude
  53. assert updated_asset.name == existing_asset.name
  54. @pytest.mark.parametrize("requesting_user", ["test_admin_user@seita.nl"], indirect=True)
  55. def test_delete_an_asset(client, setup_api_fresh_test_data, requesting_user, db):
  56. with AccountContext("Test Prosumer Account") as prosumer:
  57. existing_asset_id = prosumer.generic_assets[0].id
  58. delete_asset_response = client.delete(
  59. url_for("AssetAPI:delete", id=existing_asset_id),
  60. )
  61. assert delete_asset_response.status_code == 204
  62. deleted_asset = db.session.execute(
  63. select(GenericAsset).filter_by(id=existing_asset_id)
  64. ).scalar_one_or_none()
  65. assert deleted_asset is None