Skip to content

Commit cf2cb85

Browse files
committed
ci: coverage
1 parent 5d351da commit cf2cb85

File tree

5 files changed

+99
-69
lines changed

5 files changed

+99
-69
lines changed

.github/workflows/publish.yaml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,22 @@ jobs:
88
test:
99
runs-on: ${{ matrix.os }}
1010
strategy:
11+
12+
max-parallel: 1
13+
fail-fast: true
1114
matrix:
12-
os: [ubuntu-latest, macos-latest, windows-latest]
15+
os: [ubuntu-latest, windows-latest, macos-latest]
1316
python-version: ["3.10", "3.11", "3.12"]
17+
1418
env:
1519
TOGGL_WORKSPACE_ID: ${{ secrets.TOGGL_WORKSPACE_ID }}
1620
TOGGL_API_TOKEN: ${{ secrets.TOGGL_API_TOKEN }}
21+
GH_ACTION: "ACTION"
22+
1723

1824
steps:
19-
- uses: actions/checkout@v3
20-
25+
- uses: actions/checkout@v4
26+
2127
- name: Set up Python ${{ matrix.python-version }}
2228
uses: actions/setup-python@v3
2329
with:
@@ -27,8 +33,7 @@ jobs:
2733
run: |
2834
python -m pip install --upgrade pip
2935
pip install poetry
30-
poetry install --with dev
31-
pip install tox ruff mypy
36+
pip install tox-gh-actions tox ruff mypy
3237
3338
- name: Type check
3439
run: mypy toggl_api
@@ -39,6 +44,12 @@ jobs:
3944
- name: Run tests
4045
run: tox
4146

