diff options
| author | John Villalovos <john@sodarock.com> | 2022-10-31 03:24:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-31 10:24:27 +0000 |
| commit | bd82d745c8ea9ff6ff078a4c961a2d6e64a2f63c (patch) | |
| tree | 823e263cad7af8dea77309e8ef69a3c23589e9d9 /tests | |
| parent | 29749660b9ca97dda1e7ad104d79266d5ed24d7b (diff) | |
| download | gitlab-bd82d745c8ea9ff6ff078a4c961a2d6e64a2f63c.tar.gz | |
fix: use POST method and return dict in `cancel_merge_when_pipeline_succeeds()` (#2350)
* Call was incorrectly using a `PUT` method when should have used a
`POST` method.
* Changed return type to a `dict` as GitLab only returns
{'status': 'success'} on success. Since the function didn't work
previously, this should not impact anyone.
* Updated the test fixture `merge_request` to add ability to create
a pipeline.
* Added functional test for `mr.cancel_merge_when_pipeline_succeeds()`
Fixes: #2349
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/functional/api/test_merge_requests.py | 16 | ||||
| -rw-r--r-- | tests/functional/conftest.py | 17 |
2 files changed, 32 insertions, 1 deletions
diff --git a/tests/functional/api/test_merge_requests.py b/tests/functional/api/test_merge_requests.py index 75afb08..56ee7bc 100644 --- a/tests/functional/api/test_merge_requests.py +++ b/tests/functional/api/test_merge_requests.py @@ -181,11 +181,27 @@ def test_merge_request_reset_approvals(gitlab_url, project, wait_for_sidekiq): assert mr.reset_approvals() +def test_cancel_merge_when_pipeline_succeeds(project, merge_request, wait_for_sidekiq): + mr = merge_request(source_branch="test_merge_request_merge", create_pipeline=True) + # Set to merge when the pipeline succeeds, which should never happen + mr.merge(merge_when_pipeline_succeeds=True) + wait_for_sidekiq(timeout=60) + + mr = project.mergerequests.get(mr.iid) + assert mr.merged_at is None + assert mr.merge_when_pipeline_succeeds is True + cancel = mr.cancel_merge_when_pipeline_succeeds() + assert cancel == {"status": "success"} + + def test_merge_request_merge(project, merge_request, wait_for_sidekiq): mr = merge_request(source_branch="test_merge_request_merge") mr.merge() wait_for_sidekiq(timeout=60) + mr = project.mergerequests.get(mr.iid) + assert mr.merged_at is not None + assert mr.merge_when_pipeline_succeeds is False with pytest.raises(gitlab.GitlabMRClosedError): # Two merge attempts should raise GitlabMRClosedError mr.merge() diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index 3700ae6..b75a1e1 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -379,7 +379,7 @@ def merge_request(project, wait_for_sidekiq): to_delete = [] - def _merge_request(*, source_branch: str): + def _merge_request(*, source_branch: str, create_pipeline: bool = False): # Wait for processes to be done before we start... # NOTE(jlvillal): Sometimes the CI would give a "500 Internal Server # Error". Hoping that waiting until all other processes are done will @@ -401,6 +401,21 @@ def merge_request(project, wait_for_sidekiq): "commit_message": "New commit in new branch", } ) + if create_pipeline: + project.files.create( + { + "file_path": ".gitlab-ci.yml", + "branch": source_branch, + "content": """ +test: + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + script: + - sleep 24h # We don't expect this to finish +""", + "commit_message": "Add a simple pipeline", + } + ) mr = project.mergerequests.create( { "source_branch": source_branch, |
