Files
dvc/tests/func/test_analytics.py
T
Ruslan Kuprieiev c827654fe7 tests: use mocker instead of unittest.mock where possible
Had the "pleasure" of finding a mocker.patch leak into other tests and one
of the suspicions is that mixing unittest.mock and mocker might be somehow
related.

In any case, we should use mocker where possible anyway.
2023-06-18 17:10:45 +03:00

69 lines
1.7 KiB
Python

import os
import pytest
from dvc.analytics import _scm_in_use, collect_and_send_report
from dvc.cli import main
from dvc.repo import Repo
from tests.utils import ANY
def test_daemon_analytics(mocker, tmp_path):
mock_send = mocker.patch("dvc.analytics.send")
report = os.fspath(tmp_path)
assert main(["daemon", "analytics", report]) == 0
mock_send.assert_called_with(report)
def test_main_analytics(mocker, tmp_dir, dvc):
mock_is_enabled = mocker.patch("dvc.analytics.collect_and_send_report")
mock_report = mocker.patch("dvc.analytics.is_enabled", return_value=True)
tmp_dir.gen("foo", "text")
assert main(["add", "foo"]) == 0
assert mock_is_enabled.called
assert mock_report.called
@pytest.fixture
def mock_daemon(mocker):
def func(argv):
return main(["daemon", *argv])
return mocker.patch("dvc.daemon.daemon", mocker.MagicMock(side_effect=func))
def test_collect_and_send_report(mocker, dvc, mock_daemon):
mock_post = mocker.patch("requests.post")
collect_and_send_report()
assert mock_daemon.call_count == 1
assert mock_post.call_count == 1
assert mock_post.call_args == mocker.call(
"https://analytics.dvc.org",
json=ANY(dict),
headers={"content-type": "application/json"},
timeout=5,
)
def test_scm_dvc_only(tmp_dir, dvc):
scm = _scm_in_use()
assert scm == "NoSCM"
def test_scm_git(tmp_dir, scm, dvc):
scm = _scm_in_use()
assert scm == "Git"
def test_scm_subrepo(tmp_dir, scm):
subdir = tmp_dir / "subdir"
subdir.mkdir()
with subdir.chdir():
Repo.init(subdir=True)
scm = _scm_in_use()
assert scm == "Git"