From 9ef9b2a4286e20c98f185402ab7e7244994e4079 Mon Sep 17 00:00:00 2001 From: "abuzarmahmood (aider)" Date: Tue, 6 May 2025 08:28:33 +0000 Subject: [PATCH 1/5] test: add unit tests for branch_handler functions in test_branch_handler.py --- tests/test_branch_handler.py | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tests/test_branch_handler.py diff --git a/tests/test_branch_handler.py b/tests/test_branch_handler.py new file mode 100644 index 0000000..a3263fe --- /dev/null +++ b/tests/test_branch_handler.py @@ -0,0 +1,57 @@ +import unittest +from unittest.mock import patch, MagicMock +from src.branch_handler import ( + get_issue_related_branches, + get_current_branch, + checkout_branch, + delete_branch, + back_to_master_branch, + push_changes +) + +class TestBranchHandler(unittest.TestCase): + + @patch('src.branch_handler.git.Repo') + @patch('src.branch_handler.os.popen') + def test_get_issue_related_branches(self, mock_popen, mock_repo): + mock_issue = MagicMock() + mock_issue.number = 123 + mock_issue.title = "Test Issue" + mock_popen.return_value.read.return_value = "branch1\turl1\nbranch2\turl2" + + branches = get_issue_related_branches('/path/to/repo', mock_issue) + expected_branches = [('branch1', 'url1'), ('branch2', 'url2')] + self.assertEqual(branches, expected_branches) + + @patch('src.branch_handler.git.Repo') + def test_get_current_branch(self, mock_repo): + mock_repo.return_value.active_branch.name = 'main' + branch_name = get_current_branch('/path/to/repo') + self.assertEqual(branch_name, 'main') + + @patch('src.branch_handler.git.Repo') + def test_checkout_branch(self, mock_repo): + mock_repo.return_value.heads = ['main', 'dev'] + checkout_branch('/path/to/repo', 'dev') + mock_repo.return_value.git.checkout.assert_called_with('dev') + + @patch('src.branch_handler.git.Repo') + def test_delete_branch(self, mock_repo): + mock_repo.return_value.heads = ['main', 'dev'] + delete_branch('/path/to/repo', 'dev') + mock_repo.return_value.delete_head.assert_called_with('dev', force=False) + + @patch('src.branch_handler.git.Repo') + def test_back_to_master_branch(self, mock_repo): + mock_repo.return_value.heads = ['main', 'dev'] + back_to_master_branch('/path/to/repo') + mock_repo.return_value.git.checkout.assert_called_with('main') + + @patch('src.branch_handler.git.Repo') + def test_push_changes(self, mock_repo): + mock_repo.return_value.active_branch.name = 'dev' + push_changes('/path/to/repo') + mock_repo.return_value.git.push.assert_called_with('origin', 'dev') + +if __name__ == '__main__': + unittest.main() From 6e33085879bdefd1d8ad55b172d6a995be9a12fa Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 08:28:42 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_branch_handler.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/test_branch_handler.py b/tests/test_branch_handler.py index a3263fe..03991ac 100644 --- a/tests/test_branch_handler.py +++ b/tests/test_branch_handler.py @@ -9,6 +9,7 @@ push_changes ) + class TestBranchHandler(unittest.TestCase): @patch('src.branch_handler.git.Repo') @@ -18,7 +19,7 @@ def test_get_issue_related_branches(self, mock_popen, mock_repo): mock_issue.number = 123 mock_issue.title = "Test Issue" mock_popen.return_value.read.return_value = "branch1\turl1\nbranch2\turl2" - + branches = get_issue_related_branches('/path/to/repo', mock_issue) expected_branches = [('branch1', 'url1'), ('branch2', 'url2')] self.assertEqual(branches, expected_branches) @@ -39,7 +40,8 @@ def test_checkout_branch(self, mock_repo): def test_delete_branch(self, mock_repo): mock_repo.return_value.heads = ['main', 'dev'] delete_branch('/path/to/repo', 'dev') - mock_repo.return_value.delete_head.assert_called_with('dev', force=False) + mock_repo.return_value.delete_head.assert_called_with( + 'dev', force=False) @patch('src.branch_handler.git.Repo') def test_back_to_master_branch(self, mock_repo): @@ -53,5 +55,6 @@ def test_push_changes(self, mock_repo): push_changes('/path/to/repo') mock_repo.return_value.git.push.assert_called_with('origin', 'dev') + if __name__ == '__main__': unittest.main() From d98288f285186dc9c8e365afb011cb98cffc7788 Mon Sep 17 00:00:00 2001 From: "abuzarmahmood (aider)" Date: Tue, 6 May 2025 08:38:20 +0000 Subject: [PATCH 3/5] refactor: convert test suite from unittest to pytest framework --- tests/test_branch_handler.py | 91 +++++++++++++++++------------------- 1 file changed, 42 insertions(+), 49 deletions(-) diff --git a/tests/test_branch_handler.py b/tests/test_branch_handler.py index 03991ac..22a626b 100644 --- a/tests/test_branch_handler.py +++ b/tests/test_branch_handler.py @@ -1,4 +1,4 @@ -import unittest +import pytest from unittest.mock import patch, MagicMock from src.branch_handler import ( get_issue_related_branches, @@ -10,51 +10,44 @@ ) -class TestBranchHandler(unittest.TestCase): - - @patch('src.branch_handler.git.Repo') - @patch('src.branch_handler.os.popen') - def test_get_issue_related_branches(self, mock_popen, mock_repo): - mock_issue = MagicMock() - mock_issue.number = 123 - mock_issue.title = "Test Issue" - mock_popen.return_value.read.return_value = "branch1\turl1\nbranch2\turl2" - - branches = get_issue_related_branches('/path/to/repo', mock_issue) - expected_branches = [('branch1', 'url1'), ('branch2', 'url2')] - self.assertEqual(branches, expected_branches) - - @patch('src.branch_handler.git.Repo') - def test_get_current_branch(self, mock_repo): - mock_repo.return_value.active_branch.name = 'main' - branch_name = get_current_branch('/path/to/repo') - self.assertEqual(branch_name, 'main') - - @patch('src.branch_handler.git.Repo') - def test_checkout_branch(self, mock_repo): - mock_repo.return_value.heads = ['main', 'dev'] - checkout_branch('/path/to/repo', 'dev') - mock_repo.return_value.git.checkout.assert_called_with('dev') - - @patch('src.branch_handler.git.Repo') - def test_delete_branch(self, mock_repo): - mock_repo.return_value.heads = ['main', 'dev'] - delete_branch('/path/to/repo', 'dev') - mock_repo.return_value.delete_head.assert_called_with( - 'dev', force=False) - - @patch('src.branch_handler.git.Repo') - def test_back_to_master_branch(self, mock_repo): - mock_repo.return_value.heads = ['main', 'dev'] - back_to_master_branch('/path/to/repo') - mock_repo.return_value.git.checkout.assert_called_with('main') - - @patch('src.branch_handler.git.Repo') - def test_push_changes(self, mock_repo): - mock_repo.return_value.active_branch.name = 'dev' - push_changes('/path/to/repo') - mock_repo.return_value.git.push.assert_called_with('origin', 'dev') - - -if __name__ == '__main__': - unittest.main() +@patch('src.branch_handler.git.Repo') +@patch('src.branch_handler.os.popen') +def test_get_issue_related_branches(mock_popen, mock_repo): + mock_issue = MagicMock() + mock_issue.number = 123 + mock_issue.title = "Test Issue" + mock_popen.return_value.read.return_value = "branch1\turl1\nbranch2\turl2" + + branches = get_issue_related_branches('/path/to/repo', mock_issue) + expected_branches = [('branch1', 'url1'), ('branch2', 'url2')] + assert branches == expected_branches + +@patch('src.branch_handler.git.Repo') +def test_get_current_branch(mock_repo): + mock_repo.return_value.active_branch.name = 'main' + branch_name = get_current_branch('/path/to/repo') + assert branch_name == 'main' + +@patch('src.branch_handler.git.Repo') +def test_checkout_branch(mock_repo): + mock_repo.return_value.heads = ['main', 'dev'] + checkout_branch('/path/to/repo', 'dev') + mock_repo.return_value.git.checkout.assert_called_with('dev') + +@patch('src.branch_handler.git.Repo') +def test_delete_branch(mock_repo): + mock_repo.return_value.heads = ['main', 'dev'] + delete_branch('/path/to/repo', 'dev') + mock_repo.return_value.delete_head.assert_called_with('dev', force=False) + +@patch('src.branch_handler.git.Repo') +def test_back_to_master_branch(mock_repo): + mock_repo.return_value.heads = ['main', 'dev'] + back_to_master_branch('/path/to/repo') + mock_repo.return_value.git.checkout.assert_called_with('main') + +@patch('src.branch_handler.git.Repo') +def test_push_changes(mock_repo): + mock_repo.return_value.active_branch.name = 'dev' + push_changes('/path/to/repo') + mock_repo.return_value.git.push.assert_called_with('origin', 'dev') From 1062f9bc67d0ae8a3443c7aa35b8c40e907d9bb4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 08:38:27 +0000 Subject: [PATCH 4/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_branch_handler.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_branch_handler.py b/tests/test_branch_handler.py index 22a626b..5abec9b 100644 --- a/tests/test_branch_handler.py +++ b/tests/test_branch_handler.py @@ -22,30 +22,35 @@ def test_get_issue_related_branches(mock_popen, mock_repo): expected_branches = [('branch1', 'url1'), ('branch2', 'url2')] assert branches == expected_branches + @patch('src.branch_handler.git.Repo') def test_get_current_branch(mock_repo): mock_repo.return_value.active_branch.name = 'main' branch_name = get_current_branch('/path/to/repo') assert branch_name == 'main' + @patch('src.branch_handler.git.Repo') def test_checkout_branch(mock_repo): mock_repo.return_value.heads = ['main', 'dev'] checkout_branch('/path/to/repo', 'dev') mock_repo.return_value.git.checkout.assert_called_with('dev') + @patch('src.branch_handler.git.Repo') def test_delete_branch(mock_repo): mock_repo.return_value.heads = ['main', 'dev'] delete_branch('/path/to/repo', 'dev') mock_repo.return_value.delete_head.assert_called_with('dev', force=False) + @patch('src.branch_handler.git.Repo') def test_back_to_master_branch(mock_repo): mock_repo.return_value.heads = ['main', 'dev'] back_to_master_branch('/path/to/repo') mock_repo.return_value.git.checkout.assert_called_with('main') + @patch('src.branch_handler.git.Repo') def test_push_changes(mock_repo): mock_repo.return_value.active_branch.name = 'dev' From 9dc1d1d08eeeac762ff4dd7e10b1eb9765f41094 Mon Sep 17 00:00:00 2001 From: "abuzarmahmood (aider)" Date: Tue, 6 May 2025 08:52:59 +0000 Subject: [PATCH 5/5] ci: update workflow to include tests for branch_handler.py --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8b03e50..969011c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,7 +23,7 @@ jobs: - name: Run tests with coverage run: | - pytest tests/test_triggers.py -v --cov --cov-branch --cov-report=xml + pytest tests/test_triggers.py tests/test_branch_handler.py -v --cov --cov-branch --cov-report=xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v5