test_sequence.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # Copyright 2021-2024 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. from taipy.core.scenario._scenario_manager_factory import _ScenarioManagerFactory
  14. def test_get_sequence(client, default_sequence):
  15. # test 404
  16. user_url = url_for("api.sequence_by_id", sequence_id="foo")
  17. rep = client.get(user_url)
  18. assert rep.status_code == 404
  19. with mock.patch("taipy.core.sequence._sequence_manager._SequenceManager._get") as manager_mock:
  20. manager_mock.return_value = default_sequence
  21. # test get_sequence
  22. rep = client.get(url_for("api.sequence_by_id", sequence_id="foo"))
  23. assert rep.status_code == 200
  24. def test_delete_sequence(client):
  25. # test 404
  26. user_url = url_for("api.sequence_by_id", sequence_id="foo")
  27. rep = client.get(user_url)
  28. assert rep.status_code == 404
  29. with (
  30. mock.patch("taipy.core.sequence._sequence_manager._SequenceManager._delete"),
  31. mock.patch("taipy.core.sequence._sequence_manager._SequenceManager._get"),
  32. ):
  33. # test get_sequence
  34. rep = client.delete(url_for("api.sequence_by_id", sequence_id="foo"))
  35. assert rep.status_code == 200
  36. def test_create_sequence(client, default_scenario):
  37. sequences_url = url_for("api.sequences")
  38. rep = client.post(sequences_url, json={})
  39. assert rep.status_code == 400
  40. assert rep.json == {"message": "Scenario id is missing."}
  41. sequences_url = url_for("api.sequences")
  42. rep = client.post(sequences_url, json={"scenario_id": "SCENARIO_scenario_id"})
  43. assert rep.status_code == 400
  44. assert rep.json == {"message": "Sequence name is missing."}
  45. sequences_url = url_for("api.sequences")
  46. rep = client.post(sequences_url, json={"scenario_id": "SCENARIO_scenario_id", "sequence_name": "sequence"})
  47. assert rep.status_code == 404
  48. _ScenarioManagerFactory._build_manager()._set(default_scenario)
  49. with mock.patch("taipy.core.scenario._scenario_manager._ScenarioManager._get") as config_mock:
  50. config_mock.return_value = default_scenario
  51. sequences_url = url_for("api.sequences")
  52. rep = client.post(
  53. sequences_url, json={"scenario_id": default_scenario.id, "sequence_name": "sequence", "tasks": []}
  54. )
  55. assert rep.status_code == 201
  56. def test_get_all_sequences(client, default_scenario_config_list):
  57. for ds in range(10):
  58. with mock.patch("taipy.rest.api.resources.scenario.ScenarioList.fetch_config") as config_mock:
  59. config_mock.return_value = default_scenario_config_list[ds]
  60. scenario_url = url_for("api.scenarios", config_id=default_scenario_config_list[ds].name)
  61. client.post(scenario_url)
  62. sequences_url = url_for("api.sequences")
  63. rep = client.get(sequences_url)
  64. assert rep.status_code == 200
  65. results = rep.get_json()
  66. assert len(results) == 10
  67. def test_execute_sequence(client, default_scenario):
  68. # test 404
  69. user_url = url_for("api.sequence_submit", sequence_id="foo")
  70. rep = client.post(user_url)
  71. assert rep.status_code == 404
  72. _ScenarioManagerFactory._build_manager()._set(default_scenario)
  73. with mock.patch("taipy.core.scenario._scenario_manager._ScenarioManager._get") as config_mock:
  74. config_mock.return_value = default_scenario
  75. sequences_url = url_for("api.sequences")
  76. seq = client.post(
  77. sequences_url, json={"scenario_id": default_scenario.id, "sequence_name": "sequence", "tasks": []}
  78. )
  79. # test submit
  80. rep = client.post(url_for("api.sequence_submit", sequence_id=seq.json["sequence"]["id"]))
  81. assert rep.status_code == 200