From 715f771d26f30f630c21a67f0899cecfa6efbc09 Mon Sep 17 00:00:00 2001 From: Dario Hollbach Date: Sun, 1 Mar 2026 20:40:51 +0100 Subject: [PATCH] Implement version manager kata form codewars (5bc7bb444be9774f100000c3) --- src/version_manager.py | 52 +++++++++++++++++++++++++++++++++++ tests/test_version_manager.py | 30 ++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 src/version_manager.py create mode 100644 tests/test_version_manager.py diff --git a/src/version_manager.py b/src/version_manager.py new file mode 100644 index 0000000..666373e --- /dev/null +++ b/src/version_manager.py @@ -0,0 +1,52 @@ +class VersionManager: + def __init__(self, version=""): + self.major_ = 0 + self.minor_ = 0 + self.patch_ = 0 + + if not version: + self.patch_ = 1 + else: + parts = version.split(".") + try: + if len(parts) >= 1 and parts[0]: + self.major_ = int(parts[0]) + if len(parts) >= 2: + self.minor_ = int(parts[1]) + if len(parts) >= 3: + self.patch_ = int(parts[2]) + except ValueError: + raise ValueError("Error occured while parsing version!") + + self.version_history = [(self.major_, self.minor_, self.patch_)] + + def _save_history(self): + self.version_history.append((self.major_, self.minor_, self.patch_)) + + def major(self): + self._save_history() + self.major_ += 1 + self.minor_ = 0 + self.patch_ = 0 + return self + + def minor(self): + self._save_history() + self.minor_ += 1 + self.patch_ = 0 + return self + + def patch(self): + self._save_history() + self.patch_ += 1 + return self + + def rollback(self): + if len(self.version_history) <= 1: + raise ValueError("Cannot rollback!") + + self.major_, self.minor_, self.patch_ = self.version_history.pop() + return self + + def release(self): + return f"{self.major_}.{self.minor_}.{self.patch_}" diff --git a/tests/test_version_manager.py b/tests/test_version_manager.py new file mode 100644 index 0000000..4c8eb5b --- /dev/null +++ b/tests/test_version_manager.py @@ -0,0 +1,30 @@ +from src.version_manager import VersionManager + + +def run_tests(): + # Test it_1: Initialization + assert VersionManager().release() == "0.0.1" + assert VersionManager("1.2.3").release() == "1.2.3" + assert VersionManager("1").release() == "1.0.0" + + # Test it_5: Rollbacks + vm = VersionManager().major().rollback() + assert vm.release() == "0.0.1" + + # Test it_7: Exception Handling + try: + VersionManager("a") + except Exception as e: + assert str(e) == "Error occured while parsing version!" + + # Test it_8: Rollback failure + vm2 = VersionManager() + try: + vm2.rollback() + except Exception as e: + assert str(e) == "Cannot rollback!" + + print("All tests passed!") + + +run_tests() -- 2.30.2