Implement version manager kata form codewars (5bc7bb444be9774f100000c3)

This commit is contained in:
Dario Hollbach 2026-03-01 20:40:51 +01:00
parent c7aac676a1
commit 715f771d26
2 changed files with 82 additions and 0 deletions

52
src/version_manager.py Normal file
View File

@ -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_}"

View File

@ -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()