-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathtest_download.py
More file actions
76 lines (60 loc) · 2.33 KB
/
test_download.py
File metadata and controls
76 lines (60 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import pytest
from flaky import flaky
from modflow_devtools.download import (
download_and_unzip,
get_release,
get_releases,
)
from modflow_devtools.markers import requires_github
_repos = [
"MODFLOW-ORG/modflow6",
"MODFLOW-ORG/modflow6-nightly-build",
"MODFLOW-ORG/executables",
]
@pytest.mark.parametrize("per_page", [-1, 0, 1.5, 101, 1000])
@pytest.mark.parametrize("retries", [-1, 0, 1.5])
def test_get_releases_bad_params(per_page, retries):
with pytest.raises(ValueError):
get_releases("executables", per_page=per_page, retries=retries, verbose=True)
@flaky
@requires_github
@pytest.mark.parametrize("repo", _repos)
def test_get_releases(repo):
releases = get_releases(repo, verbose=True)
assert any(releases)
assert all("created_at" in r for r in releases)
assets = [a for aa in [r["assets"] for r in releases] for a in aa]
assert all(repo in a["browser_download_url"] for a in assets)
# test page size option
if repo == "MODFLOW-ORG/modflow6-nightly-build":
assert len(releases) <= 31 # 30-day retention period
@flaky
@requires_github
@pytest.mark.parametrize("repo", _repos)
def test_get_release(repo):
tag = "latest"
release = get_release(repo, tag, verbose=True)
assets = release["assets"]
expected_names = ["linux.zip", "macarm.zip", "win64.zip"]
actual_names = [asset["name"] for asset in assets]
if repo == "MODFLOW-ORG/modflow6":
# can remove if modflow6 releases follow asset name
# conventions followed in executables and nightly build repos
assert {a.rpartition("_")[2] for a in actual_names} >= {
a for a in expected_names if not a.startswith("win")
}
else:
assert set(actual_names) >= set(expected_names)
@flaky
@requires_github
@pytest.mark.parametrize("delete_zip", [True, False])
def test_download_and_unzip(function_tmpdir, delete_zip):
zip_name = "mf6.3.0_linux.zip"
dir_name = zip_name.replace(".zip", "")
url = f"https://github.com/MODFLOW-ORG/modflow6/releases/download/6.3.0/{zip_name}"
download_and_unzip(url, function_tmpdir, delete_zip=delete_zip, verbose=True)
assert (function_tmpdir / zip_name).is_file() != delete_zip
dir_path = function_tmpdir / dir_name
assert dir_path.is_dir()
contents = list(dir_path.rglob("*"))
assert len(contents) > 0