Skip to content

Commit 798a6d1

Browse files
committed
🚧 Adds tests and fixes for add command
1 parent a193d7d commit 798a6d1

File tree

6 files changed

+242
-15
lines changed

6 files changed

+242
-15
lines changed

git_repo/services/service.py

+4
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ def clone(self, user, repo, branch='master', rw=True):
333333
project = self.get_repository(user, repo)
334334
branch = self.get_project_default_branch(project)
335335

336+
remote, *_ = self.add(user=user, repo=repo, tracking=True, rw=rw)
336337
self.pull(remote, branch)
337338

338339
def add(self, repo, user=None, name=None, tracking=False, alone=False, rw=True, auto_slug=False):
@@ -379,6 +380,9 @@ def add(self, repo, user=None, name=None, tracking=False, alone=False, rw=True,
379380
if self.fqdn in url:
380381
remote_urls.add(self.convert_url_into_slug(url))
381382
remote_urls = list(remote_urls)
383+
if len(remote_urls) > 0:
384+
raise ResourceNotFoundError('Couldn\'t find a remote to '
385+
'{service}. Please run git add {service} user/project'.format(service=self.name))
382386
for idx, url in enumerate(remote_urls, 1):
383387
print("[{:d}] {}".format(idx, url))
384388
try:

tests/helpers.py

+16-6
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,11 @@ def pull(self, *args, **kwarg):
7373
def clone(self, *args, **kwarg):
7474
self._did_clone = (args, kwarg)
7575

76-
def add(self, *args, **kwarg):
77-
self._did_add = (args, kwarg)
76+
def add(self, repo, user=None, *args, **kwarg):
77+
self._did_add = ((user, repo)+args, kwarg)
78+
class FakeRemote:
79+
name = 'foobar'
80+
return FakeRemote, user, repo
7881

7982
def open(self, *args, **kwarg):
8083
self._did_open = (args, kwarg)
@@ -235,8 +238,12 @@ def setup_args(self, d, args={}):
235238
return cli_args
236239

237240
def main_add(self, repo, rc=0, args={}):
238-
os.mkdir(os.path.join(self.tempdir.name, repo.split('/')[-1]))
239-
Repo.init(os.path.join(self.tempdir.name, repo.split('/')[-1]))
241+
if repo:
242+
create_repo = repo.split('/')[-1]
243+
else:
244+
create_repo = 'fubar'
245+
os.mkdir(os.path.join(self.tempdir.name, create_repo))
246+
Repo.init(os.path.join(self.tempdir.name, create_repo))
240247
assert rc == main(self.setup_args({
241248
'add': True,
242249
'<user>/<repo>': repo,
@@ -581,12 +588,15 @@ def action_delete(self, repository, namespace=None):
581588
namespace = self.service.user
582589
self.assert_repository_not_exists(namespace, repository)
583590

584-
def action_add(self, namespace, repository, alone=False, name=None, tracking='master'):
591+
def action_add(self, namespace, repository, alone=False, name=None,
592+
tracking='master', auto_slug=False, remotes={}):
585593
with self.recorder.use_cassette(self._make_cassette_name()):
586594
# init git in the repository's destination
587595
self.repository.init()
596+
for remote, url in remotes.items():
597+
self.repository.create_remote(remote, url)
588598
self.service.connect()
589-
self.service.add(user=namespace, repo=repository, alone=alone, name=name, tracking=tracking)
599+
self.service.add(user=namespace, repo=repository, alone=alone, name=name, tracking=tracking, auto_slug=auto_slug)
590600
#
591601
if not tracking:
592602
if not alone and not name:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"http_interactions": [
3+
{
4+
"recorded_at": "2017-05-03T18:22:47",
5+
"request": {
6+
"body": {
7+
"encoding": "utf-8",
8+
"string": ""
9+
},
10+
"headers": {
11+
"Accept": "application/vnd.github.v3.full+json",
12+
"Accept-Charset": "utf-8",
13+
"Accept-Encoding": "identity",
14+
"Authorization": "token <PRIVATE_KEY_GITHUB>",
15+
"Connection": "keep-alive",
16+
"Content-Type": "application/json",
17+
"User-Agent": "github3.py/0.9.6"
18+
},
19+
"method": "GET",
20+
"uri": "https://api.github.com/user"
21+
},
22+
"response": {
23+
"body": {
24+
"encoding": "utf-8",
25+
"string": "{\"login\":\"guyzmo\",\"id\":254441,\"avatar_url\":\"https://avatars1.githubusercontent.com/u/254441?v=3\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/guyzmo\",\"html_url\":\"https://github.com/guyzmo\",\"followers_url\":\"https://api.github.com/users/guyzmo/followers\",\"following_url\":\"https://api.github.com/users/guyzmo/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/guyzmo/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/guyzmo/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/guyzmo/subscriptions\",\"organizations_url\":\"https://api.github.com/users/guyzmo/orgs\",\"repos_url\":\"https://api.github.com/users/guyzmo/repos\",\"events_url\":\"https://api.github.com/users/guyzmo/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/guyzmo/received_events\",\"type\":\"User\",\"site_admin\":false,\"name\":\"guyzmo\",\"company\":null,\"blog\":\"http://guyzmo.got.nothing.to/blog/\",\"location\":\"Paris\",\"email\":null,\"hireable\":true,\"bio\":\"I'm zmo on freenode.\\r\\n\\r\\n: :(){ :|:& };:\",\"public_repos\":94,\"public_gists\":33,\"followers\":62,\"following\":15,\"created_at\":\"2010-04-27T14:04:09Z\",\"updated_at\":\"2017-03-10T13:16:43Z\"}"
26+
},
27+
"headers": {
28+
"Access-Control-Allow-Origin": "*",
29+
"Access-Control-Expose-Headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval",
30+
"Cache-Control": "private, max-age=60, s-maxage=60",
31+
"Content-Length": "1160",
32+
"Content-Security-Policy": "default-src 'none'",
33+
"Content-Type": "application/json; charset=utf-8",
34+
"Date": "Wed, 03 May 2017 18:22:47 GMT",
35+
"ETag": "\"8c85e3c34a5f4e44c937b162e8524a4d\"",
36+
"Last-Modified": "Fri, 10 Mar 2017 13:16:43 GMT",
37+
"Server": "GitHub.com",
38+
"Status": "200 OK",
39+
"Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload",
40+
"Vary": "Accept, Authorization, Cookie, X-GitHub-OTP",
41+
"X-Accepted-OAuth-Scopes": "",
42+
"X-Content-Type-Options": "nosniff",
43+
"X-Frame-Options": "deny",
44+
"X-GitHub-Media-Type": "github.v3; param=full; format=json",
45+
"X-GitHub-Request-Id": "85B8:4F4D:C4F635:FB37F1:590A1FF7",
46+
"X-OAuth-Scopes": "repo, delete_repo, gist",
47+
"X-RateLimit-Limit": "5000",
48+
"X-RateLimit-Remaining": "4985",
49+
"X-RateLimit-Reset": "1493837154",
50+
"X-Served-By": "1e9204dbc0447a6f39c3b3c44d87b3f8",
51+
"X-XSS-Protection": "1; mode=block"
52+
},
53+
"status": {
54+
"code": 200,
55+
"message": "OK"
56+
},
57+
"url": "https://api.github.com/user"
58+
}
59+
}
60+
],
61+
"recorded_with": "betamax/0.5.1"
62+
}

tests/integration/cassettes/test_github_test_12_add__upstream.json

+119
Large diffs are not rendered by default.

tests/integration/test_github.py

+24
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,30 @@ def test_12_add__alone_default_name(self):
114114
name='test0r',
115115
tracking='github')
116116

117+
def test_12_add__upstream(self):
118+
self.action_add(namespace=None,
119+
repository='upstream',
120+
alone=True,
121+
tracking=False,
122+
auto_slug=True,
123+
remotes={'github': 'https://github.com/guyzmo/github-testing'})
124+
125+
@pytest.mark.skip
126+
def test_12_add__guess(self):
127+
mock_open(read_data='1\n')
128+
with patch('sys.stdin', mock_open):
129+
self.action_add(namespace=self.local_namespace,
130+
repository='git-repo',
131+
alone=True,
132+
tracking='github',
133+
auto_slug=True,
134+
remotes={
135+
'origin': 'https://github.com/foo/bar',
136+
'wootwoot': '[email protected]:w00t/w00t',
137+
'duckling': 'ssh://github.com/duck/duck',
138+
}
139+
)
140+
117141
def test_13_gist_list(self):
118142
g_list = [
119143
'{:45.45} {}',

tests/integration/test_main.py

+17-9
Original file line numberDiff line numberDiff line change
@@ -18,44 +18,49 @@ class Test_Main(GitRepoMainTestCase):
1818

1919
def test_add(self, capsys):
2020
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0)
21-
assert ('git-repo', 'guyzmo') == repo_slug
21+
assert ('guyzmo', 'git-repo', ) == repo_slug
2222
assert {'name': None,
2323
'alone': False,
24+
'auto_slug': False,
2425
'tracking': 'master'} == seen_args
2526
out, err = capsys.readouterr()
26-
assert 'Successfully added `guyzmo/git-repo` as remote named `github`\n' == err
27+
assert 'Successfully added `guyzmo/git-repo` as remote named `foobar`\n' == err
2728

2829
def test_add__alone(self):
2930
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0,
3031
args={'--alone': True})
31-
assert ('git-repo', 'guyzmo') == repo_slug
32+
assert ('guyzmo', 'git-repo', ) == repo_slug
3233
assert {'name': None,
3334
'alone': True,
35+
'auto_slug': False,
3436
'tracking': 'master'} == seen_args
3537

3638
def test_add__tracking(self):
3739
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0,
3840
args={'--tracking': 'foobar'})
39-
assert ('git-repo', 'guyzmo') == repo_slug
41+
assert ('guyzmo', 'git-repo', ) == repo_slug
4042
assert {'name': None,
4143
'alone': False,
44+
'auto_slug': False,
4245
'tracking': 'foobar'} == seen_args
4346

