test_cycle_repositories.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. import os
  12. import pytest
  13. from taipy.core.cycle._cycle_fs_repository import _CycleFSRepository
  14. from taipy.core.cycle._cycle_sql_repository import _CycleSQLRepository
  15. from taipy.core.cycle.cycle import Cycle, CycleId
  16. from taipy.core.exceptions import ModelNotFound
  17. class TestCycleRepositories:
  18. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  19. def test_save_and_load(self, cycle: Cycle, repo, init_sql_repo):
  20. repository = repo()
  21. repository._save(cycle)
  22. loaded_cycle = repository._load(cycle.id)
  23. assert isinstance(loaded_cycle, Cycle)
  24. assert cycle._frequency == loaded_cycle._frequency
  25. assert cycle._creation_date == loaded_cycle._creation_date
  26. assert cycle._start_date == loaded_cycle._start_date
  27. assert cycle._end_date == loaded_cycle._end_date
  28. assert cycle._name == loaded_cycle._name
  29. assert cycle.id == loaded_cycle.id
  30. assert cycle._properties == loaded_cycle._properties
  31. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  32. def test_exists(self, cycle, repo, init_sql_repo):
  33. repository = repo()
  34. repository._save(cycle)
  35. assert repository._exists(cycle.id)
  36. assert not repository._exists("not-existed-cycle")
  37. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  38. def test_load_all(self, cycle, repo, init_sql_repo):
  39. repository = repo()
  40. for i in range(10):
  41. cycle.id = CycleId(f"cycle-{i}")
  42. repository._save(cycle)
  43. data_nodes = repository._load_all()
  44. assert len(data_nodes) == 10
  45. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  46. def test_load_all_with_filters(self, cycle, repo, init_sql_repo):
  47. repository = repo()
  48. for i in range(10):
  49. cycle.id = CycleId(f"cycle-{i}")
  50. cycle._name = f"cycle-{i}"
  51. repository._save(cycle)
  52. objs = repository._load_all(filters=[{"id": "cycle-2"}])
  53. assert len(objs) == 1
  54. @pytest.mark.parametrize("repo", [_CycleSQLRepository])
  55. def test_delete(self, cycle, repo, init_sql_repo):
  56. repository = repo()
  57. repository._save(cycle)
  58. repository._delete(cycle.id)
  59. with pytest.raises(ModelNotFound):
  60. repository._load(cycle.id)
  61. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  62. def test_delete_all(self, cycle, repo, init_sql_repo):
  63. repository = repo()
  64. for i in range(10):
  65. cycle.id = CycleId(f"cycle-{i}")
  66. repository._save(cycle)
  67. assert len(repository._load_all()) == 10
  68. repository._delete_all()
  69. assert len(repository._load_all()) == 0
  70. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  71. def test_delete_many(self, cycle, repo, init_sql_repo):
  72. repository = repo()
  73. for i in range(10):
  74. cycle.id = CycleId(f"cycle-{i}")
  75. repository._save(cycle)
  76. objs = repository._load_all()
  77. assert len(objs) == 10
  78. ids = [x.id for x in objs[:3]]
  79. repository._delete_many(ids)
  80. assert len(repository._load_all()) == 7
  81. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  82. def test_search(self, cycle, repo, init_sql_repo):
  83. repository = repo()
  84. for i in range(10):
  85. cycle.id = CycleId(f"cycle-{i}")
  86. cycle.name = f"cycle-{i}"
  87. repository._save(cycle)
  88. assert len(repository._load_all()) == 10
  89. objs = repository._search("name", "cycle-2")
  90. assert len(objs) == 1
  91. assert isinstance(objs[0], Cycle)
  92. @pytest.mark.parametrize("repo", [_CycleFSRepository, _CycleSQLRepository])
  93. def test_export(self, tmpdir, cycle, repo, init_sql_repo):
  94. repository = repo()
  95. repository._save(cycle)
  96. repository._export(cycle.id, tmpdir.strpath)
  97. dir_path = repository.dir_path if repo == _CycleFSRepository else os.path.join(tmpdir.strpath, "cycle")
  98. assert os.path.exists(os.path.join(dir_path, f"{cycle.id}.json"))