From eace153f2db82763fb69746e802b5281cb8d4864 Mon Sep 17 00:00:00 2001 From: didier amyot Date: Fri, 1 Dec 2023 08:13:14 -0500 Subject: [PATCH] added s examples. --- .gitignore | 1 + solid/__init__.py | 0 solid/single_responsability/__init__.py | 0 solid/single_responsability/file_manager.py | 22 +++++++++++ .../file_manager_test.py | 24 ++++++++++++ .../single_responsability/simple_function.py | 37 +++++++++++++++++++ .../simple_function_test.py | 18 +++++++++ 7 files changed, 102 insertions(+) create mode 100644 .gitignore create mode 100644 solid/__init__.py create mode 100644 solid/single_responsability/__init__.py create mode 100644 solid/single_responsability/file_manager.py create mode 100644 solid/single_responsability/file_manager_test.py create mode 100644 solid/single_responsability/simple_function.py create mode 100644 solid/single_responsability/simple_function_test.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..485dee6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/solid/__init__.py b/solid/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solid/single_responsability/__init__.py b/solid/single_responsability/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solid/single_responsability/file_manager.py b/solid/single_responsability/file_manager.py new file mode 100644 index 0000000..3e39872 --- /dev/null +++ b/solid/single_responsability/file_manager.py @@ -0,0 +1,22 @@ +# file_manager_srp.py +import zlib +from pathlib import Path + + +class FileManager: + def __init__(self, filename: str | Path): + self.path = Path(filename) + + def read(self) -> str: + return self.path.read_text("utf-8") + + def write(self, data: str) -> None: + self.path.write_text(data, "utf-8") + + def compress(self) -> None: + compressed_data = zlib.compress(self.path.read_bytes()) + self.path.write_bytes(compressed_data) + + def decompress(self) -> None: + decompressed_data = zlib.decompress(self.path.read_bytes()) + self.path.write_bytes(decompressed_data) diff --git a/solid/single_responsability/file_manager_test.py b/solid/single_responsability/file_manager_test.py new file mode 100644 index 0000000..5a1f3ee --- /dev/null +++ b/solid/single_responsability/file_manager_test.py @@ -0,0 +1,24 @@ +from pathlib import Path + +from _pytest._py.path import LocalPath + +from solid.single_responsability.file_manager import FileManager + + +class TestFileManagerTest: + + def test_happy_path(self, tmpdir: LocalPath): + file_ = Path(tmpdir) / "something" + service = FileManager(file_) + service.write("le petit canard") + assert file_.is_file() + assert service.read() == "le petit canard" + + def test_compressed_happy_path(self, tmpdir: LocalPath): + file_ = Path(tmpdir) / "something" + service = FileManager(file_) + service.write("le petit canard") + service.compress() + assert file_.read_bytes() != "le petit canard".encode('utf-8') + service.decompress() + assert service.read() == "le petit canard" \ No newline at end of file diff --git a/solid/single_responsability/simple_function.py b/solid/single_responsability/simple_function.py new file mode 100644 index 0000000..63fdbc2 --- /dev/null +++ b/solid/single_responsability/simple_function.py @@ -0,0 +1,37 @@ +class User: + def __init__(self, name): + self.name = name + self.isAdmin = False + + +class User2: + def __init__(self, name): + self.name = name + self.is_admin = False + + +class Admin(User2): + def __init__(self, name): + super().__init__(name) + self.is_admin = True + + +users = [ + User2('walid'), + User2('haikel'), + User2('manel'), + Admin('tristan'), + Admin('didier'), + User('jonathan'), + User('samuel'), +] + + +def get_user(user_name: str, is_admin: bool = False, consider_old_users: bool=False) -> User | User2 | Admin | None: + for user in users: + if user_name == user.name: + if isinstance(user, User) and not consider_old_users: + continue + if isinstance(user, User2) and user.is_admin and not is_admin: + continue + return user diff --git a/solid/single_responsability/simple_function_test.py b/solid/single_responsability/simple_function_test.py new file mode 100644 index 0000000..1407324 --- /dev/null +++ b/solid/single_responsability/simple_function_test.py @@ -0,0 +1,18 @@ +from solid.single_responsability.simple_function import get_user + + +class TestGetUser: + def test_happy_path(self): + assert get_user("marie-eve") is None + assert get_user("walid").name == 'walid' + + def test_admin(self): + assert get_user("tristan") is None + assert get_user("tristan", is_admin=True) is not None + assert get_user("tristan", is_admin=True).name == "tristan" + + def test_old_users(self): + assert get_user("jonathan") is None + assert get_user("jonathan", is_admin=True) is None + assert get_user("jonathan", consider_old_users=True) is not None + assert get_user("jonathan", consider_old_users=True).name == "jonathan"