/
test_backend.py
166 lines (143 loc) · 5.81 KB
/
test_backend.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
from __future__ import absolute_import
from os.path import exists
import pytest
from django.contrib.auth.models import User
import django_dynamic_fixture as fixture
from readthedocs.projects.exceptions import RepositoryError
from readthedocs.projects.models import Project, Feature
from readthedocs.rtd_tests.base import RTDTestCase
from readthedocs.rtd_tests.utils import make_test_git, make_test_hg
class TestGitBackend(RTDTestCase):
def setUp(self):
git_repo = make_test_git()
super(TestGitBackend, self).setUp()
self.eric = User(username='eric')
self.eric.set_password('test')
self.eric.save()
self.project = Project.objects.create(
name="Test Project",
repo_type="git",
#Our top-level checkout
repo=git_repo
)
self.project.users.add(self.eric)
def test_parse_branches(self):
data = """
develop
master
release/2.0.0
origin/2.0.X
origin/HEAD -> origin/master
origin/master
origin/release/2.0.0
origin/release/foo/bar
"""
expected_ids = [
('develop', 'develop'),
('master', 'master'),
('release/2.0.0', 'release/2.0.0'),
('origin/2.0.X', '2.0.X'),
('origin/master', 'master'),
('origin/release/2.0.0', 'release/2.0.0'),
('origin/release/foo/bar', 'release/foo/bar'),
]
given_ids = [(x.identifier, x.verbose_name) for x in
self.project.vcs_repo().parse_branches(data)]
self.assertEqual(expected_ids, given_ids)
def test_git_checkout(self):
repo = self.project.vcs_repo()
repo.checkout()
self.assertTrue(exists(repo.working_dir))
def test_parse_git_tags(self):
data = """\
3b32886c8d3cb815df3793b3937b2e91d0fb00f1 refs/tags/2.0.0
bd533a768ff661991a689d3758fcfe72f455435d refs/tags/2.0.1
c0288a17899b2c6818f74e3a90b77e2a1779f96a refs/tags/2.0.2
a63a2de628a3ce89034b7d1a5ca5e8159534eef0 refs/tags/2.1.0.beta2
c7fc3d16ed9dc0b19f0d27583ca661a64562d21e refs/tags/2.1.0.rc1
edc0a2d02a0cc8eae8b67a3a275f65cd126c05b1 refs/tags/2.1.0.rc2
274a5a8c988a804e40da098f59ec6c8f0378fe34 refs/tags/release/foobar
"""
expected_tags = [
('3b32886c8d3cb815df3793b3937b2e91d0fb00f1', '2.0.0'),
('bd533a768ff661991a689d3758fcfe72f455435d', '2.0.1'),
('c0288a17899b2c6818f74e3a90b77e2a1779f96a', '2.0.2'),
('a63a2de628a3ce89034b7d1a5ca5e8159534eef0', '2.1.0.beta2'),
('c7fc3d16ed9dc0b19f0d27583ca661a64562d21e', '2.1.0.rc1'),
('edc0a2d02a0cc8eae8b67a3a275f65cd126c05b1', '2.1.0.rc2'),
('274a5a8c988a804e40da098f59ec6c8f0378fe34', 'release/foobar'),
]
given_ids = [(x.identifier, x.verbose_name) for x in
self.project.vcs_repo().parse_tags(data)]
self.assertEqual(expected_tags, given_ids)
def test_check_for_submodules(self):
repo = self.project.vcs_repo()
repo.checkout()
self.assertFalse(repo.are_submodules_available())
# The submodule branch contains one submodule
repo.checkout('submodule')
self.assertTrue(repo.are_submodules_available())
def test_skip_submodule_checkout(self):
repo = self.project.vcs_repo()
repo.checkout('submodule')
self.assertTrue(repo.are_submodules_available())
feature = fixture.get(
Feature,
projects=[self.project],
feature_id=Feature.SKIP_SUBMODULES,
)
self.assertTrue(self.project.has_feature(Feature.SKIP_SUBMODULES))
self.assertFalse(repo.are_submodules_available())
def test_check_submodule_urls(self):
repo = self.project.vcs_repo()
repo.checkout('submodule')
self.assertTrue(repo.are_submodules_valid())
repo.checkout('relativesubmodule')
self.assertTrue(repo.are_submodules_valid())
@pytest.mark.xfail(strict=True, reason="Fixture is not working correctly")
def test_check_invalid_submodule_urls(self):
with self.assertRaises(RepositoryError) as e:
repo.checkout('invalidsubmodule')
self.assertEqual(e.msg, RepositoryError.INVALID_SUBMODULES)
class TestHgBackend(RTDTestCase):
def setUp(self):
hg_repo = make_test_hg()
super(TestHgBackend, self).setUp()
self.eric = User(username='eric')
self.eric.set_password('test')
self.eric.save()
self.project = Project.objects.create(
name="Test Project",
repo_type="hg",
#Our top-level checkout
repo=hg_repo
)
self.project.users.add(self.eric)
def test_parse_branches(self):
data = """\
stable
default
"""
expected_ids = ['stable', 'default']
given_ids = [x.identifier for x in
self.project.vcs_repo().parse_branches(data)]
self.assertEqual(expected_ids, given_ids)
def test_checkout(self):
repo = self.project.vcs_repo()
repo.checkout()
self.assertTrue(exists(repo.working_dir))
def test_parse_tags(self):
data = """\
tip 13575:8e94a1b4e9a4
1.8.1 13573:aa1f3be38ab1
1.8 13515:2616325766e3
1.7.5 13334:2b2155623ee2
"""
expected_tags = [
('aa1f3be38ab1', '1.8.1'),
('2616325766e3', '1.8'),
('2b2155623ee2', '1.7.5'),
]
given_ids = [(x.identifier, x.verbose_name) for x in
self.project.vcs_repo().parse_tags(data)]
self.assertEqual(expected_tags, given_ids)