Skip to content

Commit 7ed8d89

Browse files
authored
update test fixture to use matchers from dvc.testing (#10940)
1 parent 9fb7617 commit 7ed8d89

14 files changed

Lines changed: 65 additions & 24 deletions

File tree

dvc/testing/matchers.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections.abc import Iterable, Mapping
2-
from typing import TYPE_CHECKING, Any, Optional
2+
from typing import TYPE_CHECKING, Any, Optional, Union
33

44
if TYPE_CHECKING:
55
import builtins
@@ -68,8 +68,37 @@ def __eq__(self, other: object) -> bool:
6868
return all(getattr(other, name) == v for name, v in self.attribs.items())
6969

7070

71+
class instance_of: # noqa: N801, PLW1641
72+
def __init__(self, expected_type: Union[Any, tuple[Any, ...]]) -> None:
73+
self.expected_type = expected_type
74+
75+
def __repr__(self) -> str:
76+
if isinstance(self.expected_type, tuple):
77+
inner = f"({', '.join(t.__name__ for t in self.expected_type)})"
78+
else:
79+
inner = self.expected_type.__name__
80+
return f"{self.__class__.__name__}({inner})"
81+
82+
def __eq__(self, other: object) -> bool:
83+
return isinstance(other, self.expected_type)
84+
85+
86+
class any_of: # noqa: N801, PLW1641
87+
def __init__(self, *items: Any) -> None:
88+
self.items = sorted(items)
89+
90+
def __repr__(self) -> str:
91+
inner = ", ".join(map(repr, self.items))
92+
return f"any_of({inner})"
93+
94+
def __eq__(self, other: object) -> bool:
95+
return other in self.items
96+
97+
7198
__all__ = [
99+
"any_of",
72100
"attrs",
73101
"dict",
102+
"instance_of",
74103
"unordered",
75104
]

tests/func/metrics/test_diff.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import pytest
55

66
from dvc.cli import main
7+
from dvc.testing import matchers as M
78
from dvc.utils import relpath
89
from dvc.utils.serialize import JSONFileCorruptedError
910

@@ -95,7 +96,7 @@ def _gen(val):
9596
assert dvc.metrics.diff(a_rev="HEAD~2") == {}
9697

9798

98-
def test_metrics_diff_broken_json(M, tmp_dir, scm, dvc, run_copy_metrics):
99+
def test_metrics_diff_broken_json(tmp_dir, scm, dvc, run_copy_metrics):
99100
metrics = {"a": {"b": {"c": 1, "d": 1, "e": "3"}}}
100101
(tmp_dir / "m_temp.json").dump(metrics)
101102
run_copy_metrics(
@@ -143,7 +144,7 @@ def test_metrics_diff_new_metric(tmp_dir, scm, dvc, run_copy_metrics):
143144
}
144145

145146

146-
def test_metrics_diff_deleted_metric(M, tmp_dir, scm, dvc, run_copy_metrics):
147+
def test_metrics_diff_deleted_metric(tmp_dir, scm, dvc, run_copy_metrics):
147148
metrics = {"a": {"b": {"c": 1, "d": 1, "e": "3"}}}
148149
(tmp_dir / "m_temp.json").dump(metrics)
149150
run_copy_metrics(

tests/func/metrics/test_show.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from dvc.exceptions import OverlappingOutputPathsError
1212
from dvc.repo import Repo
1313
from dvc.repo.metrics.show import FileResult, Result
14+
from dvc.testing import matchers as M
1415
from dvc.utils.fs import remove
1516
from dvc.utils.serialize import JSONFileCorruptedError
1617
from dvc_data.index import DataIndexDirError
@@ -246,7 +247,7 @@ def test_show_malformed_metric(tmp_dir, scm, dvc, caplog):
246247
)
247248

248249

249-
def test_metrics_show_no_target(M, tmp_dir, dvc, capsys):
250+
def test_metrics_show_no_target(tmp_dir, dvc, capsys):
250251
assert dvc.metrics.show(targets=["metrics.json"]) == {
251252
"": {"data": {"metrics.json": {"error": M.instance_of(FileNotFoundError)}}}
252253
}
@@ -356,7 +357,7 @@ def test_top_level_parametrized(tmp_dir, dvc):
356357
}
357358