47+
- name: Upload coverage reports to Codecov
48+
if: ${{ matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' }}
49+
uses: codecov/[email protected]
50+
env:
51+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
52+
4253
build:
4354
needs: test
4455
runs-on: ubuntu-latest

coverage.xml

Lines changed: 49 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
<?xml version="1.0" ?>
2-
<coverage version="7.5.3" timestamp="1718028205266" lines-valid="898" lines-covered="789" line-rate="0.8786" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
2+
<coverage version="7.5.3" timestamp="1718042024371" lines-valid="887" lines-covered="782" line-rate="0.8816" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0">
33
<!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.5.3 -->
44
<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
55
<sources>
66
<source>/home/dk/dev/toggl-api-wrapper</source>
77
</sources>
88
<packages>
9-
<package name="toggl_api" line-rate="0.6622" branch-rate="0" complexity="0">
9+
<package name="toggl_api" line-rate="0.6667" branch-rate="0" complexity="0">
1010
<classes>
1111
<class name="__init__.py" filename="toggl_api/__init__.py" complexity="0" line-rate="1" branch-rate="0">
1212
<methods/>
1313
<lines>
1414
<line number="1" hits="1"/>
15-
<line number="11" hits="1"/>
16-
<line number="18" hits="1"/>
17-
<line number="20" hits="1"/>
18-
<line number="21" hits="1"/>
15+
<line number="2" hits="1"/>
16+
<line number="15" hits="1"/>
17+
<line number="22" hits="1"/>
1918
<line number="24" hits="1"/>
19+
<line number="25" hits="1"/>
20+
<line number="28" hits="1"/>
2021
</lines>
2122
</class>
2223
<class name="config.py" filename="toggl_api/config.py" complexity="0" line-rate="0.45" branch-rate="0">
@@ -104,7 +105,7 @@
104105
</class>
105106
</classes>
106107
</package>
107-
<package name="toggl_api.modules" line-rate="0.8763" branch-rate="0" complexity="0">
108+
<package name="toggl_api.modules" line-rate="0.8746" branch-rate="0" complexity="0">
108109
<classes>
109110
<class name="__init__.py" filename="toggl_api/modules/__init__.py" complexity="0" line-rate="1" branch-rate="0">
110111
<methods/>
@@ -115,7 +116,8 @@
115116
<line number="4" hits="1"/>
116117
<line number="5" hits="1"/>
117118
<line number="6" hits="1"/>
118-
<line number="8" hits="1"/>
119+
<line number="7" hits="1"/>
120+
<line number="9" hits="1"/>
119121
</lines>
120122
</class>
121123
<class name="client.py" filename="toggl_api/modules/client.py" complexity="0" line-rate="0.8431" branch-rate="0">
@@ -247,41 +249,28 @@
247249
<line number="159" hits="1"/>
248250
</lines>
249251
</class>
250-
<class name="tag.py" filename="toggl_api/modules/tag.py" complexity="0" line-rate="0.9688" branch-rate="0">
252+
<class name="tag.py" filename="toggl_api/modules/tag.py" complexity="0" line-rate="1" branch-rate="0">
251253
<methods/>
252254
<lines>
253255
<line number="1" hits="1"/>
254-
<line number="3" hits="1"/>
255-
<line number="4" hits="1"/>
256-
<line number="7" hits="1"/>
257-
<line number="8" hits="1"/>
256+
<line number="2" hits="1"/>
257+
<line number="5" hits="1"/>
258+
<line number="6" hits="1"/>
259+
<line number="11" hits="1"/>
258260
<line number="13" hits="1"/>
259-
<line number="15" hits="1"/>
260-
<line number="16" hits="1"/>
261-
<line number="17" hits="1"/>
262-
<line number="18" hits="1"/>
263-
<line number="25" hits="1"/>
261+
<line number="14" hits="1"/>
262+
<line number="21" hits="1"/>
264263
<line number="26" hits="1"/>
265-
<line number="27" hits="1"/>
264+
<line number="33" hits="1"/>
266265
<line number="34" hits="1"/>
267266
<line number="35" hits="1"/>
268267
<line number="36" hits="1"/>
269-
<line number="37" hits="1"/>
268+
<line number="38" hits="1"/>
270269
<line number="39" hits="1"/>
271270
<line number="40" hits="1"/>
272-
<line number="41" hits="1"/>
273271
<line number="42" hits="1"/>
274272
<line number="43" hits="1"/>
275273
<line number="44" hits="1"/>
276-
<line number="45" hits="1"/>
277-
<line number="46" hits="0"/>
278-
<line number="48" hits="1"/>
279-
<line number="50" hits="1"/>
280-
<line number="51" hits="1"/>
281-
<line number="52" hits="1"/>
282-
<line number="54" hits="1"/>
283-
<line number="55" hits="1"/>
284-
<line number="56" hits="1"/>
285274
</lines>
286275
</class>
287276
<class name="tracker.py" filename="toggl_api/modules/tracker.py" complexity="0" line-rate="0.8333" branch-rate="0">
@@ -853,7 +842,7 @@
853842
</class>
854843
</classes>
855844
</package>
856-
<package name="toggl_api.modules.models" line-rate="0.9383" branch-rate="0" complexity="0">
845+
<package name="toggl_api.modules.models" line-rate="0.9568" branch-rate="0" complexity="0">
857846
<classes>
858847
<class name="__init__.py" filename="toggl_api/modules/models/__init__.py" complexity="0" line-rate="0.9333" branch-rate="0">
859848
<methods/>
@@ -981,7 +970,7 @@
981970
<line number="223" hits="1"/>
982971
</lines>
983972
</class>
984-
<class name="schema.py" filename="toggl_api/modules/models/schema.py" complexity="0" line-rate="0.913" branch-rate="0">
973+
<class name="schema.py" filename="toggl_api/modules/models/schema.py" complexity="0" line-rate="0.9783" branch-rate="0">
985974
<methods/>
986975
<lines>
987976
<line number="1" hits="1"/>
@@ -998,38 +987,38 @@
998987
<line number="30" hits="1"/>
999988
<line number="31" hits="1"/>
1000989
<line number="33" hits="1"/>
1001-
<line number="34" hits="1"/>
1002-
<line number="35" hits="1"/>
1003-
<line number="36" hits="0"/>
1004-
<line number="37" hits="1"/>
1005-
<line number="38" hits="0"/>
1006-
<line number="39" hits="0"/>
990+
<line number="38" hits="1"/>
991+
<line number="39" hits="1"/>
1007992
<line number="40" hits="1"/>
1008-
<line number="41" hits="0"/>
993+
<line number="41" hits="1"/>
994+
<line number="42" hits="0"/>
1009995
<line number="43" hits="1"/>
1010-
<line number="48" hits="1"/>
1011-
<line number="49" hits="1"/>
1012-
<line number="50" hits="1"/>
996+
<line number="44" hits="1"/>
997+
<line number="45" hits="1"/>
998+
<line number="47" hits="1"/>
999+
<line number="52" hits="1"/>
10131000
<line number="53" hits="1"/>
10141001
<line number="54" hits="1"/>
1015-
<line number="56" hits="1"/>
1016-
<line number="69" hits="1"/>
1017-
<line number="71" hits="1"/>
1018-
<line number="80" hits="1"/>
1019-
<line number="82" hits="1"/>
1020-
<line number="94" hits="1"/>
1021-
<line number="96" hits="1"/>
1022-
<line number="105" hits="1"/>
1023-
<line number="107" hits="1"/>
1024-
<line number="121" hits="1"/>
1025-
<line number="127" hits="1"/>
1026-
<line number="133" hits="1"/>
1027-
<line number="135" hits="1"/>
1028-
<line number="138" hits="1"/>
1029-
<line number="143" hits="1"/>
1030-
<line number="144" hits="1"/>
1031-
<line number="145" hits="1"/>
1032-
<line number="146" hits="1"/>
1002+
<line number="57" hits="1"/>
1003+
<line number="58" hits="1"/>
1004+
<line number="60" hits="1"/>
1005+
<line number="73" hits="1"/>
1006+
<line number="75" hits="1"/>
1007+
<line number="84" hits="1"/>
1008+
<line number="86" hits="1"/>
1009+
<line number="98" hits="1"/>
1010+
<line number="100" hits="1"/>
1011+
<line number="109" hits="1"/>
1012+
<line number="111" hits="1"/>
1013+
<line number="125" hits="1"/>
1014+
<line number="131" hits="1"/>
1015+
<line number="137" hits="1"/>
1016+
<line number="139" hits="1"/>
1017+
<line number="142" hits="1"/>
1018+
<line number="147" hits="1"/>
1019+
<line number="148" hits="1"/>
1020+
<line number="149" hits="1"/>
1021+
<line number="150" hits="1"/>
10331022
</lines>
10341023
</class>
10351024
</classes>

poetry.lock

Lines changed: 22 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ pytest-sqlalchemy-mock = "^0.1.6"
4545
faker = "^25.2.0"
4646
pytest-reportlog = "^0.4.0"
4747
mkdocs-callouts = "^1.13.2"
48+
pytest-cov = "^5.0.0"
4849

4950
[tool.poetry.group.docs.dependencies]
5051
mkdocs = "^1.6.0"
@@ -188,7 +189,7 @@ markers = [
188189
"slow: Tests that are slow to run or have delays included.",
189190
]
190191
testpaths = ["tests"]
191-
addopts = "--report-log=logs/pytest.jsonl"
192+
addopts = "--report-log=logs/pytest.jsonl --cov --cov-append --cov-report xml"
192193

193194

194195
[tool.tox]
@@ -216,7 +217,6 @@ python =
216217
3.10: py310
217218
3.11: py311
218219
3.12: ruff, mypy, py312
219-
3.13: py313
220220
221221
[testenv:mypy]
222222
allowlist_externals = mypy, poetry

tests/conftest.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import contextlib
44
import os
5+
import time
56
from datetime import datetime, timedelta, timezone
67
from pathlib import Path
78

@@ -20,6 +21,13 @@
2021
from toggl_api.modules.workspace import WorkspaceEndpoint
2122

2223

24+
@pytest.fixture(autouse=True)
25+
def _rate_limit():
26+
yield
27+
if os.environ.get("GH_ACTION"):
28+
time.sleep(1)
29+
30+
2331
@pytest.fixture(scope="session")
2432
def faker():
2533
return Faker()
@@ -39,7 +47,8 @@ def cache_path():
3947
path = Path(__file__).resolve().parents[0] / Path("cache")
4048
yield path
4149
if path.exists():
42-
cleanup(path)
50+
with contextlib.suppress(PermissionError):
51+
cleanup(path)
4352

4453

4554
@pytest.fixture(scope="session")

0 commit comments

Comments
 (0)