123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- # Copyright 2021-2025 Avaiga Private Limited
- #
- # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- # the License. You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- # specific language governing permissions and limitations under the License.
- import dataclasses
- import pathlib
- from dataclasses import dataclass
- from typing import Any, Dict, Iterable, List, Optional, Union
- from taipy.common.config import Config
- from taipy.core._manager._manager import _Manager
- from taipy.core._repository._abstract_converter import _AbstractConverter
- from taipy.core._repository._abstract_repository import _AbstractRepository
- from taipy.core._repository._filesystem_repository import _FileSystemRepository
- from taipy.core._version._version_manager import _VersionManager
- @dataclass
- class MockModel:
- id: str
- name: str
- version: str
- def to_dict(self):
- return dataclasses.asdict(self)
- @staticmethod
- def from_dict(data: Dict[str, Any]):
- return MockModel(id=data["id"], name=data["name"], version=data["version"])
- @dataclass
- class MockEntity:
- def __init__(self, id: str, name: str, version: str = None) -> None:
- self.id = id
- self.name = name
- if version:
- self._version = version
- else:
- self._version = _VersionManager._get_latest_version()
- class MockConverter(_AbstractConverter):
- @classmethod
- def _entity_to_model(cls, entity: MockEntity) -> MockModel:
- return MockModel(id=entity.id, name=entity.name, version=entity._version)
- @classmethod
- def _model_to_entity(cls, model: MockModel) -> MockEntity:
- return MockEntity(id=model.id, name=model.name, version=model.version)
- class MockRepository(_AbstractRepository): # type: ignore
- def __init__(self, **kwargs):
- self.repo = _FileSystemRepository(**kwargs, converter=MockConverter)
- def _to_model(self, obj: MockEntity):
- return MockModel(obj.id, obj.name, obj._version)
- def _from_model(self, model: MockModel):
- return MockEntity(model.id, model.name, model.version)
- def _load(self, entity_id: str) -> MockEntity:
- return self.repo._load(entity_id)
- def _load_all(self, filters: Optional[List[Dict]] = None) -> List[MockEntity]:
- return self.repo._load_all(filters)
- def _save(self, entity: MockEntity):
- return self.repo._save(entity)
- def _exists(self, entity_id: str) -> bool:
- return self.repo._exists(entity_id)
- def _delete(self, entity_id: str):
- return self.repo._delete(entity_id)
- def _delete_all(self):
- return self.repo._delete_all()
- def _delete_many(self, ids: Iterable[str]):
- return self.repo._delete_many(ids)
- def _delete_by(self, attribute: str, value: str):
- return self.repo._delete_by(attribute, value)
- def _search(self, attribute: str, value: Any, filters: Optional[List[Dict]] = None) -> List[MockEntity]:
- return self.repo._search(attribute, value, filters)
- def _export(self, entity_id: str, folder_path: Union[str, pathlib.Path]):
- return self.repo._export(self, entity_id, folder_path)
- @property
- def _storage_folder(self) -> pathlib.Path:
- return pathlib.Path(Config.core.storage_folder) # type: ignore
- class MockManager(_Manager[MockEntity]):
- _ENTITY_NAME = MockEntity.__name__
- _repository = MockRepository(model_type=MockModel, dir_name="foo")
- class TestManager:
- def test_save_and_fetch_model(self):
- m = MockEntity("uuid", "foo")
- MockManager._repository._save(m)
- fetched_model = MockManager._get(m.id)
- assert m == fetched_model
- def test_exists(self):
- m = MockEntity("uuid", "foo")
- MockManager._repository._save(m)
- assert MockManager._exists(m.id)
- def test_get(self):
- m = MockEntity("uuid", "foo")
- MockManager._repository._save(m)
- assert MockManager._get(m.id) == m
- def test_get_all(self):
- MockManager._delete_all()
- objs = []
- for i in range(5):
- m = MockEntity(f"uuid-{i}", f"Foo{i}")
- objs.append(m)
- MockManager._repository._save(m)
- _objs = MockManager._get_all()
- assert len(_objs) == 5
- def test_delete(self):
- m = MockEntity("uuid", "foo")
- MockManager._repository._save(m)
- MockManager._delete(m.id)
- assert MockManager._get(m.id) is None
- def test_delete_all(self):
- objs = []
- for i in range(5):
- m = MockEntity(f"uuid-{i}", f"Foo{i}")
- objs.append(m)
- MockManager._repository._save(m)
- MockManager._delete_all()
- assert MockManager._get_all() == []
- def test_delete_many(self):
- objs = []
- for i in range(5):
- m = MockEntity(f"uuid-{i}", f"Foo{i}")
- objs.append(m)
- MockManager._repository._save(m)
- MockManager._delete_many(["uuid-0", "uuid-1"])
- assert len(MockManager._get_all()) == 3
- def test_is_editable(self):
- m = MockEntity("uuid", "Foo")
- MockManager._repository._save(m)
- assert MockManager._is_editable(m)
- rc = MockManager._is_editable("some_entity")
- assert not rc
- assert "Entity 'some_entity' does not exist in the repository." in rc.reasons
- def test_is_readable(self):
- m = MockEntity("uuid", "Foo")
- MockManager._repository._save(m)
- assert MockManager._is_readable(m)
- rc = MockManager._is_editable("some_entity")
- assert not rc
- assert "Entity 'some_entity' does not exist in the repository." in rc.reasons
|