358359

359-
def test_metric_in_a_tracked_directory_with_missing_dir_file(M, tmp_dir, dvc):
360+
def test_metric_in_a_tracked_directory_with_missing_dir_file(tmp_dir, dvc):
360361
tmp_dir.dvc_gen({"dir": {"file": "2"}})
361362
(tmp_dir / "dvc.yaml").dump({"metrics": [join("dir", "file")]})
362363
shutil.rmtree(tmp_dir / "dir") # remove from workspace

tests/func/params/test_diff.py

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

33
import pytest
44

5+
from dvc.testing import matchers as M
56
from dvc.utils import relpath
67

78

@@ -54,7 +55,7 @@ def test_diff_new(tmp_dir, scm, dvc):
5455
}
5556

5657

57-
def test_diff_deleted(M, tmp_dir, scm, dvc):
58+
def test_diff_deleted(tmp_dir, scm, dvc):
5859
tmp_dir.gen("params.yaml", "foo: bar")
5960
dvc.run(cmd="echo params.yaml", params=["foo"], name="echo-params")
6061
scm.add(["params.yaml", "Dvcfile"])

tests/func/params/test_show.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from dvc.dvcfile import PROJECT_FILE
77
from dvc.repo import Repo
88
from dvc.repo.metrics.show import FileResult, Result
9+
from dvc.testing import matchers as M
910
from dvc_data.index import DataIndexDirError
1011

1112

@@ -197,7 +198,7 @@ def test_top_level_parametrized(tmp_dir, dvc):
197198
}
198199

199200

200-
def test_param_in_a_tracked_directory_with_missing_dir_file(M, tmp_dir, dvc):
201+
def test_param_in_a_tracked_directory_with_missing_dir_file(tmp_dir, dvc):
201202
tmp_dir.dvc_gen({"dir": {"file": "2"}})
202203
(tmp_dir / "dvc.yaml").dump({"params": [join("dir", "file")]})
203204
shutil.rmtree(tmp_dir / "dir") # remove from workspace

tests/func/repro/test_repro.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from dvc.stage import PipelineStage, Stage
1616
from dvc.stage.cache import RunCacheNotSupported
1717
from dvc.stage.exceptions import StageFileDoesNotExistError, StageNotFound
18+
from dvc.testing import matchers as M
1819
from dvc.utils.fs import remove
1920
from dvc.utils.serialize import modify_yaml
2021
from dvc_data.hashfile.hash import file_md5
@@ -55,7 +56,7 @@ def test_repro_frozen(tmp_dir, dvc, run_copy):
5556
assert stages == [data_stage, stage0]
5657

5758

58-
def test_downstream(M, tmp_dir, dvc):
59+
def test_downstream(tmp_dir, dvc):
5960
# The dependency graph should look like this:
6061
#
6162
# E

tests/func/test_data_status.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ def test_root_from_file_to_dir(tmp_dir, dvc, scm):
577577
}
578578

579579

580-
def test_empty_dir(tmp_dir, scm, dvc, M):
580+
def test_empty_dir(tmp_dir, scm, dvc):
581581
# regression testing for https://github.com/treeverse/dvc/issues/8958
582582
tmp_dir.dvc_gen({"data": {"foo": "foo"}})
583583
remove("data")

tests/func/test_import_db.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import pytest
77
from funcy import compact
88

9+
from dvc.testing import matchers as M
10+
911

