"""
GitLab API: https://docs.gitlab.com/ee/api/draft_notes.html
"""
from copy import deepcopy
import pytest
import responses
from gitlab.v4.objects import ProjectMergeRequestDraftNote
draft_note_content = {
"id": 1,
"author_id": 23,
"merge_request_id": 1,
"resolve_discussion": False,
"discussion_id": None,
"note": "Example title",
"commit_id": None,
"line_code": None,
"position": {
"base_sha": None,
"start_sha": None,
"head_sha": None,
"old_path": None,
"new_path": None,
"position_type": "text",
"old_line": None,
"new_line": None,
"line_range": None,
},
}
@pytest.fixture()
def resp_list_merge_request_draft_notes():
with responses.RequestsMock() as rsps:
rsps.add(
method=responses.GET,
url="http://localhost/api/v4/projects/1/merge_requests/1/draft_notes",
json=[draft_note_content],
content_type="application/json",
status=200,
)
yield rsps
@pytest.fixture()
def resp_get_merge_request_draft_note():
with responses.RequestsMock() as rsps:
rsps.add(
method=responses.GET,
url="http://localhost/api/v4/projects/1/merge_requests/1/draft_notes/1",
json=draft_note_content,
content_type="application/json",
status=200,
)
yield rsps
@pytest.fixture()
def resp_create_merge_request_draft_note():
with responses.RequestsMock() as rsps:
rsps.add(
method=responses.POST,
url="http://localhost/api/v4/projects/1/merge_requests/1/draft_notes",
json=draft_note_content,
content_type="application/json",
status=201,
)
yield rsps
@pytest.fixture()
def resp_update_merge_request_draft_note():
updated_content = deepcopy(draft_note_content)
updated_content["note"] = "New title"
with responses.RequestsMock() as rsps:
rsps.add(
method=responses.PUT,
url="http://localhost/api/v4/projects/1/merge_requests/1/draft_notes/1",
json=updated_content,
content_type="application/json",
status=201,
)
yield rsps
@pytest.fixture()
def resp_delete_merge_request_draft_note():
with responses.RequestsMock() as rsps:
rsps.add(
method=responses.DELETE,
url="http://localhost/api/v4/projects/1/merge_requests/1/draft_notes/1",
json=draft_note_content,
content_type="application/json",
status=201,
)
yield rsps
@pytest.fixture()
def resp_publish_merge_request_draft_note():
with responses.RequestsMock() as rsps:
rsps.add(
method=responses.PUT,
url="http://localhost/api/v4/projects/1/merge_requests/1/draft_notes/1/publish",
status=204,
)
yield rsps
@pytest.fixture()
def resp_bulk_publish_merge_request_draft_notes():
with responses.RequestsMock() as rsps:
rsps.add(
method=responses.POST,
url="http://localhost/api/v4/projects/1/merge_requests/1/draft_notes/bulk_publish",
status=204,
)
yield rsps
def test_list_merge_requests_draft_notes(
project_merge_request, resp_list_merge_request_draft_notes
):
draft_notes = project_merge_request.draft_notes.list()
assert len(draft_notes) == 1
assert isinstance(draft_notes[0], ProjectMergeRequestDraftNote)
assert draft_notes[0].note == draft_note_content["note"]
def test_get_merge_requests_draft_note(
project_merge_request, resp_get_merge_request_draft_note
):
draft_note = project_merge_request.draft_notes.get(1)
assert isinstance(draft_note, ProjectMergeRequestDraftNote)
assert draft_note.note == draft_note_content["note"]
def test_create_merge_requests_draft_note(
project_merge_request, resp_create_merge_request_draft_note
):
draft_note = project_merge_request.draft_notes.create({"note": "Example title"})
assert isinstance(draft_note, ProjectMergeRequestDraftNote)
assert draft_note.note == draft_note_content["note"]
def test_update_merge_requests_draft_note(
project_merge_request, resp_update_merge_request_draft_note
):
draft_note = project_merge_request.draft_notes.get(1, lazy=True)
draft_note.note = "New title"
draft_note.save()
assert draft_note.note == "New title"
def test_delete_merge_requests_draft_note(
project_merge_request, resp_delete_merge_request_draft_note
):
draft_note = project_merge_request.draft_notes.get(1, lazy=True)
draft_note.delete()
def test_publish_merge_requests_draft_note(
project_merge_request, resp_publish_merge_request_draft_note
):
draft_note = project_merge_request.draft_notes.get(1, lazy=True)
draft_note.publish()
def test_bulk_publish_merge_requests_draft_notes(
project_merge_request, resp_bulk_publish_merge_request_draft_notes
):
project_merge_request.draft_notes.bulk_publish()