summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2017-08-21 11:55:00 +0200
committerGauvain Pocentek <gauvain@pocentek.net>2017-08-21 11:55:00 +0200
commit0e0d4aee3e73e2caf86c50bc9152764528f7725a (patch)
treef56d4c96aec4e17f7d4bb1dc3d1b1f662ea14701
parent311464b71c508503d5275db5975bc10ed74674bd (diff)
downloadgitlab-0e0d4aee3e73e2caf86c50bc9152764528f7725a.tar.gz
[v4] More python functional tests
-rw-r--r--gitlab/v4/objects.py24
-rw-r--r--tools/python_test_v4.py119
2 files changed, 127 insertions, 16 deletions
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index d4e9e63..3b1eb91 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -209,13 +209,13 @@ class UserManager(CRUDMixin, RESTManager):
_obj_cls = User
_list_filters = ('active', 'blocked', 'username', 'extern_uid', 'provider',
- 'external')
+ 'external', 'search')
_create_attrs = (
- ('email', 'username', 'name'),
- ('password', 'reset_password', 'skype', 'linkedin', 'twitter',
- 'projects_limit', 'extern_uid', 'provider', 'bio', 'admin',
- 'can_create_group', 'website_url', 'skip_confirmation', 'external',
- 'organization', 'location')
+ tuple(),
+ ('email', 'username', 'name', 'password', 'reset_password', 'skype',
+ 'linkedin', 'twitter', 'projects_limit', 'extern_uid', 'provider',
+ 'bio', 'admin', 'can_create_group', 'website_url',
+ 'skip_confirmation', 'external', 'organization', 'location')
)
_update_attrs = (
('email', 'username', 'name'),
@@ -730,13 +730,14 @@ class ProjectCommitStatus(RESTObject):
pass
-class ProjectCommitStatusManager(RetrieveMixin, CreateMixin, RESTManager):
+class ProjectCommitStatusManager(GetFromListMixin, CreateMixin, RESTManager):
_path = ('/projects/%(project_id)s/repository/commits/%(commit_id)s'
'/statuses')
_obj_cls = ProjectCommitStatus
_from_parent_attrs = {'project_id': 'project_id', 'commit_id': 'id'}
- _create_attrs = (('state', ),
- ('description', 'name', 'context', 'ref', 'target_url'))
+ _create_attrs = (('state', 'sha'),
+ ('description', 'name', 'context', 'ref', 'target_url',
+ 'coverage'))
def create(self, data, **kwargs):
"""Create a new object.
@@ -761,7 +762,7 @@ class ProjectCommitStatusManager(RetrieveMixin, CreateMixin, RESTManager):
class ProjectCommitComment(RESTObject):
- pass
+ _id_attr = None
class ProjectCommitCommentManager(ListMixin, CreateMixin, RESTManager):
@@ -864,10 +865,11 @@ class ProjectKeyManager(NoUpdateMixin, RESTManager):
class ProjectEvent(RESTObject):
+ _id_attr = None
_short_print_attr = 'target_title'
-class ProjectEventManager(GetFromListMixin, RESTManager):
+class ProjectEventManager(ListMixin, RESTManager):
_path = '/projects/%(project_id)s/events'
_obj_cls = ProjectEvent
_from_parent_attrs = {'project_id': 'id'}
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index cba4833..8cc0886 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -31,6 +31,22 @@ assert(token_from_auth == gl.private_token)
gl.auth()
assert(isinstance(gl.user, gitlab.v4.objects.CurrentUser))
+# sidekiq
+out = gl.sidekiq.queue_metrics()
+assert(isinstance(out, dict))
+assert('pages' in out['queues'])
+out = gl.sidekiq.process_metrics()
+assert(isinstance(out, dict))
+assert('hostname' in out['processes'][0])
+out = gl.sidekiq.job_stats()
+assert(isinstance(out, dict))
+assert('processed' in out['jobs'])
+out = gl.sidekiq.compound_metrics()
+assert(isinstance(out, dict))
+assert('jobs' in out)
+assert('processes' in out)
+assert('queues' in out)
+
# settings
settings = gl.settings.get()
settings.default_projects_limit = 42
@@ -38,7 +54,7 @@ settings.save()
settings = gl.settings.get()
assert(settings.default_projects_limit == 42)
-# user manipulations
+# users
new_user = gl.users.create({'email': 'foo@bar.com', 'username': 'foo',
'name': 'foo', 'password': 'foo_password'})
users_list = gl.users.list()
@@ -61,6 +77,8 @@ expected = sorted([new_user, foobar_user], cmp=usercmp)
actual = sorted(list(gl.users.list(search='foo')), cmp=usercmp)
assert len(expected) == len(actual)
assert len(gl.users.list(search='asdf')) == 0
+foobar_user.bio = 'This is the user bio'
+foobar_user.save()
# SSH keys
key = new_user.keys.create({'title': 'testkey', 'key': SSH_KEY})
@@ -78,12 +96,36 @@ new_user.delete()
foobar_user.delete()
assert(len(gl.users.list()) == 3)
+# current user mail
+mail = gl.user.emails.create({'email': 'current@user.com'})
+assert(len(gl.user.emails.list()) == 1)
+mail.delete()
+assert(len(gl.user.emails.list()) == 0)
+
# current user key
key = gl.user.keys.create({'title': 'testkey', 'key': SSH_KEY})
assert(len(gl.user.keys.list()) == 1)
key.delete()
assert(len(gl.user.keys.list()) == 0)
+# templates
+assert(gl.dockerfiles.list())
+dockerfile = gl.dockerfiles.get('Node')
+assert(dockerfile.content is not None)
+
+assert(gl.gitignores.list())
+gitignore = gl.gitignores.get('Node')
+assert(gitignore.content is not None)
+
+assert(gl.gitlabciymls.list())
+gitlabciyml = gl.gitlabciymls.get('Nodejs')
+assert(gitlabciyml.content is not None)
+
+assert(gl.licenses.list())
+license = gl.licenses.get('bsd-2-clause', project='mytestproject',
+ fullname='mytestfullname')
+assert('mytestfullname' in license.content)
+
# groups
user1 = gl.users.create({'email': 'user1@test.com', 'username': 'user1',
'name': 'user1', 'password': 'user1_pass'})
@@ -121,6 +163,13 @@ assert(member.access_level == gitlab.Group.OWNER_ACCESS)
group2.members.delete(gl.user.id)
+# group notification settings
+settings = group2.notificationsettings.get()
+settings.level = 'disabled'
+settings.save()
+settings = group2.notificationsettings.get()
+assert(settings.level == 'disabled')
+
# hooks
hook = gl.hooks.create({'url': 'http://whatever.com'})
assert(len(gl.hooks.list()) == 1)
@@ -175,9 +224,20 @@ data = {
]
}
admin_project.commits.create(data)
+assert('---' in admin_project.commits.list()[0].diff()[0]['diff'])
+# commit status
+commit = admin_project.commits.list()[0]
+status = commit.statuses.create({'state': 'success', 'sha': commit.id})
+assert(len(commit.statuses.list()) == 1)
+
+# commit comment
+commit.comments.create({'note': 'This is a commit comment'})
+assert(len(commit.comments.list()) == 1)
+
+# repository
tree = admin_project.repository_tree()
-assert(len(tree) == 2)
+assert(len(tree) != 0)
assert(tree[0]['name'] == 'README.rst')
blob_id = tree[0]['id']
blob = admin_project.repository_raw_blob(blob_id)
@@ -186,6 +246,36 @@ archive1 = admin_project.repository_archive()
archive2 = admin_project.repository_archive('master')
assert(archive1 == archive2)
+# environments
+admin_project.environments.create({'name': 'env1', 'external_url':
+ 'http://fake.env/whatever'})
+envs = admin_project.environments.list()
+assert(len(envs) == 1)
+env = admin_project.environments.get(envs[0].id)
+env.external_url = 'http://new.env/whatever'
+env.save()
+env = admin_project.environments.get(envs[0].id)
+assert(env.external_url == 'http://new.env/whatever')
+env.delete()
+assert(len(admin_project.environments.list()) == 0)
+
+# events
+admin_project.events.list()
+
+# forks
+fork = admin_project.forks.create({'namespace': user1.username})
+p = gl.projects.get(fork.id)
+assert(p.forked_from_project['id'] == admin_project.id)
+
+# project hooks
+hook = admin_project.hooks.create({'url': 'http://hook.url'})
+assert(len(admin_project.hooks.list()) == 1)
+hook.note_events = True
+hook.save()
+hook = admin_project.hooks.get(hook.id)
+assert(hook.note_events is True)
+hook.delete()
+
# deploy keys
deploy_key = admin_project.keys.create({'title': 'foo@bar', 'key': DEPLOY_KEY})
project_keys = list(admin_project.keys.list())
@@ -231,6 +321,10 @@ assert(len(admin_project.issues.list(state='closed')) == 1)
assert(len(admin_project.issues.list(state='opened')) == 2)
assert(len(admin_project.issues.list(milestone='milestone1')) == 1)
assert(m1.issues().next().title == 'my issue 1')
+note = issue1.notes.create({'body': 'This is an issue note'})
+assert(len(issue1.notes.list()) == 1)
+note.delete()
+assert(len(issue1.notes.list()) == 0)
# tags
tag1 = admin_project.tags.create({'tag_name': 'v1.0', 'ref': 'master'})
@@ -240,6 +334,22 @@ tag1.set_release_description('Description 2')
assert(tag1.release['description'] == 'Description 2')
tag1.delete()
+# project snippet
+admin_project.snippets_enabled = True
+admin_project.save()
+snippet = admin_project.snippets.create(
+ {'title': 'snip1', 'file_name': 'foo.py', 'code': 'initial content',
+ 'visibility': gitlab.v4.objects.VISIBILITY_PRIVATE}
+)
+snippet.file_name = 'bar.py'
+snippet.save()
+snippet = admin_project.snippets.get(snippet.id)
+assert(snippet.content() == 'initial content')
+assert(snippet.file_name == 'bar.py')
+size = len(admin_project.snippets.list())
+snippet.delete()
+assert(len(admin_project.snippets.list()) == (size - 1))
+
# triggers
tr1 = admin_project.triggers.create({'description': 'trigger1'})
assert(len(admin_project.triggers.list()) == 1)
@@ -330,12 +440,11 @@ snippets = gl.snippets.list(all=True)
assert(len(snippets) == 0)
snippet = gl.snippets.create({'title': 'snippet1', 'file_name': 'snippet1.py',
'content': 'import gitlab'})
-snippet = gl.snippets.get(1)
+snippet = gl.snippets.get(snippet.id)
snippet.title = 'updated_title'
snippet.save()
-snippet = gl.snippets.get(1)
+snippet = gl.snippets.get(snippet.id)
assert(snippet.title == 'updated_title')
content = snippet.content()
assert(content == 'import gitlab')
snippet.delete()
-assert(len(gl.snippets.list()) == 0)