diff options
| author | Lucas de Castro Borges <lucas@gnuabordo.com.br> | 2025-02-11 15:07:35 -0300 |
|---|---|---|
| committer | Lucas de Castro Borges <lucas@gnuabordo.com.br> | 2025-02-11 15:07:35 -0300 |
| commit | 4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch) | |
| tree | 1682a647d4463397c119183369ae6f750d5fdcff /buildscripts/tests/test_validate_commit_message.py | |
| parent | aa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff) | |
| parent | 8f0827553e09872941945a093b647a4211a9db7f (diff) | |
Update upstream source from tag 'upstream/6.0.0'master
Update to upstream version '6.0.0'
with Debian dir 5604a80ec1c96ca76f25f40d78e6ef855abec322
Diffstat (limited to 'buildscripts/tests/test_validate_commit_message.py')
| -rw-r--r-- | buildscripts/tests/test_validate_commit_message.py | 123 |
1 files changed, 111 insertions, 12 deletions
diff --git a/buildscripts/tests/test_validate_commit_message.py b/buildscripts/tests/test_validate_commit_message.py index 1bf0039188d..db341a5add1 100644 --- a/buildscripts/tests/test_validate_commit_message.py +++ b/buildscripts/tests/test_validate_commit_message.py @@ -1,31 +1,130 @@ """Unit tests for the evergreen_task_timeout script.""" +import itertools import unittest +from typing import List, Optional +from unittest.mock import MagicMock -from buildscripts.validate_commit_message import main, STATUS_OK, STATUS_ERROR +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 +INVALID_MESSAGES = [ + "", # You must provide a message + "RevertEVG-1", # revert and ticket must be formatted + "revert EVG-1", # revert must be capitalized + "This is not a valid message", # message must be valid + "Fix Lint", # Fix lint is strict in terms of caps +] + + +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 + + +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 = [ + f"Commit Queue Merge: '{old}' into 'mongodb/mongo:SERVER-45949-validate-message-format'" + for old in older + ] + return list(itertools.chain(*zip(older, newer))) + class ValidateCommitMessageTest(unittest.TestCase): - def test_valid(self): + def test_valid_commits(self): messages = [ + "Fix lint", + "EVG-1", # Test valid projects with various number lengths + "SERVER-20", + "WT-300", "SERVER-44338", - "Revert \"SERVER-60", + "Revert EVG-5", + "Revert SERVER-60", + "Revert WT-700", + "Revert 'SERVER-8000", + 'Revert "SERVER-90000', "Import wiredtiger: 58115abb6fbb3c1cc7bfd087d41a47347bce9a69 from branch mongodb-4.4", + "Import tools: 58115abb6fbb3c1cc7bfd087d41a47347bce9a69 from branch mongodb-4.4", '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 = orchestrator.validate_commit_messages("version_id") + + self.assertEqual(is_valid, under_test.STATUS_OK) - self.assertTrue(all(main([message]) == STATUS_OK for message in messages)) + 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) - def test_invalid(self): + is_valid = orchestrator.validate_commit_messages("version_id") + + self.assertEqual(is_valid, under_test.STATUS_ERROR) + + def test_private_with_public(self): messages = [ - "SERVER-", # missing number - "Revert SERVER-60", # missing quote before SERVER - "", # empty value - "nonsense", # nonsense values + "Fix lint", + "EVG-1", # Test valid projects with various number lengths + "SERVER-20", + "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 = 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) - self.assertTrue(all(main([message]) == STATUS_ERROR for message in messages)) + is_valid = orchestrator.validate_commit_messages("version_id") - def test_message_is_empty_list(self): - self.assertEqual(main([]), STATUS_ERROR) + self.assertEqual(is_valid, under_test.STATUS_OK) |
