From e41aa00c2023040becc2f5958b2bc7fc10b38267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Santos?= Date: Wed, 22 Jan 2020 14:04:52 +0000 Subject: [PATCH] convert tests to pytest function tests --- tests/func/test_add.py | 130 +++++++++++++++++----------------- tests/func/test_data_cloud.py | 36 ++++------ tests/func/test_import_url.py | 14 ++++ 3 files changed, 94 insertions(+), 86 deletions(-) diff --git a/tests/func/test_add.py b/tests/func/test_add.py index 814eadcc2..9dd9aff0b 100644 --- a/tests/func/test_add.py +++ b/tests/func/test_add.py @@ -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): diff --git a/tests/func/test_data_cloud.py b/tests/func/test_data_cloud.py index 41d769347..56189d821 100644 --- a/tests/func/test_data_cloud.py +++ b/tests/func/test_data_cloud.py @@ -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): diff --git a/tests/func/test_import_url.py b/tests/func/test_import_url.py index 902e383ca..f325e5b14 100644 --- a/tests/func/test_import_url.py +++ b/tests/func/test_import_url.py @@ -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()