Skip to content

Commit 0fa6d0a

Browse files
authored
Merge pull request #110 from hugovk/add-tests
2 parents 66496ae + 03b237d commit 0fa6d0a

File tree

6 files changed

+171
-11
lines changed

6 files changed

+171
-11
lines changed

.coveragerc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# .coveragerc to control coverage.py
2+
3+
[report]
4+
# Regexes for lines to exclude from consideration
5+
exclude_also =
6+
# Don't complain if non-runnable code isn't run:
7+
if __name__ == .__main__.:
8+
def main

.github/workflows/test.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
name: Test
2+
13
on: [push, pull_request, workflow_dispatch]
24

35
env:
@@ -12,7 +14,12 @@ jobs:
1214
- uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
1315
with:
1416
python-version: 3.x
17+
cache: pip
18+
cache-dependency-path: dev-requirements.txt
1519
- run: |
1620
python -m pip install -r dev-requirements.txt
1721
- run: |
18-
pytest tests/
22+
pytest tests/ --cov . --cov tests --cov-report term --cov-report xml
23+
24+
- name: Upload coverage
25+
uses: codecov/[email protected]

dev-requirements.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
pytest
2+
pytest-cov
23
pytest-mock

dev-requirements.txt

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,63 @@
11
#
2-
# This file is autogenerated by pip-compile with Python 3.10
2+
# This file is autogenerated by pip-compile with Python 3.12
33
# by the following command:
44
#
55
# pip-compile --generate-hashes --output-file=dev-requirements.txt dev-requirements.in
66
#
7-
exceptiongroup==1.2.0 \
8-
--hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \
9-
--hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68
10-
# via pytest
7+
coverage[toml]==7.4.4 \
8+
--hash=sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c \
9+
--hash=sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63 \
10+
--hash=sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7 \
11+
--hash=sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f \
12+
--hash=sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8 \
13+
--hash=sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf \
14+
--hash=sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0 \
15+
--hash=sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384 \
16+
--hash=sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76 \
17+
--hash=sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7 \
18+
--hash=sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d \
19+
--hash=sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70 \
20+
--hash=sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f \
21+
--hash=sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818 \
22+
--hash=sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b \
23+
--hash=sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d \
24+
--hash=sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec \
25+
--hash=sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083 \
26+
--hash=sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2 \
27+
--hash=sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9 \
28+
--hash=sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd \
29+
--hash=sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade \
30+
--hash=sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e \
31+
--hash=sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a \
32+
--hash=sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227 \
33+
--hash=sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87 \
34+
--hash=sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c \
35+
--hash=sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e \
36+
--hash=sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c \
37+
--hash=sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e \
38+
--hash=sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd \
39+
--hash=sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec \
40+
--hash=sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562 \
41+
--hash=sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8 \
42+
--hash=sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677 \
43+
--hash=sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357 \
44+
--hash=sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c \
45+
--hash=sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd \
46+
--hash=sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49 \
47+
--hash=sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286 \
48+
--hash=sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1 \
49+
--hash=sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf \
50+
--hash=sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51 \
51+
--hash=sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409 \
52+
--hash=sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384 \
53+
--hash=sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e \
54+
--hash=sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978 \
55+
--hash=sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57 \
56+
--hash=sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e \
57+
--hash=sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2 \
58+
--hash=sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48 \
59+
--hash=sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4
60+
# via pytest-cov
1161
iniconfig==2.0.0 \
1262
--hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
1363
--hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
@@ -25,12 +75,13 @@ pytest==8.0.0 \
2575
--hash=sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6
2676
# via
2777
# -r dev-requirements.in
78+
# pytest-cov
2879
# pytest-mock
80+
pytest-cov==5.0.0 \
81+
--hash=sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652 \
82+
--hash=sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857
83+
# via -r dev-requirements.in
2984
pytest-mock==3.12.0 \
3085
--hash=sha256:0972719a7263072da3a21c7f4773069bcc7486027d7e8e1f81d98a47e701bc4f \
3186
--hash=sha256:31a40f038c22cad32287bb43932054451ff5583ff094bca6f675df2f8bc1a6e9
3287
# via -r dev-requirements.in
33-
tomli==2.0.1 \
34-
--hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \
35-
--hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f
36-
# via pytest

