Skip to content

Commit ee003bd

Browse files
committed
Tests for redis version
1 parent 64ff0ee commit ee003bd

File tree

1 file changed

+164
-0
lines changed

1 file changed

+164
-0
lines changed

src/tests/test_redis_version.py

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
"""Tests for data models."""
2+
3+
import pytest
4+
5+
from redis_release.models import RedisVersion
6+
7+
8+
class TestRedisVersion:
9+
"""Tests for RedisVersion model."""
10+
11+
def test_parse_basic_version(self):
12+
"""Test parsing basic version strings."""
13+
version = RedisVersion.parse("8.2.1")
14+
assert version.major == 8
15+
assert version.minor == 2
16+
assert version.patch == 1
17+
assert version.suffix == ""
18+
19+
def test_parse_version_with_v_prefix(self):
20+
"""Test parsing version with 'v' prefix."""
21+
version = RedisVersion.parse("v8.2.1")
22+
assert version.major == 8
23+
assert version.minor == 2
24+
assert version.patch == 1
25+
assert version.suffix == ""
26+
27+
def test_parse_version_with_suffix(self):
28+
"""Test parsing version with suffix."""
29+
version = RedisVersion.parse("8.2.1-m01")
30+
assert version.major == 8
31+
assert version.minor == 2
32+
assert version.patch == 1
33+
assert version.suffix == "-m01"
34+
35+
def test_parse_version_without_patch(self):
36+
"""Test parsing version without patch number."""
37+
version = RedisVersion.parse("8.2")
38+
assert version.major == 8
39+
assert version.minor == 2
40+
assert version.patch is None
41+
assert version.suffix == ""
42+
43+
def test_parse_eol_version(self):
44+
"""Test parsing EOL version."""
45+
version = RedisVersion.parse("7.4.0-eol")
46+
assert version.major == 7
47+
assert version.minor == 4
48+
assert version.patch == 0
49+
assert version.suffix == "-eol"
50+
assert version.is_eol is True
51+
52+
def test_parse_rc_internal_version(self):
53+
"""Test parsing RC internal version."""
54+
version = RedisVersion.parse("8.2.1-rc2-int3")
55+
assert version.major == 8
56+
assert version.minor == 2
57+
assert version.patch == 1
58+
assert version.suffix == "-rc2-int3"
59+
assert version.is_rc is True
60+
assert version.is_internal is True
61+
assert len(version.sort_key) > 0
62+
63+
version = RedisVersion.parse("8.4-int")
64+
assert version.major == 8
65+
assert version.minor == 4
66+
assert version.patch == None
67+
assert version.suffix == "-int"
68+
assert version.is_internal is True
69+
assert len(version.sort_key) > 0
70+
71+
def test_parse_invalid_version(self):
72+
"""Test parsing invalid version strings."""
73+
with pytest.raises(ValueError):
74+
RedisVersion.parse("invalid")
75+
76+
with pytest.raises(ValueError):
77+
RedisVersion.parse("0.1.0") # Major version must be >= 1
78+
79+
def test_is_milestone(self):
80+
"""Test milestone detection."""
81+
ga_version = RedisVersion.parse("8.2.1")
82+
milestone_version = RedisVersion.parse("8.2.1-m01")
83+
84+
assert ga_version.is_milestone is False
85+
assert milestone_version.is_milestone is True
86+
87+
def test_mainline_version(self):
88+
"""Test mainline version property."""
89+
version = RedisVersion.parse("8.2.1-m01")
90+
assert version.mainline_version == "8.2"
91+
92+
def test_string_representation(self):
93+
"""Test string representation."""
94+
version1 = RedisVersion.parse("8.2.1")
95+
version2 = RedisVersion.parse("8.2.1-m01")
96+
version3 = RedisVersion.parse("8.2")
97+
98+
assert str(version1) == "8.2.1"
99+
assert str(version2) == "8.2.1-m01"
100+
assert str(version3) == "8.2"
101+
102+
def test_version_comparison(self):
103+
"""Test version comparison for sorting."""
104+
v8_2_1 = RedisVersion.parse("8.2.1")
105+
v8_2_2 = RedisVersion.parse("8.2.2")
106+
v8_2_1_m_01 = RedisVersion.parse("8.2.1-m01")
107+
v8_2_1_rc_01 = RedisVersion.parse("8.2.1-rc01")
108+
v8_2_1_rc_01_int_1 = RedisVersion.parse("8.2.1-rc01-int1")
109+
v8_3_0 = RedisVersion.parse("8.3.0")
110+
v8_3_0_rc_1 = RedisVersion.parse("8.3.0-rc1")
111+
v8_3_0_rc_1_int_1 = RedisVersion.parse("8.3.0-rc1-int1")
112+
v8_3_0_rc_1_int_2 = RedisVersion.parse("8.3.0-rc1-int2")
113+
v8_4 = RedisVersion.parse("8.4")
114+
v8_4_rc_1 = RedisVersion.parse("8.4-rc1")
115+
v8_6_int = RedisVersion.parse("8.6-int")
116+
117+
# Test numeric comparison
118+
assert v8_2_1 < v8_2_2
119+
assert v8_2_2 < v8_3_0
120+
121+
# Test milestone vs GA (GA comes after milestone)
122+
assert v8_2_1_m_01 < v8_2_1
123+
124+
assert v8_3_0_rc_1 < v8_3_0
125+
126+
assert v8_2_1_rc_01 > v8_2_1_m_01
127+
assert v8_2_1_rc_01_int_1 > v8_2_1_m_01
128+
assert v8_2_1_rc_01_int_1 < v8_2_1_rc_01
129+
130+
assert v8_3_0_rc_1_int_1 < v8_3_0_rc_1_int_2
131+
132+
assert v8_3_0_rc_1 > v8_3_0_rc_1_int_1
133+
assert v8_3_0_rc_1 > v8_3_0_rc_1_int_2
134+
135+
# Test sorting
136+
versions = [
137+
v8_3_0,
138+
v8_2_1,
139+
v8_2_1_m_01,
140+
v8_2_2,
141+
v8_3_0_rc_1,
142+
v8_3_0_rc_1_int_1,
143+
v8_3_0_rc_1_int_2,
144+
v8_6_int,
145+
v8_4,
146+
v8_4_rc_1,
147+
v8_2_1_rc_01,
148+
v8_2_1_rc_01_int_1,
149+
]
150+
sorted_versions = sorted(versions)
151+
assert sorted_versions == [
152+
v8_2_1_m_01,
153+
v8_2_1_rc_01_int_1,
154+
v8_2_1_rc_01,
155+
v8_2_1,
156+
v8_2_2,
157+
v8_3_0_rc_1_int_1,
158+
v8_3_0_rc_1_int_2,
159+
v8_3_0_rc_1,
160+
v8_3_0,
161+
v8_4_rc_1,
162+
v8_4,
163+
v8_6_int,
164+
]

0 commit comments

Comments
 (0)