Skip to content

Commit

Permalink
Adjust version comparator
Browse files Browse the repository at this point in the history
  • Loading branch information
felipecrp committed Aug 16, 2024
1 parent 65b0651 commit 859800d
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 12 deletions.
54 changes: 51 additions & 3 deletions releasy/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ def __init__(
name: str = None,
version: ReleaseVersion = None,
format: ReleaseFormat = None) -> None:
self.name = name
self.version = version
self.name = name
if not name and version:
self.name = ".".join(str(s) for s in version.number)
self.format = format
self.previous: Set[Release] = None

Expand All @@ -32,6 +34,9 @@ def type(self) -> ReleaseType:
def commits(self) -> Set[Change]:
pass

def __repr__(self) -> str:
return self.name


class ReleaseVersion:
"""
Expand All @@ -42,11 +47,54 @@ class ReleaseVersion:
- PATCH
"""

def __init__(self, parts: List[str], type: ReleaseType, format: ReleaseFormat) -> None:
self.parts = parts
def __init__(self, number: List[str], type: ReleaseType, format: ReleaseFormat) -> None:
self.number = number
self.name = ".".join(str(s) for s in number)
self.type = type
self.format = format

def __eq__(self, other: ReleaseVersion):
if not isinstance(other, ReleaseVersion):
return False

for a,b in zip(self.number, other.number):
if a != b:
return False

return True

def __lt__(self, other: ReleaseVersion):
if not isinstance(other, ReleaseVersion):
return False

for a,b in zip(self.number, other.number):
if a > b:
return False

if a == b:
return False

return True

def __le__(self, other: ReleaseVersion):
return self < other or self == other

def __gt__(self, other: ReleaseVersion):
if not isinstance(other, ReleaseVersion):
return False

for a,b in zip(self.number, other.number):
if a > b:
return True

return False

def __ge__(self, other: ReleaseVersion):
return self > other or self == other

def __repr__(self) -> str:
return self.name


class ReleaseFormat(ABC):
"""
Expand Down
42 changes: 33 additions & 9 deletions tests/test_model.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

from releasy.model import Release, ReleaseType, SemanticVersioningFormat

class describe_release:
class DescribeRelease:
def it_has_name(self):
release = Release()
release.name = "1.0.0"
Expand All @@ -10,27 +10,27 @@ def it_has_name(self):
release = Release("1.1.0")
assert release.name == "1.1.0"


def it_has_version(self):
releaseFormat = SemanticVersioningFormat()
version = releaseFormat.parse("1.0.0")
release = Release(version=version)
assert release.version.parts == [1,0,0]
assert release.version.type == ReleaseType.MAJOR
assert release.version.format.name == "Semantic Versioning"


def it_has_type(self):
release = Release()
pass
releaseFormat = SemanticVersioningFormat()
version = releaseFormat.parse("1.0.0")
release = Release(version=version)
assert release.type == ReleaseType.MAJOR


class describe_release_version:
def it_has_parts(self):
class DescribeReleaseVersion:
def it_has_number(self):
releaseFormat = SemanticVersioningFormat()
version = releaseFormat.parse("1.0.0")
release = Release(version=version)
assert release.version.parts == [1,0,0]
assert release.version.number == [1,0,0]

def it_has_type(self):
releaseFormat = SemanticVersioningFormat()
Expand All @@ -44,8 +44,32 @@ def it_has_format(self):
release = Release(version=version)
assert release.version.format == releaseFormat

def it_is_comparable(self):
releaseFormat = SemanticVersioningFormat()
release_a = Release(version=releaseFormat.parse("1.0.0"))
release_a2 = Release(version=releaseFormat.parse("1.0.0"))
release_b = Release(version=releaseFormat.parse("1.0.1"))

assert release_a.version == release_a2.version
assert release_a.version != release_b.version

assert release_a.version < release_b.version
assert release_b.version > release_a.version

assert not (release_a.version < release_a2.version)
assert not (release_a.version > release_a2.version)

def it_is_sortable(self):
releaseFormat = SemanticVersioningFormat()
version_a = releaseFormat.parse("1.0.0")
version_b = releaseFormat.parse("1.0.1")
version_c = releaseFormat.parse("1.1.0")
versions = [version_c, version_a, version_b]
# sorted_versions = sorted(versions)
# assert sorted_versions == [version_a, version_b, version_c]


class describe_semantic_versioning_format:
class DescribeSemanticVersioningFormat:
def it_has_version_number(self):
releaseFormat = SemanticVersioningFormat()
version = releaseFormat.parse("1.0.0")
Expand Down

0 comments on commit 859800d

Please sign in to comment.