convert tests to pytest function tests

This commit is contained in:
Fábio Santos
2020-01-22 14:04:52 +00:00
parent bdf665a34a
commit e41aa00c20
3 changed files with 94 additions and 86 deletions
+65 -65
View File
@@ -29,6 +29,8 @@ from dvc.utils.stage import load_stage_file
from tests.basic_env import TestDvc
from tests.utils import get_gitignore_content
dvc_module = dvc # to disambiguate between the module and the fixture
def test_add(tmp_dir, dvc):
stage, = tmp_dir.dvc_gen({"foo": "foo"})
@@ -250,65 +252,66 @@ class TestDvcWithMocker(TestDvc):
self.mocker = mocker
class TestShouldUpdateStateEntryForFileAfterAdd(TestDvcWithMocker):
def test(self):
file_md5_counter = self.mocker.spy(dvc.remote.local, "file_md5")
def test_should_update_state_entry_for_file_after_add(mocker, dvc, tmp_dir):
file_md5_counter = mocker.spy(dvc_module.remote.local, "file_md5")
tmp_dir.gen("foo", "foo")
ret = main(["config", "cache.type", "copy"])
self.assertEqual(ret, 0)
ret = main(["config", "cache.type", "copy"])
assert ret == 0
ret = main(["add", self.FOO])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 1)
ret = main(["add", "foo"])
assert ret == 0
assert file_md5_counter.mock.call_count == 1
ret = main(["status"])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 1)
ret = main(["status"])
assert ret == 0
assert file_md5_counter.mock.call_count == 1
ret = main(["run", "-d", self.FOO, "echo foo"])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 1)
ret = main(["run", "-d", "foo", "echo foo"])
assert ret == 0
assert file_md5_counter.mock.call_count == 1
os.rename(self.FOO, self.FOO + ".back")
ret = main(["checkout"])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 1)
os.rename("foo", "foo.back")
ret = main(["checkout"])
assert ret == 0
assert file_md5_counter.mock.call_count == 1
ret = main(["status"])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 1)
ret = main(["status"])
assert ret == 0
assert file_md5_counter.mock.call_count == 1
class TestShouldUpdateStateEntryForDirectoryAfterAdd(TestDvcWithMocker):
def test(self):
file_md5_counter = self.mocker.spy(dvc.remote.local, "file_md5")
def test_should_update_state_entry_for_directory_after_add(
mocker, dvc, tmp_dir
):
file_md5_counter = mocker.spy(dvc_module.remote.local, "file_md5")
ret = main(["config", "cache.type", "copy"])
self.assertEqual(ret, 0)
tmp_dir.gen({"data/data": "foo", "data/data_sub/sub_data": "foo"})
ret = main(["add", self.DATA_DIR])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 3)
ret = main(["config", "cache.type", "copy"])
assert ret == 0
ret = main(["status"])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 3)
ret = main(["add", "data"])
assert ret == 0
assert file_md5_counter.mock.call_count == 3
ls = "dir" if os.name == "nt" else "ls"
ret = main(
["run", "-d", self.DATA_DIR, "{} {}".format(ls, self.DATA_DIR)]
)
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 3)
ret = main(["status"])
assert ret == 0
assert file_md5_counter.mock.call_count == 3
os.rename(self.DATA_DIR, self.DATA_DIR + ".back")
ret = main(["checkout"])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 3)
ls = "dir" if os.name == "nt" else "ls"
ret = main(["run", "-d", "data", "{} {}".format(ls, "data")])
assert ret == 0
assert file_md5_counter.mock.call_count == 3
ret = main(["status"])
self.assertEqual(ret, 0)
self.assertEqual(file_md5_counter.mock.call_count, 3)
os.rename("data", "data" + ".back")
ret = main(["checkout"])
assert ret == 0
assert file_md5_counter.mock.call_count == 3
ret = main(["status"])
assert ret == 0
assert file_md5_counter.mock.call_count == 3
class TestAddCommit(TestDvc):
@@ -324,20 +327,18 @@ class TestAddCommit(TestDvc):
self.assertEqual(len(os.listdir(self.dvc.cache.local.cache_dir)), 1)
class TestShouldCollectDirCacheOnlyOnce(TestDvcWithMocker):
def test(self):
get_dir_checksum_counter = self.mocker.spy(
RemoteLOCAL, "get_dir_checksum"
)
ret = main(["add", self.DATA_DIR])
self.assertEqual(0, ret)
def test_should_collect_dir_cache_only_once(mocker, tmp_dir, dvc):
tmp_dir.gen({"data/data": "foo"})
get_dir_checksum_counter = mocker.spy(RemoteLOCAL, "get_dir_checksum")
ret = main(["add", "data"])
assert ret == 0
ret = main(["status"])
self.assertEqual(0, ret)
ret = main(["status"])
assert ret == 0
ret = main(["status"])
self.assertEqual(0, ret)
self.assertEqual(1, get_dir_checksum_counter.mock.call_count)
ret = main(["status"])
assert ret == 0
assert get_dir_checksum_counter.mock.call_count == 1
class SymlinkAddTestBase(TestDvc):
@@ -478,16 +479,15 @@ def test_should_cleanup_after_failed_add(tmp_dir, scm, dvc, repo_template):
assert "/bar" not in gitignore_content
class TestShouldNotTrackGitInternalFiles(TestDvcWithMocker):
def test(self):
stage_creator_spy = self.mocker.spy(dvc.repo.add, "_create_stages")
def test_should_not_track_git_internal_files(mocker, dvc, tmp_dir):
stage_creator_spy = mocker.spy(dvc_module.repo.add, "_create_stages")
ret = main(["add", "-R", self.dvc.root_dir])
self.assertEqual(0, ret)
ret = main(["add", "-R", dvc.root_dir])
assert ret == 0
created_stages_filenames = stage_creator_spy.mock.call_args[0][1]
for fname in created_stages_filenames:
self.assertNotIn(".git", fname)
created_stages_filenames = stage_creator_spy.mock.call_args[0][1]
for fname in created_stages_filenames:
assert ".git" not in fname
class TestAddUnprotected(TestDvc):
+15 -21
View File
@@ -583,27 +583,21 @@ class TestRecursiveSyncOperations(Local, TestDataCloudBase):
self._test_recursive_pull()
class TestCheckSumRecalculation(TestDvc):
@pytest.fixture(autouse=True)
def use_mocker(self, mocker):
self.mocker = mocker
def test(self):
test_get_file_checksum = self.mocker.spy(
RemoteLOCAL, "get_file_checksum"
)
url = Local.get_url()
ret = main(["remote", "add", "-d", TEST_REMOTE, url])
self.assertEqual(ret, 0)
ret = main(["config", "cache.type", "hardlink"])
self.assertEqual(ret, 0)
ret = main(["add", self.FOO])
self.assertEqual(ret, 0)
ret = main(["push"])
self.assertEqual(ret, 0)
ret = main(["run", "-d", self.FOO, "echo foo"])
self.assertEqual(ret, 0)
self.assertEqual(test_get_file_checksum.mock.call_count, 1)
def test_checksum_recalculation(mocker, dvc, tmp_dir):
tmp_dir.gen({"foo": "foo"})
test_get_file_checksum = mocker.spy(RemoteLOCAL, "get_file_checksum")
url = Local.get_url()
ret = main(["remote", "add", "-d", TEST_REMOTE, url])
assert ret == 0
ret = main(["config", "cache.type", "hardlink"])
assert ret == 0
ret = main(["add", "foo"])
assert ret == 0
ret = main(["push"])
assert ret == 0
ret = main(["run", "-d", "foo", "echo foo"])
assert ret == 0
assert test_get_file_checksum.mock.call_count == 1
class TestShouldWarnOnNoChecksumInLocalAndRemoteCache(TestDvc):
+14
View File
@@ -4,9 +4,12 @@ from uuid import uuid4
import pytest
import dvc
from dvc.stage import Stage
from dvc.main import main
from dvc.utils.fs import makedirs
from dvc.compat import fspath
from tests.basic_env import TestDvc
from tests.dir_helpers import TmpDir
class TestCmdImport(TestDvc):
@@ -61,6 +64,17 @@ class TestShouldRemoveOutsBeforeImport(TestDvc):
self.assertEqual(1, remove_outs_call_counter.mock.call_count)
def test_should_remove_outs_before_import(mocker, dvc, tmp_path_factory):
import_dir = TmpDir(tmp_path_factory.mktemp("import"))
import_dir.gen({"foo": "foo"})
remove_outs_call_counter = mocker.spy(Stage, "remove_outs")
ret = main(["import-url", fspath(import_dir / "foo")])
assert ret == 0
assert remove_outs_call_counter.mock.call_count == 1
class TestImportFilename(TestDvc):
def setUp(self):
super().setUp()