SERVER-62292: Validate commit messages do not reference internal tickets
This commit is contained in:
committed by
Evergreen Agent
parent
8e6ab9a259
commit
69a2128b5e
@@ -1,12 +1,12 @@
|
||||
"""Unit tests for the evergreen_task_timeout script."""
|
||||
import itertools
|
||||
import unittest
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from evergreen import EvergreenApi
|
||||
|
||||
import buildscripts.validate_commit_message as under_test
|
||||
from buildscripts.client.jiraclient import JiraClient, SecurityLevel
|
||||
from evergreen import EvergreenApi
|
||||
|
||||
# pylint: disable=missing-docstring,no-self-use
|
||||
|
||||
@@ -19,18 +19,35 @@ INVALID_MESSAGES = [
|
||||
]
|
||||
|
||||
|
||||
def create_mock_evg_client(code_change_messages: List[str]) -> MagicMock:
|
||||
mock_code_change = MagicMock()
|
||||
mock_code_change.commit_messages = code_change_messages
|
||||
def create_mock_code_change(code_change_messages: List[str], branch_name: Optional[str] = None):
|
||||
mock_code_change = MagicMock(
|
||||
commit_messages=code_change_messages,
|
||||
branch_name=branch_name if branch_name else "mongodb-mongo-master",
|
||||
)
|
||||
return mock_code_change
|
||||
|
||||
mock_patch = MagicMock()
|
||||
mock_patch.module_code_changes = [mock_code_change]
|
||||
|
||||
def create_mock_patch(code_change_messages: List[str], branch_name: Optional[str] = None):
|
||||
mock_code_change = create_mock_code_change(code_change_messages, branch_name)
|
||||
mock_patch = MagicMock(module_code_changes=[mock_code_change])
|
||||
return mock_patch
|
||||
|
||||
|
||||
def create_mock_evg_client(code_change_messages: List[str],
|
||||
branch_name: Optional[str] = None) -> MagicMock:
|
||||
mock_patch = create_mock_patch(code_change_messages, branch_name)
|
||||
|
||||
mock_evg_client = MagicMock(spec_set=EvergreenApi)
|
||||
mock_evg_client.patch_by_id.return_value = mock_patch
|
||||
return mock_evg_client
|
||||
|
||||
|
||||
def create_mock_jira_client():
|
||||
mock_jira = MagicMock(spec_set=JiraClient)
|
||||
mock_jira.get_ticket_security_level.return_value = SecurityLevel.NONE
|
||||
return mock_jira
|
||||
|
||||
|
||||
def interleave_new_format(older):
|
||||
"""Create a new list containing a new and old format copy of each string."""
|
||||
newer = [
|
||||
@@ -58,16 +75,20 @@ class ValidateCommitMessageTest(unittest.TestCase):
|
||||
'Revert "Import wiredtiger: 58115abb6fbb3c1cc7bfd087d41a47347bce9a69 from branch mongodb-4.4"',
|
||||
]
|
||||
mock_evg_api = create_mock_evg_client(interleave_new_format(messages))
|
||||
mock_jira = create_mock_jira_client()
|
||||
orchestrator = under_test.CommitMessageValidationOrchestrator(mock_evg_api, mock_jira)
|
||||
|
||||
is_valid = under_test.validate_commit_messages("version_id", mock_evg_api)
|
||||
is_valid = orchestrator.validate_commit_messages("version_id")
|
||||
|
||||
self.assertEqual(is_valid, under_test.STATUS_OK)
|
||||
|
||||
def test_private(self):
|
||||
messages = ["XYZ-1"]
|
||||
mock_evg_api = create_mock_evg_client(interleave_new_format(messages))
|
||||
mock_jira = create_mock_jira_client()
|
||||
orchestrator = under_test.CommitMessageValidationOrchestrator(mock_evg_api, mock_jira)
|
||||
|
||||
is_valid = under_test.validate_commit_messages("version_id", mock_evg_api)
|
||||
is_valid = orchestrator.validate_commit_messages("version_id")
|
||||
|
||||
self.assertEqual(is_valid, under_test.STATUS_ERROR)
|
||||
|
||||
@@ -76,10 +97,34 @@ class ValidateCommitMessageTest(unittest.TestCase):
|
||||
"Fix lint",
|
||||
"EVG-1", # Test valid projects with various number lengths
|
||||
"SERVER-20",
|
||||
"XYZ-1"
|
||||
"XYZ-1",
|
||||
]
|
||||
mock_evg_api = create_mock_evg_client(interleave_new_format(messages))
|
||||
mock_jira = create_mock_jira_client()
|
||||
orchestrator = under_test.CommitMessageValidationOrchestrator(mock_evg_api, mock_jira)
|
||||
|
||||
is_valid = under_test.validate_commit_messages("version_id", mock_evg_api)
|
||||
is_valid = orchestrator.validate_commit_messages("version_id")
|
||||
|
||||
self.assertEqual(is_valid, under_test.STATUS_ERROR)
|
||||
|
||||
def test_internal_ticket_to_public_repo_should_fail(self):
|
||||
message = "SERVER-20"
|
||||
mock_evg_api = create_mock_evg_client(interleave_new_format([message]))
|
||||
mock_jira = create_mock_jira_client()
|
||||
mock_jira.get_ticket_security_level.return_value = SecurityLevel.MONGO_INTERNAL
|
||||
orchestrator = under_test.CommitMessageValidationOrchestrator(mock_evg_api, mock_jira)
|
||||
|
||||
is_valid = orchestrator.validate_commit_messages("version_id")
|
||||
|
||||
self.assertEqual(is_valid, under_test.STATUS_ERROR)
|
||||
|
||||
def test_internal_ticket_to_private_repo_should_succeed(self):
|
||||
message = "SERVER-20"
|
||||
mock_evg_api = create_mock_evg_client(interleave_new_format([message]), "private-repo")
|
||||
mock_jira = create_mock_jira_client()
|
||||
mock_jira.get_ticket_security_level.return_value = SecurityLevel.MONGO_INTERNAL
|
||||
orchestrator = under_test.CommitMessageValidationOrchestrator(mock_evg_api, mock_jira)
|
||||
|
||||
is_valid = orchestrator.validate_commit_messages("version_id")
|
||||
|
||||
self.assertEqual(is_valid, under_test.STATUS_OK)
|
||||
|
||||
Reference in New Issue
Block a user