Merge pull request #1391 from davvid/macos/hotkeys
[git-cola.git] / test / dag_test.py
blob8a5c8af6a1af130a177ea4fdbb5fcf81a533148d
1 """Tests DAG functionality"""
2 import pytest
4 from cola.models import dag
6 from .helper import app_context
7 from .helper import patch
10 # Prevent unused imports lint errors.
11 assert app_context is not None
14 LOG_LINES = """
15 ad454b189fe5785af397fd6067cf103268b6626e^A^A (tag: refs/tags/v0.0)^ADavid Aguilar^AFri Nov 30 00:03:28 2007 -0800^Adavvid@gmail.com^Afirst cut of ugit
16 1ba04ad185cf9f04c56c8482e9a73ef1bd35c695^Aad454b189fe5785af397fd6067cf103268b6626e^A^ADavid Aguilar^AFri Nov 30 05:07:47 2007 -0800^Adavvid@gmail.com^Aupdated model/view/controller api
17 fa5ad6c38be603e2ffd1f9b722a3a5c675f63de2^A1ba04ad185cf9f04c56c8482e9a73ef1bd35c695^A^ADavid Aguilar^AFri Nov 30 05:19:05 2007 -0800^Adavvid@gmail.com^AAvoid multiple signoffs
18 103766573cd4e6799d3ee792bcd632b92cf7c6c0^Afa5ad6c38be603e2ffd1f9b722a3a5c675f63de2^A^ADavid Aguilar^ATue Dec 11 05:13:21 2007 -0800^Adavvid@gmail.com^AAdded TODO
19 e3f5a2d0248de6197d6e0e63c901810b8a9af2f8^Afa5ad6c38be603e2ffd1f9b722a3a5c675f63de2^A^ADavid Aguilar^AMon Dec 3 02:36:06 2007 -0800^Adavvid@gmail.com^AMerged qlistwidgets into main.
20 f4fb8fd5baaa55d9b41faca79be289bb4407281e^Ae3f5a2d0248de6197d6e0e63c901810b8a9af2f8^A^ADavid Aguilar^ATue Dec 4 03:14:56 2007 -0800^Adavvid@gmail.com^ASquashed commit of the following:
21 23e7eab4ba2c94e3155f5d261c693ccac1342eb9^Af4fb8fd5baaa55d9b41faca79be289bb4407281e^A^ADavid Aguilar^AThu Dec 6 18:59:20 2007 -0800^Adavvid@gmail.com^AMerged diffdisplay into main
22 """.strip().replace( # noqa
23 '^A', chr(0x01)
24 ).split(
25 '\n'
26 ) + [
28 ] # noqa
31 class DAGTestData:
32 """Test data provided by the dag_context fixture"""
34 def __init__(self, app_context, head='HEAD', count=1000):
35 self.context = app_context
36 self.params = dag.DAG(head, count)
37 self.reader = dag.RepoReader(app_context, self.params)
40 @pytest.fixture
41 def dag_context(app_context):
42 """Provide DAGTestData for use by tests"""
43 return DAGTestData(app_context)
46 @patch('cola.models.dag.core')
47 def test_repo_reader(core, dag_context):
48 expect = len(LOG_LINES) - 1
50 actual = 0
51 core.readline.return_value = LOG_LINES[0]
52 for idx, _ in enumerate(dag_context.reader.get()):
53 core.readline.return_value = LOG_LINES[idx + 1]
54 actual += 1
56 assert expect == actual
59 @patch('cola.models.dag.core')
60 def test_repo_reader_order(core, dag_context):
61 commits = [
62 'ad454b189fe5785af397fd6067cf103268b6626e',
63 '1ba04ad185cf9f04c56c8482e9a73ef1bd35c695',
64 'fa5ad6c38be603e2ffd1f9b722a3a5c675f63de2',
65 '103766573cd4e6799d3ee792bcd632b92cf7c6c0',
66 'e3f5a2d0248de6197d6e0e63c901810b8a9af2f8',
67 'f4fb8fd5baaa55d9b41faca79be289bb4407281e',
68 '23e7eab4ba2c94e3155f5d261c693ccac1342eb9',
70 core.readline.return_value = LOG_LINES[0]
71 for idx, commit in enumerate(dag_context.reader.get()):
72 assert commits[idx] == commit.oid
73 core.readline.return_value = LOG_LINES[idx + 1]
76 @patch('cola.models.dag.core')
77 def test_repo_reader_parents(core, dag_context):
78 parents = [
79 [],
80 ['ad454b189fe5785af397fd6067cf103268b6626e'],
81 ['1ba04ad185cf9f04c56c8482e9a73ef1bd35c695'],
82 ['fa5ad6c38be603e2ffd1f9b722a3a5c675f63de2'],
83 ['fa5ad6c38be603e2ffd1f9b722a3a5c675f63de2'],
84 ['e3f5a2d0248de6197d6e0e63c901810b8a9af2f8'],
85 ['f4fb8fd5baaa55d9b41faca79be289bb4407281e'],
87 core.readline.return_value = LOG_LINES[0]
88 for idx, commit in enumerate(dag_context.reader.get()):
89 assert parents[idx] == [p.oid for p in commit.parents]
90 core.readline.return_value = LOG_LINES[idx + 1]
93 @patch('cola.models.dag.core')
94 def test_repo_reader_contract(core, dag_context):
95 core.exists.return_value = True
96 core.readline.return_value = LOG_LINES[0]
98 for idx, _ in enumerate(dag_context.reader.get()):
99 core.readline.return_value = LOG_LINES[idx + 1]
101 core.start_command.assert_called()
102 call_args = core.start_command.call_args
104 assert 'log.abbrevCommit=false' in call_args[0][0]
105 assert 'log.showSignature=false' in call_args[0][0]