Show More
@@ -20,38 +20,62 b'' | |||||
20 |
|
20 | |||
21 | import pytest |
|
21 | import pytest | |
22 |
|
22 | |||
23 | from mock import patch |
|
23 | from mock import call, patch | |
24 |
|
24 | |||
25 | from rhodecode.lib.vcs.backends.base import Reference |
|
25 | from rhodecode.lib.vcs.backends.base import Reference | |
26 |
|
26 | |||
27 |
|
27 | |||
28 | class TestMercurialRemoteRepoInvalidation(object): |
|
28 | class TestMercurialRemoteRepoInvalidation(object): | |
29 |
ref |
|
29 | default_ref = Reference('branch', 'default', None) | |
30 |
|
30 | writing_methods = [ | ||
31 | @pytest.mark.parametrize('method_name', [ |
|
|||
32 | 'bookmark', |
|
31 | 'bookmark', | |
33 | 'commit', |
|
32 | 'commit', | |
|
33 | 'merge', | |||
34 | 'pull', |
|
34 | 'pull', | |
35 | 'pull_cmd', |
|
35 | 'pull_cmd', | |
36 | 'push', |
|
|||
37 | 'rebase', |
|
36 | 'rebase', | |
38 | 'strip', |
|
37 | 'strip', | |
39 |
' |
|
38 | 'tag', | |
|
39 | ] | |||
|
40 | ||||
|
41 | @pytest.mark.parametrize('method_name, method_args', [ | |||
|
42 | ('_local_merge', [default_ref, None, None, None, default_ref]), | |||
|
43 | ('_local_pull', ['', default_ref]), | |||
|
44 | ('bookmark', [None]), | |||
|
45 | ('pull', ['', default_ref]), | |||
|
46 | ('remove_tag', ['mytag', None]), | |||
|
47 | ('strip', [None]), | |||
|
48 | ('tag', ['newtag', None]), | |||
40 | ]) |
|
49 | ]) | |
41 | def test_method_invokes_invalidate_on_remote_repo( |
|
50 | def test_method_invokes_invalidate_on_remote_repo( | |
42 | self, method_name, backend_hg): |
|
51 | self, method_name, method_args, backend_hg): | |
|
52 | """ | |||
|
53 | Check that the listed methods are invalidating the VCSServer cache | |||
|
54 | after invoking a writing method of their remote repository object. | |||
43 |
|
|
55 | """ | |
44 | Check that the listed methods call invalidate_vcs_cache on their remote |
|
56 | tags = {'mytag': 'mytag-id'} | |
45 | repo instance. |
|
57 | ||
46 | """ |
|
58 | def add_tag(name, raw_id, *args, **kwds): | |
47 | from rhodecode.lib.vcs import client_http |
|
59 | tags[name] = raw_id | |
|
60 | ||||
48 | repo = backend_hg.repo.scm_instance() |
|
61 | repo = backend_hg.repo.scm_instance() | |
49 | remote = repo._remote |
|
62 | with patch.object(repo, '_remote') as remote: | |
50 | with patch.object(remote, 'invalidate_vcs_cache') as invalidate_cache: |
|
63 | remote.lookup.return_value = ('commit-id', 'commit-idx') | |
51 | with patch.object(client_http, '_remote_call'): |
|
64 | remote.tags.return_value = tags | |
52 | method = getattr(remote, method_name) |
|
65 | remote._get_tags.return_value = tags | |
53 | method() |
|
66 | remote.tag.side_effect = add_tag | |
54 | assert invalidate_cache.called |
|
67 | ||
|
68 | # Invoke method. | |||
|
69 | method = getattr(repo, method_name) | |||
|
70 | method(*method_args) | |||
|
71 | ||||
|
72 | # Assert that every "writing" method is followed by an invocation | |||
|
73 | # of the cache invalidation method. | |||
|
74 | for counter, method_call in enumerate(remote.method_calls): | |||
|
75 | call_name = method_call[0] | |||
|
76 | if call_name in self.writing_methods: | |||
|
77 | next_call = remote.method_calls[counter + 1] | |||
|
78 | assert next_call == call.invalidate_vcs_cache() | |||
55 |
|
79 | |||
56 | def _prepare_shadow_repo(self, pull_request): |
|
80 | def _prepare_shadow_repo(self, pull_request): | |
57 | """ |
|
81 | """ |
General Comments 0
You need to be logged in to leave comments.
Login now