Skip to content

Commit 0e0d4ae

Browse files
author
Gauvain Pocentek
committed
[v4] More python functional tests
1 parent 311464b commit 0e0d4ae

File tree

2 files changed

+127
-16
lines changed

2 files changed

+127
-16
lines changed

gitlab/v4/objects.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -209,13 +209,13 @@ class UserManager(CRUDMixin, RESTManager):
209209
_obj_cls = User
210210

211211
_list_filters = ('active', 'blocked', 'username', 'extern_uid', 'provider',
212-
'external')
212+
'external', 'search')
213213
_create_attrs = (
214-
('email', 'username', 'name'),
215-
('password', 'reset_password', 'skype', 'linkedin', 'twitter',
216-
'projects_limit', 'extern_uid', 'provider', 'bio', 'admin',
217-
'can_create_group', 'website_url', 'skip_confirmation', 'external',
218-
'organization', 'location')
214+
tuple(),
215+
('email', 'username', 'name', 'password', 'reset_password', 'skype',
216+
'linkedin', 'twitter', 'projects_limit', 'extern_uid', 'provider',
217+
'bio', 'admin', 'can_create_group', 'website_url',
218+
'skip_confirmation', 'external', 'organization', 'location')
219219
)
220220
_update_attrs = (
221221
('email', 'username', 'name'),
@@ -730,13 +730,14 @@ class ProjectCommitStatus(RESTObject):
730730
pass
731731

732732

733-
class ProjectCommitStatusManager(RetrieveMixin, CreateMixin, RESTManager):
733+
class ProjectCommitStatusManager(GetFromListMixin, CreateMixin, RESTManager):
734734
_path = ('/projects/%(project_id)s/repository/commits/%(commit_id)s'
735735
'/statuses')
736736
_obj_cls = ProjectCommitStatus
737737
_from_parent_attrs = {'project_id': 'project_id', 'commit_id': 'id'}
738-
_create_attrs = (('state', ),
739-
('description', 'name', 'context', 'ref', 'target_url'))
738+
_create_attrs = (('state', 'sha'),
739+
('description', 'name', 'context', 'ref', 'target_url',
740+
'coverage'))
740741

741742
def create(self, data, **kwargs):
742743
"""Create a new object.
@@ -761,7 +762,7 @@ def create(self, data, **kwargs):
761762

762763

763764
class ProjectCommitComment(RESTObject):
764-
pass
765+
_id_attr = None
765766

766767

767768
class ProjectCommitCommentManager(ListMixin, CreateMixin, RESTManager):
@@ -864,10 +865,11 @@ def enable(self, key_id, **kwargs):
864865

865866

866867
class ProjectEvent(RESTObject):
868+
_id_attr = None
867869
_short_print_attr = 'target_title'
868870

869871

870-
class ProjectEventManager(GetFromListMixin, RESTManager):
872+
class ProjectEventManager(ListMixin, RESTManager):
871873
_path = '/projects/%(project_id)s/events'
872874
_obj_cls = ProjectEvent
873875
_from_parent_attrs = {'project_id': 'id'}

tools/python_test_v4.py

Lines changed: 114 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,30 @@
3131
gl.auth()
3232
assert(isinstance(gl.user, gitlab.v4.objects.CurrentUser))
3333

34+
# sidekiq
35+
out = gl.sidekiq.queue_metrics()
36+
assert(isinstance(out, dict))
37+
assert('pages' in out['queues'])
38+
out = gl.sidekiq.process_metrics()
39+
assert(isinstance(out, dict))
40+
assert('hostname' in out['processes'][0])
41+
out = gl.sidekiq.job_stats()
42+
assert(isinstance(out, dict))
43+
assert('processed' in out['jobs'])
44+
out = gl.sidekiq.compound_metrics()
45+
assert(isinstance(out, dict))
46+
assert('jobs' in out)
47+
assert('processes' in out)
48+
assert('queues' in out)
49+
3450
# settings
3551
settings = gl.settings.get()
3652
settings.default_projects_limit = 42
3753
settings.save()
3854
settings = gl.settings.get()
3955
assert(settings.default_projects_limit == 42)
4056

41-
# user manipulations
57+
# users
4258
new_user = gl.users.create({'email': 'foo@bar.com', 'username': 'foo',
4359
'name': 'foo', 'password': 'foo_password'})
4460
users_list = gl.users.list()
@@ -61,6 +77,8 @@
6177
actual = sorted(list(gl.users.list(search='foo')), cmp=usercmp)
6278
assert len(expected) == len(actual)
6379
assert len(gl.users.list(search='asdf')) == 0
80+
foobar_user.bio = 'This is the user bio'
81+
foobar_user.save()
6482

6583
# SSH keys
6684
key = new_user.keys.create({'title': 'testkey', 'key': SSH_KEY})
@@ -78,12 +96,36 @@
7896
foobar_user.delete()
7997
assert(len(gl.users.list()) == 3)
8098

99+
# current user mail
100+
mail = gl.user.emails.create({'email': 'current@user.com'})
101+
assert(len(gl.user.emails.list()) == 1)
102+
mail.delete()
103+
assert(len(gl.user.emails.list()) == 0)
104+
81105
# current user key
82106
key = gl.user.keys.create({'title': 'testkey', 'key': SSH_KEY})
83107
assert(len(gl.user.keys.list()) == 1)
84108
key.delete()
85109
assert(len(gl.user.keys.list()) == 0)
86110

111+
# templates
112+
assert(gl.dockerfiles.list())
113+
dockerfile = gl.dockerfiles.get('Node')
114+
assert(dockerfile.content is not None)
115+
116+
assert(gl.gitignores.list())
117+
gitignore = gl.gitignores.get('Node')
118+
assert(gitignore.content is not None)
119+
120+
assert(gl.gitlabciymls.list())
121+
gitlabciyml = gl.gitlabciymls.get('Nodejs')
122+
assert(gitlabciyml.content is not None)
123+
124+
assert(gl.licenses.list())
125+
license = gl.licenses.get('bsd-2-clause', project='mytestproject',
126+
fullname='mytestfullname')
127+
assert('mytestfullname' in license.content)
128+
87129
# groups
88130
user1 = gl.users.create({'email': 'user1@test.com', 'username': 'user1',
89131
'name': 'user1', 'password': 'user1_pass'})
@@ -121,6 +163,13 @@
121163

122164
group2.members.delete(gl.user.id)
123165

166+
# group notification settings
167+
settings = group2.notificationsettings.get()
168+
settings.level = 'disabled'
169+
settings.save()
170+
settings = group2.notificationsettings.get()
171+
assert(settings.level == 'disabled')
172+
124173
# hooks
125174
hook = gl.hooks.create({'url': 'http://whatever.com'})
126175
assert(len(gl.hooks.list()) == 1)
@@ -175,9 +224,20 @@
175224
]
176225
}
177226
admin_project.commits.create(data)
227+
assert('---' in admin_project.commits.list()[0].diff()[0]['diff'])
178228

229+
# commit status
230+
commit = admin_project.commits.list()[0]
231+
status = commit.statuses.create({'state': 'success', 'sha': commit.id})
232+
assert(len(commit.statuses.list()) == 1)
233+
234+
# commit comment
235+
commit.comments.create({'note': 'This is a commit comment'})
236+
assert(len(commit.comments.list()) == 1)
237+
238+
# repository
179239
tree = admin_project.repository_tree()
180-
assert(len(tree) == 2)
240+
assert(len(tree) != 0)
181241
assert(tree[0]['name'] == 'README.rst')
182242
blob_id = tree[0]['id']
183243
blob = admin_project.repository_raw_blob(blob_id)
@@ -186,6 +246,36 @@
186246
archive2 = admin_project.repository_archive('master')
187247
assert(archive1 == archive2)
188248

249+
# environments
250+
admin_project.environments.create({'name': 'env1', 'external_url':
251+
'http://fake.env/whatever'})
252+
envs = admin_project.environments.list()
253+
assert(len(envs) == 1)
254+
env = admin_project.environments.get(envs[0].id)
255+
env.external_url = 'http://new.env/whatever'
256+
env.save()
257+
env = admin_project.environments.get(envs[0].id)
258+
assert(env.external_url == 'http://new.env/whatever')
259+
env.delete()
260+
assert(len(admin_project.environments.list()) == 0)
261+
262+
# events
263+
admin_project.events.list()
264+
265+
# forks
266+
fork = admin_project.forks.create({'namespace': user1.username})
267+
p = gl.projects.get(fork.id)
268+
assert(p.forked_from_project['id'] == admin_project.id)
269+
270+
# project hooks
271+
hook = admin_project.hooks.create({'url': 'http://hook.url'})
272+
assert(len(admin_project.hooks.list()) == 1)
273+
hook.note_events = True
274+
hook.save()
275+
hook = admin_project.hooks.get(hook.id)
276+
assert(hook.note_events is True)
277+
hook.delete()
278+
189279
# deploy keys
190280
deploy_key = admin_project.keys.create({'title': 'foo@bar', 'key': DEPLOY_KEY})
191281
project_keys = list(admin_project.keys.list())
@@ -231,6 +321,10 @@
231321
assert(len(admin_project.issues.list(state='opened')) == 2)
232322
assert(len(admin_project.issues.list(milestone='milestone1')) == 1)
233323
assert(m1.issues().next().title == 'my issue 1')
324+
note = issue1.notes.create({'body': 'This is an issue note'})
325+
assert(len(issue1.notes.list()) == 1)
326+
note.delete()
327+
assert(len(issue1.notes.list()) == 0)
234328

235329
# tags
236330
tag1 = admin_project.tags.create({'tag_name': 'v1.0', 'ref': 'master'})
@@ -240,6 +334,22 @@
240334
assert(tag1.release['description'] == 'Description 2')
241335
tag1.delete()
242336

337+
# project snippet
338+
admin_project.snippets_enabled = True
339+
admin_project.save()
340+
snippet = admin_project.snippets.create(
341+
{'title': 'snip1', 'file_name': 'foo.py', 'code': 'initial content',
342+
'visibility': gitlab.v4.objects.VISIBILITY_PRIVATE}
343+
)
344+
snippet.file_name = 'bar.py'
345+
snippet.save()
346+
snippet = admin_project.snippets.get(snippet.id)
347+
assert(snippet.content() == 'initial content')
348+
assert(snippet.file_name == 'bar.py')
349+
size = len(admin_project.snippets.list())
350+
snippet.delete()
351+
assert(len(admin_project.snippets.list()) == (size - 1))
352+
243353
# triggers
244354
tr1 = admin_project.triggers.create({'description': 'trigger1'})
245355
assert(len(admin_project.triggers.list()) == 1)
@@ -330,12 +440,11 @@
330440
assert(len(snippets) == 0)
331441
snippet = gl.snippets.create({'title': 'snippet1', 'file_name': 'snippet1.py',
332442
'content': 'import gitlab'})
333-
snippet = gl.snippets.get(1)
443+
snippet = gl.snippets.get(snippet.id)
334444
snippet.title = 'updated_title'
335445
snippet.save()
336-
snippet = gl.snippets.get(1)
446+
snippet = gl.snippets.get(snippet.id)
337447
assert(snippet.title == 'updated_title')
338448
content = snippet.content()
339449
assert(content == 'import gitlab')
340450
snippet.delete()
341-
assert(len(gl.snippets.list()) == 0)

0 commit comments

Comments
 (0)