Skip to content

Commit b4440c9

Browse files
committed
Added tests for the CLI parser for gist subcommands
1 parent 1303e16 commit b4440c9

File tree

2 files changed

+201
-52
lines changed

2 files changed

+201
-52
lines changed

tests/helpers.py

Lines changed: 79 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ def __init__(self, *args, **kwarg):
2525
self._did_create = None
2626
self._did_fork = None
2727
self._did_user = False
28+
self._did_gist_list = None
29+
self._did_gist_fetch = None
30+
self._did_gist_clone = None
31+
self._did_gist_create = None
32+
self._did_gist_delete = None
2833

2934
def pull(self, *args, **kwarg):
3035
self._did_pull = (args, kwarg)
@@ -50,6 +55,45 @@ def create(self, *args, **kwarg):
5055
def fork(self, *args, **kwarg):
5156
self._did_fork = (args, kwarg)
5257

58+
def gist_list(self, *args, **kwarg):
59+
self._did_gist_list = (args, kwarg)
60+
if len(args) == 0:
61+
return [('id1', 'value1'),
62+
('id2', 'value2'),
63+
('id3', 'value3')]
64+
elif len(args) == 1:
65+
if args[0] == 'bad':
66+
raise Exception('bad gist!')
67+
else:
68+
return [('lang1', 'size1', 'name1'),
69+
('lang2', 'size2', 'name2'),
70+
('lang3', 'size3', 'name3')]
71+
72+
def gist_fetch(self, *args, **kwarg):
73+
self._did_gist_fetch = (args, kwarg)
74+
if args[0] == 'bad':
75+
raise Exception('bad gist!')
76+
elif args[1] == 'bad':
77+
raise Exception('bad gist file!')
78+
else:
79+
return "content of a gist"
80+
81+
def gist_clone(self, *args, **kwarg):
82+
self._did_gist_clone = (args, kwarg)
83+
if args[0] == 'bad':
84+
raise Exception('bad gist!')
85+
86+
def gist_create(self, *args, **kwarg):
87+
self._did_gist_create = (args, kwarg)
88+
if 'exists' in args[0]:
89+
raise Exception('gist exists!')
90+
return 'https://gists/42'
91+
92+
def gist_delete(self, *args, **kwarg):
93+
self._did_gist_delete = (args, kwarg)
94+
if args[0] == 'bad':
95+
raise Exception('bad gist!')
96+
5397
@property
5498
def user(self):
5599
self._did_user = True
@@ -101,6 +145,7 @@ def setup_args(self, d, args={}):
101145
'fetch': False,
102146
'fork': False,
103147
'list': False,
148+
'ls': False,
104149
'open': False,
105150
'--secret': False,
106151
'<description>': None,
@@ -160,23 +205,47 @@ def main_fork(self, repo, rc=0, args={}):
160205
}, args)), "Non {} result for fork".format(rc)
161206
return RepositoryService._current._did_fork
162207

163-
def main_request_list(self, repo, rc=0, args={}):
164-
assert True
208+
def main_gist_list(self, rc=0, args={}):
209+
assert rc == main(self.setup_args({
210+
'gist': True,
211+
'list': True,
212+
}, args)), "Non {} result for gist list".format(rc)
213+
return RepositoryService._current._did_gist_list
165214

166-
def main_request_fetch(self, repo, rc=0, args={}):
167-
assert True
215+
def main_gist_ls(self, rc=0, args={}):
216+
assert rc == main(self.setup_args({
217+
'gist': True,
218+
'ls': True,
219+
}, args)), "Non {} result for gist ls".format(rc)
220+
return RepositoryService._current._did_gist_list
168221

169-
def main_gist_list(self, rc=0, args={}):
170-
assert True
222+
def main_gist_clone(self, rc=0, args={}):
223+
assert rc == main(self.setup_args({
224+
'gist': True,
225+
'clone': True,
226+
}, args)), "Non {} result for gist clone".format(rc)
227+
return RepositoryService._current._did_gist_clone
171228

172-
def main_gist_fetch(self, capsys, rc=0, args={}):
173-
assert True
229+
def main_gist_fetch(self, rc=0, args={}):
230+
assert rc == main(self.setup_args({
231+
'gist': True,
232+
'fetch': True,
233+
}, args)), "Non {} result for gist fetch".format(rc)
234+
return RepositoryService._current._did_gist_fetch
174235

175236
def main_gist_create(self, rc=0, args={}):
176-
assert True
237+
assert rc == main(self.setup_args({
238+
'gist': True,
239+
'create': True,
240+
}, args)), "Non {} result for gist create".format(rc)
241+
return RepositoryService._current._did_gist_create
177242