release.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ def __init__(self, tag_name):
421421
self.level = data[3]
422422
self.serial = int(data[4])
423423
# This has the effect of normalizing the version.
424-
self.text = "{}.{}.{}".format(self.major, self.minor, self.patch)
424+
self.text = self.normalized()
425425
if self.level != "f":
426426
self.text += self.level + str(self.serial)
427427
self.basic_version = '%s.%s' % (self.major, self.minor)

tests/test_release_tag.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
from subprocess import CompletedProcess
2+
3+
import pytest
4+
from pytest_mock import MockerFixture
5+
6+
import release
7+
8+
9+
def test_tag() -> None:
10+
# Arrange
11+
tag_name = "3.12.2"
12+
13+
# Act
14+
tag = release.Tag(tag_name)
15+
16+
# Assert
17+
assert str(tag) == "3.12.2"
18+
assert str(tag.next_minor_release()) == "3.13.0a0"
19+
assert tag.as_tuple() == (3, 12, 2, "f", 0)
20+
assert tag.branch == "3.12"
21+
assert tag.gitname == "v3.12.2"
22+
assert tag.is_alpha_release is False
23+
assert tag.is_feature_freeze_release is False
24+
assert tag.is_release_candidate is False
25+
assert tag.nickname == "3122"
26+
assert tag.normalized() == "3.12.2"
27+
28+
29+
def test_tag_phase() -> None:
30+
# Arrange
31+
alpha = release.Tag("3.13.0a7")
32+
beta1 = release.Tag("3.13.0b1")
33+
beta4 = release.Tag("3.13.0b4")
34+
rc = release.Tag("3.13.0rc3")
35+
36+
# Act / Assert
37+
assert alpha.is_alpha_release is True
38+
assert alpha.is_feature_freeze_release is False
39+
assert alpha.is_release_candidate is False
40+
41+
assert beta1.is_alpha_release is False
42+
assert beta1.is_feature_freeze_release is True
43+
assert beta1.is_release_candidate is False
44+
45+
assert beta4.is_alpha_release is False
46+
assert beta4.is_feature_freeze_release is False
47+
assert beta4.is_release_candidate is False
48+
49+
assert rc.is_alpha_release is False
50+
assert rc.is_feature_freeze_release is False
51+
assert rc.is_release_candidate is True
52+
53+
54+
def test_tag_committed_at_not_found() -> None:
55+
# Arrange
56+
tag = release.Tag("3.12.2")
57+
58+
# Act / Assert
59+
with pytest.raises(SystemExit):
60+
tag.committed_at()
61+
62+
63+
def test_tag_committed(mocker: MockerFixture) -> None:
64+
# Arrange
65+
tag = release.Tag("3.12.2")
66+
67+
proc = CompletedProcess([], 0)
68+
proc.stdout = b"1707250784"
69+
mocker.patch("subprocess.run", return_value=proc)
70+
71+
# Act / Assert
72+
assert str(tag.committed_at) == "2024-02-06 20:19:44+00:00"
73+
74+
75+
def test_tag_dot(mocker: MockerFixture) -> None:
76+
# Arrange
77+
tag_name = "."
78+
mocker.patch("os.getcwd", return_value="/path/to/3.12.2")
79+
80+
# Act
81+
tag = release.Tag(tag_name)
82+
83+
# Assert
84+
assert str(tag) == "3.12.2"
85+
86+
87+
def test_tag_invalid() -> None:
88+
# Arrange
89+
tag_name = "bleep"
90+
91+
# Act / Assert
92+
with pytest.raises(SystemExit):
93+
release.Tag(tag_name)

0 commit comments

Comments
 (0)