Skip to content

Commit e805f79

Browse files
authored
Merge pull request #21 from StakeSquid/codex/create-tests-for-dockertui-methods-and-utilities
Add basic pytest suite
2 parents 651bde7 + 8eb6bdb commit e805f79

3 files changed

Lines changed: 59 additions & 1 deletion

File tree

pyproject.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,9 @@ dtop = "dtop.main:main"
5252
include = ["dtop*"]
5353

5454
[tool.setuptools.package-data]
55-
dtop = ["utils/normalize_logs.py"]
55+
dtop = ["utils/normalize_logs.py"]
56+
57+
[tool.pytest.ini_options]
58+
addopts = "-ra"
59+
testpaths = ["tests"]
60+
python_files = ["test_*.py"]

tests/__init__.py

Whitespace-only changes.

tests/test_basic.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import types
2+
import datetime
3+
import pytest
4+
from dtop.core.docker_tui import DockerTUI
5+
6+
class DummyContainer:
7+
def __init__(self, id, name, image_tags=None, status='running'):
8+
self.id = id
9+
self.name = name
10+
self.image = types.SimpleNamespace(tags=image_tags or [])
11+
self.status = status
12+
self.attrs = {
13+
'Created': '2024-01-01T00:00:00Z',
14+
'State': {
15+
'Running': status == 'running',
16+
'StartedAt': '2024-01-01T00:00:00Z'
17+
}
18+
}
19+
20+
class DummyClient:
21+
def __init__(self, containers):
22+
self.containers = types.SimpleNamespace(list=lambda all=True: containers)
23+
24+
@pytest.fixture
25+
def dummy_tui(monkeypatch):
26+
containers = [
27+
DummyContainer('1', 'alpha', ['img1'], 'running'),
28+
DummyContainer('2', 'bravo', ['img2'], 'exited')
29+
]
30+
monkeypatch.setattr('docker.from_env', lambda: DummyClient(containers))
31+
monkeypatch.setattr('dtop.core.stats.schedule_stats_collection_sync', lambda *a, **k: None)
32+
return DockerTUI()
33+
34+
def test_fetch_containers(dummy_tui):
35+
conts = dummy_tui.fetch_containers()
36+
assert len(conts) == 2
37+
assert {c.name for c in conts} == {'alpha', 'bravo'}
38+
39+
def test_sort_containers(dummy_tui):
40+
containers = dummy_tui.fetch_containers()
41+
dummy_tui.sort_column = 0 # NAME
42+
sorted_list = dummy_tui.sort_containers(containers)
43+
assert [c.name for c in sorted_list] == ['alpha', 'bravo']
44+
45+
from dtop.utils.utils import format_bytes, format_datetime
46+
47+
def test_format_bytes():
48+
assert format_bytes(1024) == '1.0KB'
49+
assert format_bytes(1048576) == '1.0MB'
50+
51+
def test_format_datetime():
52+
iso = '2024-05-05T12:34:56Z'
53+
assert format_datetime(iso) == '2024-05-05 12:34:56'

0 commit comments

Comments
 (0)