4447
def test_add__tracking_alone(self):
4548
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0,
4649
args={'--alone': True,
4750
'--tracking': 'foobar'})
48-
assert ('git-repo', 'guyzmo') == repo_slug
51+
assert ('guyzmo', 'git-repo', ) == repo_slug
4952
assert {'name': None,
5053
'alone': True,
54+
'auto_slug': False,
5155
'tracking': 'foobar'} == seen_args
5256

5357
def test_add__name(self, capsys):
5458
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0,
5559
args={'<name>': 'foobar'})
56-
assert ('git-repo', 'guyzmo') == repo_slug
60+
assert ('guyzmo', 'git-repo', ) == repo_slug
5761
assert {'name': 'foobar',
5862
'alone': False,
63+
'auto_slug': False,
5964
'tracking': 'master'} == seen_args
6065
out, err = capsys.readouterr()
6166
assert 'Successfully added `guyzmo/git-repo` as remote named `foobar`\n' in err
@@ -64,28 +69,31 @@ def test_add__name_tracking(self):
6469
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0,
6570
args={'<name>': 'foobar',
6671
'--tracking': 'barfoo'})
67-
assert ('git-repo', 'guyzmo') == repo_slug
72+
assert ('guyzmo', 'git-repo', ) == repo_slug
6873
assert {'name': 'foobar',
6974
'alone': False,
75+
'auto_slug': False,
7076
'tracking': 'barfoo'} == seen_args
7177

7278
def test_add__name_alone(self):
7379
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0,
7480
args={'--alone': True,
7581
'<name>': 'foobar'})
76-
assert ('git-repo', 'guyzmo') == repo_slug
82+
assert ('guyzmo', 'git-repo', ) == repo_slug
7783
assert {'name': 'foobar',
7884
'alone': True,
85+
'auto_slug': False,
7986
'tracking': 'master'} == seen_args
8087

8188
def test_add__name_alone_tracking(self):
8289
repo_slug, seen_args = self.main_add('guyzmo/git-repo', 0,
8390
args={'--alone': True,
8491
'<name>': 'foobar',
8592
'--tracking': 'barfoo'})
86-
assert ('git-repo', 'guyzmo') == repo_slug
93+
assert ('guyzmo', 'git-repo', ) == repo_slug
8794
assert {'name': 'foobar',
8895
'alone': True,
96+
'auto_slug': False,
8997
'tracking': 'barfoo'} == seen_args
9098

9199
def test_clone(self):

0 commit comments

Comments
 (0)