178243
def main_gist_delete(self, rc=0, args={}):
179-
assert True
244+
assert rc == main(self.setup_args({
245+
'gist': True,
246+
'delete': True,
247+
}, args)), "Non {} result for gist delete".format(rc)
248+
return RepositoryService._current._did_gist_delete
180249

181250
def main_open(self, repo, rc=0, args={}):
182251
os.mkdir(os.path.join(self.tempdir.name, repo.split('/')[-1]))

tests/integration/test_main.py

Lines changed: 122 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -154,53 +154,133 @@ def test_fork__branch_clone(self):
154154
assert ('guyzmo', 'git-repo') == repo_slug
155155
assert {'branch': 'foobar', 'clone': True} == seen_args
156156

157-
def test_gist_list(self):
158-
repo_slug, seen_args = self.main_gist_list(0, args={})
159-
160-
def test_gist_list__with_gist(self):
161-
repo_slug, seen_args = self.main_gist_list(0, args={})
162-
163-
def test_gist_list__with_bad_gist(self):
164-
repo_slug, seen_args = self.main_gist_list(0, args={})
165-
166-
def test_gist_clone__with_gist(self):
167-
repo_slug, seen_args = self.main_gist_clone(0, args={})
168-
169-
def test_gist_clone__with_bad_gist(self):
170-
repo_slug, seen_args = self.main_gist_clone(0, args={})
157+
def test_gist_list(self, capsys, caplog):
158+
did_list = self.main_gist_list(0, args={})
159+
out, err = capsys.readouterr()
160+
assert did_list == ((), {})
161+
assert 'id' in caplog.text and 'title' in caplog.text
162+
assert out == ''.join([
163+
'id1 \tvalue1\n',
164+
'id2 \tvalue2\n',
165+
'id3 \tvalue3\n'
166+
])
167+
168+
def test_gist_ls(self, capsys, caplog):
169+
did_list = self.main_gist_ls(0, args={})
170+
out, err = capsys.readouterr()
171+
assert did_list == ((), {})
172+
assert 'id' in caplog.text and 'title' in caplog.text
173+
assert out == ''.join([
174+
'id1 \tvalue1\n',
175+
'id2 \tvalue2\n',
176+
'id3 \tvalue3\n'
177+
])
178+
179+
def test_gist_list__with_gist(self, capsys, caplog):
180+
did_list = self.main_gist_list(0, args={'<gist>': 'foobar'})
181+
out, err = capsys.readouterr()
182+
assert did_list == (('foobar',), {})
183+
assert 'language' in caplog.text and 'size' in caplog.text and 'name' in caplog.text
184+
assert out == ''.join([
185+
'lang1 \tsize1 \tname1\n',
186+
'lang2 \tsize2 \tname2\n',
187+
'lang3 \tsize3 \tname3\n'
188+
])
189+
190+
def test_gist_list__with_bad_gist(self, caplog):
191+
did_list = self.main_gist_list(2, args={'<gist>': 'bad', '--verbose': 0})
192+
assert did_list == (('bad',), {})
193+
assert 'language \t size\tname' in caplog.text
194+
assert 'Fatal error: bad gist!' in caplog.text
195+
196+
def test_gist_clone__with_gist(self, caplog):
197+
did_clone = self.main_gist_clone(0, args={'<gist>': '42'})
198+
assert did_clone == (('42',), {})
199+
assert 'git init' in caplog.text
200+
assert 'Successfully cloned `42` into `./42`!' in caplog.text
201+
202+
def test_gist_clone__with_bad_gist(self, caplog):
203+
did_clone = self.main_gist_clone(2, args={'<gist>': 'bad', '--verbose': 0})
204+
assert did_clone == (('bad',), {})
205+
assert 'Fatal error: bad gist!\n' in caplog.text
171206

172207
def test_gist_fetch__with_gist(self, capsys):
173-
repo_slug, seen_args = self.main_gist_fetch(capsys, 0, args={})
208+
did_fetch = self.main_gist_fetch(0, args={'<gist>': '42'})
209+
out, err = capsys.readouterr()
210+
assert did_fetch == (('42', None), {})
211+
assert out == 'content of a gist\n'
212+
assert err == ''
174213

