test_datanode.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. # Copyright 2021-2025 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. from unittest import mock
  12. from flask import url_for
  13. def test_get_datanode(client, default_datanode):
  14. # test 404
  15. user_url = url_for("api.datanode_by_id", datanode_id="foo")
  16. rep = client.get(user_url)
  17. assert rep.status_code == 404
  18. with mock.patch("taipy.core.data._data_manager._DataManager._get") as manager_mock:
  19. manager_mock.return_value = default_datanode
  20. # test get_datanode
  21. rep = client.get(url_for("api.datanode_by_id", datanode_id="foo"))
  22. assert rep.status_code == 200
  23. def test_delete_datanode(client):
  24. # test 404
  25. user_url = url_for("api.datanode_by_id", datanode_id="foo")
  26. rep = client.get(user_url)
  27. assert rep.status_code == 404
  28. with (
  29. mock.patch("taipy.core.data._data_manager._DataManager._delete"),
  30. mock.patch("taipy.core.data._data_manager._DataManager._get"),
  31. ):
  32. # test get_datanode
  33. rep = client.delete(url_for("api.datanode_by_id", datanode_id="foo"))
  34. assert rep.status_code == 200
  35. def test_create_datanode(client, default_datanode_config):
  36. # without config param
  37. datanodes_url = url_for("api.datanodes")
  38. rep = client.post(datanodes_url)
  39. assert rep.status_code == 400
  40. # config does not exist
  41. datanodes_url = url_for("api.datanodes", config_id="foo")
  42. rep = client.post(datanodes_url)
  43. assert rep.status_code == 404
  44. with mock.patch("taipy.rest.api.resources.datanode.DataNodeList.fetch_config") as config_mock:
  45. config_mock.return_value = default_datanode_config
  46. datanodes_url = url_for("api.datanodes", config_id="bar")
  47. rep = client.post(datanodes_url)
  48. assert rep.status_code == 201
  49. def test_get_all_datanodes(client, default_datanode_config_list):
  50. for ds in range(10):
  51. with mock.patch("taipy.rest.api.resources.datanode.DataNodeList.fetch_config") as config_mock:
  52. config_mock.return_value = default_datanode_config_list[ds]
  53. datanodes_url = url_for("api.datanodes", config_id=default_datanode_config_list[ds].name)
  54. client.post(datanodes_url)
  55. rep = client.get(datanodes_url)
  56. assert rep.status_code == 200
  57. results = rep.get_json()
  58. assert len(results) == 10
  59. def test_read_datanode(client, default_df_datanode):
  60. with mock.patch("taipy.core.data._data_manager._DataManager._get") as config_mock:
  61. config_mock.return_value = default_df_datanode
  62. # without operators
  63. datanodes_url = url_for("api.datanode_reader", datanode_id="foo")
  64. rep = client.get(datanodes_url, json={})
  65. assert rep.status_code == 200
  66. # Without operators and body
  67. rep = client.get(datanodes_url)
  68. assert rep.status_code == 200
  69. # TODO: Revisit filter test
  70. # operators = {"operators": [{"key": "a", "value": 5, "operator": "LESS_THAN"}]}
  71. # rep = client.get(datanodes_url, json=operators)
  72. # assert rep.status_code == 200
  73. def test_write_datanode(client, default_datanode):
  74. with mock.patch("taipy.core.data._data_manager._DataManager._get") as config_mock:
  75. config_mock.return_value = default_datanode
  76. # Get DataNode
  77. datanodes_read_url = url_for("api.datanode_reader", datanode_id=default_datanode.id)
  78. rep = client.get(datanodes_read_url, json={})
  79. assert rep.status_code == 200
  80. assert rep.json == {"data": [1, 2, 3, 4, 5, 6]}
  81. datanodes_write_url = url_for("api.datanode_writer", datanode_id=default_datanode.id)
  82. rep = client.put(datanodes_write_url, json=[1, 2, 3])
  83. assert rep.status_code == 200
  84. rep = client.get(datanodes_read_url, json={})
  85. assert rep.status_code == 200
  86. assert rep.json == {"data": [1, 2, 3]}