test_submission_repositories.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. import os
  12. import pytest
  13. from taipy.common.config import Config
  14. from taipy.core.data._data_manager_factory import _DataManagerFactory
  15. from taipy.core.exceptions import ModelNotFound
  16. from taipy.core.job._job_manager_factory import _JobManagerFactory
  17. from taipy.core.submission._submission_manager_factory import _SubmissionManagerFactory
  18. from taipy.core.submission.submission import Submission
  19. from taipy.core.task._task_manager_factory import _TaskManagerFactory
  20. from taipy.core.task.task import Task
  21. class TestSubmissionRepository:
  22. def test_save_and_load(self, data_node, job):
  23. _DataManagerFactory._build_manager()._repository._save(data_node)
  24. task = Task("task_config_id", {}, print, [data_node], [data_node])
  25. _TaskManagerFactory._build_manager()._repository._save(task)
  26. job._task = task
  27. _JobManagerFactory._build_manager()._repository._save(job)
  28. submission = Submission(
  29. task.id, task._ID_PREFIX, task.config_id, properties={"debug": True, "log": "log_file", "retry_note": 5}
  30. )
  31. submission_repository = _SubmissionManagerFactory._build_manager()._repository
  32. submission_repository._save(submission)
  33. submission.jobs = [job]
  34. obj = submission_repository._load(submission.id)
  35. assert isinstance(obj, Submission)
  36. assert obj.entity_id == task.id
  37. assert obj.entity_type == task._ID_PREFIX
  38. assert obj.entity_config_id == task.config_id
  39. assert obj.properties == {"debug": True, "log": "log_file", "retry_note": 5}
  40. def test_exists(self):
  41. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
  42. submission_repository = _SubmissionManagerFactory._build_manager()._repository
  43. submission_repository._save(submission)
  44. assert submission_repository._exists(submission.id)
  45. assert not submission_repository._exists("not-existed-submission")
  46. def test_load_all(self):
  47. repository = _SubmissionManagerFactory._build_manager()._repository
  48. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
  49. for i in range(10):
  50. submission.id = f"submission-{i}"
  51. repository._save(submission)
  52. submissions = repository._load_all()
  53. assert len(submissions) == 10
  54. def test_delete(self):
  55. repository = _SubmissionManagerFactory._build_manager()._repository
  56. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
  57. repository._save(submission)
  58. repository._delete(submission.id)
  59. with pytest.raises(ModelNotFound):
  60. repository._load(submission.id)
  61. def test_delete_all(self):
  62. submission_repository = _SubmissionManagerFactory._build_manager()._repository
  63. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
  64. for i in range(10):
  65. submission.id = f"submission-{i}"
  66. submission_repository._save(submission)
  67. assert len(submission_repository._load_all()) == 10
  68. submission_repository._delete_all()
  69. assert len(submission_repository._load_all()) == 0
  70. def test_delete_many(self):
  71. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
  72. submission_repository = _SubmissionManagerFactory._build_manager()._repository
  73. for i in range(10):
  74. submission.id = f"submission-{i}"
  75. submission_repository._save(submission)
  76. objs = submission_repository._load_all()
  77. assert len(objs) == 10
  78. ids = [x.id for x in objs[:3]]
  79. submission_repository._delete_many(ids)
  80. assert len(submission_repository._load_all()) == 7
  81. def test_delete_by(self):
  82. # Create 5 entities with version 1.0 and 5 entities with version 2.0
  83. submission_repository = _SubmissionManagerFactory._build_manager()._repository
  84. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
  85. for i in range(10):
  86. submission.id = f"submission-{i}"
  87. submission._version = f"{(i+1) // 5}.0"
  88. submission_repository._save(submission)
  89. objs = submission_repository._load_all()
  90. assert len(objs) == 10
  91. submission_repository._delete_by("version", "1.0")
  92. assert len(submission_repository._load_all()) == 5
  93. def test_search(self):
  94. submission_repository = _SubmissionManagerFactory._build_manager()._repository
  95. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id", version="random_version_number")
  96. for i in range(10):
  97. submission.id = f"submission-{i}"
  98. submission_repository._save(submission)
  99. assert len(submission_repository._load_all()) == 10
  100. objs = submission_repository._search("id", "submission-2")
  101. assert len(objs) == 1
  102. assert isinstance(objs[0], Submission)
  103. objs = submission_repository._search("id", "submission-2", filters=[{"version": "random_version_number"}])
  104. assert len(objs) == 1
  105. assert isinstance(objs[0], Submission)
  106. assert submission_repository._search("id", "submission-2", filters=[{"version": "non_existed_version"}]) == []
  107. def test_export(self, tmpdir):
  108. repository = _SubmissionManagerFactory._build_manager()._repository
  109. submission = Submission("entity_id", "ENTITY_TYPE", "entity_config_id")
  110. repository._save(submission)
  111. repository._export(submission.id, tmpdir.strpath)
  112. dir_path = (
  113. repository.dir_path
  114. if Config.core.repository_type == "default"
  115. else os.path.join(tmpdir.strpath, "submission")
  116. )
  117. assert os.path.exists(os.path.join(dir_path, f"{submission.id}.json"))