175-
def test_gist_fetch__with_bad_gist(self, capsys):
176-
repo_slug, seen_args = self.main_gist_fetch(capsys, 0, args={})
214+
def test_gist_fetch__with_bad_gist(self, caplog):
215+
did_fetch = self.main_gist_fetch(2, args={'<gist>': 'bad', '--verbose': 0})
216+
assert did_fetch == (('bad', None), {})
217+
assert 'Fatal error: bad gist!\n' in caplog.text
177218

178219
def test_gist_fetch__with_gist_file(self, capsys):
179-
repo_slug, seen_args = self.main_gist_fetch(capsys, 0, args={})
180-
181-
def test_gist_fetch__with_bad_gist_file(self, capsys):
182-
repo_slug, seen_args = self.main_gist_fetch(capsys, 0, args={})
183-
184-
def test_gist_create__gist_file(self):
185-
repo_slug, seen_args = self.main_gist_create(0, args={})
186-
187-
def test_gist_create__gist_file_list(self):
188-
repo_slug, seen_args = self.main_gist_create(0, args={})
189-
190-
def test_gist_create__gist_dir(self):
191-
repo_slug, seen_args = self.main_gist_create(0, args={})
192-
193-
def test_gist_create__gist_file_list_secret(self):
194-
repo_slug, seen_args = self.main_gist_create(0, args={})
195-
196-
def test_gist_create__gist_file_secret(self):
197-
repo_slug, seen_args = self.main_gist_create(0, args={})
198-
199-
def test_gist_create__gist_dir_secret(self):
200-
repo_slug, seen_args = self.main_gist_create(0, args={})
201-
202-
def test_gist_delete(self):
203-
repo_slug, seen_args = self.main_gist_delete(0, args={})
220+
did_fetch = self.main_gist_fetch(0, args={'<gist>': '42', '<gist_file>': 'fubar'})
221+
out, err = capsys.readouterr()
222+
assert did_fetch == (('42', 'fubar'), {})
223+
assert out == 'content of a gist\n'
224+
assert err == ''
225+
226+
def test_gist_fetch__with_bad_gist_file(self, caplog):
227+
did_fetch = self.main_gist_fetch(2, args={'<gist>': '42', '<gist_file>': 'bad', '--verbose': 0})
228+
assert did_fetch == (('42', 'bad'), {})
229+
assert 'Fatal error: bad gist file!\n' in caplog.text
230+
231+
def test_gist_create(self, caplog):
232+
did_create = self.main_gist_create(0, args={
233+
'<gist_path>': ['f1'],
234+
'<description>': 'fubar',
235+
'--secret': False,
236+
'--verbose': 0
237+
238+
})
239+
assert did_create == ((['f1'], 'fubar', False), {})
240+
assert 'Successfully created gist `https://gists/42`!\n' in caplog.text
241+
242+
def test_gist_create__exists(self, caplog):
243+
did_create = self.main_gist_create(2, args={
244+
'<gist_path>': ['exists'],
245+
'<description>': 'fubar',
246+
'--secret': False,
247+
'--verbose': 0
248+
})
249+
assert did_create == ((['exists'], 'fubar', False), {})
250+
assert 'Fatal error: gist exists!' in caplog.text
251+
252+
def test_gist_create__secret(self, caplog):
253+
did_create = self.main_gist_create(0, args={
254+
'<gist_path>': ['f1'],
255+
'<description>': 'fubar',
256+
'--secret': True,
257+
'--verbose': 0
258+
259+
})
260+
assert did_create == ((['f1'], 'fubar', True), {})
261+
assert 'Successfully created gist `https://gists/42`!\n' in caplog.text
262+
263+
def test_gist_create__secret__exists(self, caplog):
264+
did_create = self.main_gist_create(2, args={
265+
'<gist_path>': ['exists'],
266+
'<description>': 'fubar',
267+
'--secret': True,
268+
'--verbose': 0
269+
})
270+
assert did_create == ((['exists'], 'fubar', True), {})
271+
assert 'Fatal error: gist exists!' in caplog.text
272+
273+
def test_gist_delete__force(self, caplog):
274+
did_delete = self.main_gist_delete(0, args={'--force': True})
275+
assert 'Successfully deleted gist!' in caplog.text
276+
277+
def test_gist_delete__ask(self, caplog):
278+
import io, sys
279+
stdin = sys.stdin
280+
sys.stdin = io.StringIO('y\nburn!')
281+
did_delete = self.main_gist_delete(0, args={'--force': True})
282+
sys.stdin = stdin
283+
assert 'Successfully deleted gist!' in caplog.text
204284

205285
def test_open(self):
206286
repo_slug, seen_args = self.main_open('guyzmo/git-repo', 0)

0 commit comments

Comments
 (0)