Eric Engestrom | 7f61f41 | 2020-06-03 00:22:33 +0200 | [diff] [blame] | 1 | import argparse |
| 2 | import pytest # type: ignore |
| 3 | import subprocess |
| 4 | |
| 5 | from .commit_in_branch import ( |
| 6 | is_commit_valid, |
| 7 | branch_has_commit, |
| 8 | branch_has_backport_of_commit, |
| 9 | canonicalize_commit, |
| 10 | validate_branch, |
| 11 | ) |
| 12 | |
| 13 | |
| 14 | def get_upstream() -> str: |
| 15 | # Let's assume master is bound to the upstream remote and not a fork |
| 16 | out = subprocess.check_output(['git', 'for-each-ref', |
| 17 | '--format=%(upstream)', |
| 18 | 'refs/heads/master'], |
| 19 | stderr=subprocess.DEVNULL) |
| 20 | return out.decode().strip().split('/')[2] |
| 21 | |
| 22 | |
| 23 | @pytest.mark.parametrize( |
| 24 | 'commit, expected', |
| 25 | [ |
| 26 | ('20.1-branchpoint', True), |
| 27 | ('master', True), |
| 28 | ('e58a10af640ba58b6001f5c5ad750b782547da76', True), |
| 29 | ('d043d24654c851f0be57dbbf48274b5373dea42b', True), |
| 30 | ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True), |
| 31 | ('0000000000000000000000000000000000000000', False), |
| 32 | ('not-even-a-valid-commit-format', False), |
| 33 | ]) |
| 34 | def test_canonicalize_commit(commit: str, expected: bool) -> None: |
| 35 | if expected: |
| 36 | assert canonicalize_commit(commit) |
| 37 | else: |
| 38 | try: |
| 39 | assert canonicalize_commit(commit) |
| 40 | except argparse.ArgumentTypeError: |
| 41 | return |
| 42 | assert False |
| 43 | |
| 44 | |
| 45 | @pytest.mark.parametrize( |
| 46 | 'commit, expected', |
| 47 | [ |
| 48 | (get_upstream() + '/20.1', True), |
| 49 | (get_upstream() + '/master', True), |
| 50 | ('20.1', False), |
| 51 | ('master', False), |
| 52 | ('e58a10af640ba58b6001f5c5ad750b782547da76', False), |
| 53 | ('d043d24654c851f0be57dbbf48274b5373dea42b', False), |
| 54 | ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', False), |
| 55 | ('0000000000000000000000000000000000000000', False), |
| 56 | ('not-even-a-valid-commit-format', False), |
| 57 | ]) |
| 58 | def test_validate_branch(commit: str, expected: bool) -> None: |
| 59 | if expected: |
| 60 | assert validate_branch(commit) |
| 61 | else: |
| 62 | try: |
| 63 | assert validate_branch(commit) |
| 64 | except argparse.ArgumentTypeError: |
| 65 | return |
| 66 | assert False |
| 67 | |
| 68 | |
| 69 | @pytest.mark.parametrize( |
| 70 | 'commit, expected', |
| 71 | [ |
| 72 | ('master', True), |
| 73 | ('20.1-branchpoint', True), |
| 74 | ('20.1', False), |
| 75 | (get_upstream() + '/20.1', True), |
| 76 | ('e58a10af640ba58b6001f5c5ad750b782547da76', True), |
| 77 | ('d043d24654c851f0be57dbbf48274b5373dea42b', True), |
| 78 | ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True), |
| 79 | ('0000000000000000000000000000000000000000', False), |
| 80 | ('not-even-a-valid-commit-format', False), |
| 81 | ]) |
| 82 | def test_is_commit_valid(commit: str, expected: bool) -> None: |
| 83 | assert is_commit_valid(commit) == expected |
| 84 | |
| 85 | |
| 86 | @pytest.mark.parametrize( |
| 87 | 'branch, commit, expected', |
| 88 | [ |
| 89 | ('20.1', '20.1-branchpoint', True), |
| 90 | ('20.1', '20.0', False), |
| 91 | ('20.1', 'master', False), |
| 92 | ('20.1', 'e58a10af640ba58b6001f5c5ad750b782547da76', True), |
| 93 | ('20.1', 'd043d24654c851f0be57dbbf48274b5373dea42b', True), |
| 94 | ('20.1', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', False), |
| 95 | ('master', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True), |
| 96 | ('20.0', 'd043d24654c851f0be57dbbf48274b5373dea42b', False), |
| 97 | ]) |
| 98 | def test_branch_has_commit(branch: str, commit: str, expected: bool) -> None: |
| 99 | upstream = get_upstream() |
| 100 | assert branch_has_commit(upstream, branch, commit) == expected |
| 101 | |
| 102 | |
| 103 | @pytest.mark.parametrize( |
| 104 | 'branch, commit, expected', |
| 105 | [ |
| 106 | ('20.1', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', 'd043d24654c851f0be57dbbf48274b5373dea42b'), |
| 107 | ('20.1', '20.1-branchpoint', ''), |
| 108 | ('20.1', '20.0', ''), |
| 109 | ('20.1', '20.2', ''), |
| 110 | ('20.1', 'master', ''), |
| 111 | ('20.1', 'd043d24654c851f0be57dbbf48274b5373dea42b', ''), |
| 112 | ('20.0', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', ''), |
| 113 | ]) |
| 114 | def test_branch_has_backport_of_commit(branch: str, commit: str, expected: bool) -> None: |
| 115 | upstream = get_upstream() |
| 116 | assert branch_has_backport_of_commit(upstream, branch, commit) == expected |