Do not update issue status for closed/rejected/solved issues
gitea-wip/gitea-redmine/pipeline/pr-main This commit looks good Details

This commit is contained in:
Agate 2022-11-29 14:30:47 +01:00
parent 86a56bbcfa
commit db10f71394
2 changed files with 58 additions and 10 deletions

View File

@ -22,7 +22,17 @@ REDMINE_STATUSES = {
'Résolu': 3,
'Solution proposée': 12,
'Solution validée': 13,
'Solution déployée': 4,
'Fermé': 5,
'Rejeté': 6,
}
CLOSED_STATUSES = [
REDMINE_STATUSES['Résolu'],
REDMINE_STATUSES['Solution déployée'],
REDMINE_STATUSES['Fermé'],
REDMINE_STATUSES['Rejeté'],
]
app = flask.Flask(__name__)
@ -147,9 +157,11 @@ def assign_to(user_field):
return inner
def set_status(status_id):
def set_status(status_id, unless=[]):
def inner(issue, payload):
issue.status_id = status_id
current_status = issue.status.id
if current_status not in unless:
issue.status_id = status_id
return inner
@ -201,7 +213,7 @@ PULL_REQUEST_OPENED_NOTE = '{pull_request_user_full_name} ({pull_request_user_us
handle_pull_request_opened = make_handler(
assign_to('pull_request_user_username'),
set_status(REDMINE_STATUSES['Solution proposée']),
set_status(REDMINE_STATUSES['Solution proposée'], unless=CLOSED_STATUSES),
add_note(
PULL_REQUEST_OPENED_NOTE
),
@ -209,7 +221,7 @@ handle_pull_request_opened = make_handler(
)
handle_pull_request_opened_draft = make_handler(
assign_to('pull_request_user_username'),
set_status(REDMINE_STATUSES['En cours']),
set_status(REDMINE_STATUSES['En cours'], unless=CLOSED_STATUSES),
add_note(
PULL_REQUEST_OPENED_NOTE
),
@ -219,7 +231,7 @@ handle_pull_request_opened_draft = make_handler(
handle_pull_request_edited = make_handler(
skip_if_notes_include('pull_request_url', 'Pull request already linked in issue'),
assign_to('pull_request_user_username'),
set_status(REDMINE_STATUSES['En cours']),
set_status(REDMINE_STATUSES['En cours'], unless=CLOSED_STATUSES),
add_note(
'{pull_request_user_full_name} ({pull_request_user_username}) a lié une pull request sur Gitea concernant cette demande :\n\n* URL : {pull_request_url}\n* Titre : {pull_request_title}\n* Modifications : {pull_request_url}/files'
),
@ -229,7 +241,7 @@ handle_pull_request_edited = make_handler(
handle_pull_request_draft = make_handler(
skip_if_status(REDMINE_STATUSES['En cours']),
skip_if_not_draft,
set_status(REDMINE_STATUSES['En cours']),
set_status(REDMINE_STATUSES['En cours'], unless=CLOSED_STATUSES),
add_note(
'{pull_request_user_full_name} ({pull_request_user_username}) a commencé à travailler sur une pull request sur Gitea concernant cette demande :\n\n* URL : {pull_request_url}\n* Titre : {pull_request_title}\n* Modifications : {pull_request_url}/files'
),
@ -237,7 +249,7 @@ handle_pull_request_draft = make_handler(
)
handle_pull_request_merged = make_handler(
set_status(REDMINE_STATUSES['Résolu']),
set_status(REDMINE_STATUSES['Résolu'], unless=CLOSED_STATUSES),
add_note(
'{sender_full_name} ({sender_username}) a mergé une pull request sur Gitea concernant cette demande :\n\n* URL : {pull_request_url}\n* Titre : {pull_request_title}\n* Modifications : {pull_request_url}/files'
),
@ -245,9 +257,9 @@ handle_pull_request_merged = make_handler(
)
handle_pull_request_approved = make_handler(
set_status(REDMINE_STATUSES['Solution proposée']),
set_status(REDMINE_STATUSES['Solution proposée'], unless=CLOSED_STATUSES),
save(),
set_status(REDMINE_STATUSES['Solution validée']),
set_status(REDMINE_STATUSES['Solution validée'], unless=CLOSED_STATUSES),
set_value_if_empty("review_content", "N/A"),
add_note(
'{sender_full_name} ({sender_username}) a approuvé une pull request sur Gitea concernant cette demande :\n\n* URL : {pull_request_url}\n* Commentaire :\n\n{review_content}'
@ -256,7 +268,7 @@ handle_pull_request_approved = make_handler(
)
handle_pull_request_rejected = make_handler(
set_status(REDMINE_STATUSES['En cours']),
set_status(REDMINE_STATUSES['En cours'], unless=CLOSED_STATUSES),
set_value_if_empty("review_content", "N/A"),
add_note(
'{sender_full_name} ({sender_username}) a relu et demandé des modifications sur une pull request sur Gitea concernant cette demande :\n\n* URL : {pull_request_url}\n* Commentaire :\n\n{review_content}'

View File

@ -115,6 +115,42 @@ def test_handle_pull_request_opened(mocker):
issue.save.assert_called_once()
@pytest.mark.parametrize('status', [
gitea_redmine.REDMINE_STATUSES['Résolu'],
gitea_redmine.REDMINE_STATUSES['Fermé'],
gitea_redmine.REDMINE_STATUSES['Solution déployée'],
gitea_redmine.REDMINE_STATUSES['Rejeté'],
])
def test_handle_pull_request_opened_skips_closed_statuses(status, mocker):
redmine_user = mocker.Mock(id=42)
get_redmine_user = mocker.patch.object(gitea_redmine, 'get_redmine_user', return_value=redmine_user)
payload = {
"action": "opened",
"number": 2,
"pull_request": {
"id": 7,
"url": "https://gitea.entrouvert.org/entrouvert/gitea-redmine/pulls/2",
"number": 2,
"user": {
"id": 7,
"login": "testuser",
"full_name": "Test User",
"email": "test_user@noreply.gitea.entrouvert.org",
"username": "testuser",
},
"title": "Foo",
"body": "See #70893",
},
}
issue = mocker.Mock(status=mocker.Mock(id=status))
original_status = issue.status_id
gitea_redmine.handle_pull_request_opened(issue, payload)
assert issue.status_id == original_status
def test_handle_pull_request_edited(mocker):
redmine_user = mocker.Mock(id=42)
get_redmine_user = mocker.patch.object(gitea_redmine, 'get_redmine_user', return_value=redmine_user)