1012
@pytest.fixture
1113
def db_path(tmp_dir):
@@ -46,7 +48,7 @@ def load_data(file, output_format):
4648
({"table": "model"}, "model"),
4749
],
4850
)
49-
def test(M, tmp_dir, scm, dvc, db_connection, seed_db, output_format, args, file_name):
51+
def test(tmp_dir, scm, dvc, db_connection, seed_db, output_format, args, file_name):
5052
seed_db(values=range(5))
5153
if output_format == "json":
5254
file_size = 96, 192

tests/func/test_ls.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from dvc.repo import Repo
1111
from dvc.repo.ls import _ls_tree, ls_tree
1212
from dvc.scm import CloneError
13+
from dvc.testing import matchers as M
1314

1415
FS_STRUCTURE = {
1516
"README.md": "content",
@@ -460,7 +461,7 @@ def test_ls_shows_pipeline_tracked_outs(tmp_dir, dvc, scm, run_copy):
460461
match_files(files, ((("bar",), True),))
461462

462463

463-
def test_ls_granular(erepo_dir, M):
464+
def test_ls_granular(erepo_dir):
464465
with erepo_dir.chdir():
465466
erepo_dir.dvc_gen(
466467
{
@@ -624,7 +625,7 @@ def _list_files(repo, path=None):
624625
assert _list_files(subrepo, "dvc_dir") == {"lorem"}
625626

626627

627-
def test_broken_symlink(tmp_dir, dvc, M):
628+
def test_broken_symlink(tmp_dir, dvc):
628629
from dvc.fs import system
629630

630631
tmp_dir.gen("file", "content")
@@ -654,7 +655,7 @@ def test_broken_symlink(tmp_dir, dvc, M):
654655
]
655656

656657

657-
def test_ls_broken_dir(tmp_dir, dvc, M):
658+
def test_ls_broken_dir(tmp_dir, dvc):
658659
from dvc_data.index import DataIndexDirError
659660

660661
tmp_dir.dvc_gen(
@@ -836,7 +837,7 @@ def _simplify_tree(files):
836837
return ret
837838

838839

839-
def test_ls_tree(M, tmp_dir, scm, dvc):
840+
def test_ls_tree(tmp_dir, scm, dvc):
840841
tmp_dir.scm_gen(FS_STRUCTURE, commit="init")
841842
tmp_dir.dvc_gen(DVC_STRUCTURE, commit="dvc")
842843

@@ -887,7 +888,7 @@ def test_ls_tree(M, tmp_dir, scm, dvc):
887888
}
888889

889890

890-
def test_ls_tree_dvc_only(M, tmp_dir, scm, dvc):
891+
def test_ls_tree_dvc_only(tmp_dir, scm, dvc):
891892
tmp_dir.scm_gen(FS_STRUCTURE, commit="init")
892893
tmp_dir.dvc_gen(DVC_STRUCTURE, commit="dvc")
893894

@@ -905,7 +906,7 @@ def test_ls_tree_dvc_only(M, tmp_dir, scm, dvc):
905906
assert _simplify_tree(files) == expected
906907

907908

908-
def test_ls_tree_maxdepth(M, tmp_dir, scm, dvc):
909+
def test_ls_tree_maxdepth(tmp_dir, scm, dvc):
909910
tmp_dir.scm_gen(FS_STRUCTURE, commit="init")
910911
tmp_dir.dvc_gen(DVC_STRUCTURE, commit="dvc")
911912

tests/func/test_virtual_directory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def test_virtual_update_noop(tmp_dir, dvc, remote):
166166
assert not dvc.push()
167167

168168

169-
def test_partial_checkout_and_update(M, tmp_dir, dvc, remote):
169+
def test_partial_checkout_and_update(tmp_dir, dvc, remote):
170170
dir1 = {f"{i}.txt": f"dir1 {i}" for i in range(10)}
171171
dir2 = {f"{i}.txt": f"dir2 {i}" for i in range(10)}
172172
tmp_dir.gen({"dir": {"foo": "foo", "subdir": dir1, "subdir2": dir2}})

0 commit comments

Comments
 (0)