Files
dvc/tests/unit/utils/test_studio.py
T

46 lines
1.2 KiB
Python

from urllib.parse import urljoin
import pytest
from requests import Response
from dvc.utils.studio import STUDIO_URL, notify_refs
@pytest.mark.parametrize(
"status_code, side_effect",
[
(200, {}), # success
(401, {"detail": "unauthorized"}), # should not fail on client errors
(500, ValueError), # should not fail even on server errors
],
)
def test_notify_refs(mocker, status_code, side_effect):
response = Response()
response.status_code = status_code
mocker.patch.object(response, "json", side_effect=[side_effect])
mock_post = mocker.patch("requests.Session.post", return_value=response)
notify_refs(
"[email protected]:iterative/dvc.git",
"TOKEN",
pushed=["p1", "p2"],
removed=["r1", "r2"],
)
assert mock_post.called
assert mock_post.call_args == mocker.call(
urljoin(STUDIO_URL, "/webhook/dvc"),
json={
"repo_url": "[email protected]:iterative/dvc.git",
"client": "dvc",
"refs": {
"pushed": ["p1", "p2"],
"removed": ["r1", "r2"],
},
},
headers={"Authorization": "token TOKEN"},
timeout=5,
allow_redirects=False,
)