Compare commits
2 Commits
c7aac676a1
...
98578c5d06
| Author | SHA1 | Date | |
|---|---|---|---|
| 98578c5d06 | |||
|
|
715f771d26 |
52
src/version_manager.py
Normal file
52
src/version_manager.py
Normal 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_}"
|
||||||
30
tests/test_version_manager.py
Normal file
30
tests/test_version_manager.py
Normal 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()
|
||||||
Loading…
x
Reference in New Issue
Block a user