diff options
author | Gauvain Pocentek <gauvain@pocentek.net> | 2017-08-21 11:55:00 +0200 |
---|---|---|
committer | Gauvain Pocentek <gauvain@pocentek.net> | 2017-08-21 11:55:00 +0200 |
commit | 0e0d4aee3e73e2caf86c50bc9152764528f7725a (patch) | |
tree | f56d4c96aec4e17f7d4bb1dc3d1b1f662ea14701 | |
parent | 311464b71c508503d5275db5975bc10ed74674bd (diff) | |
download | gitlab-0e0d4aee3e73e2caf86c50bc9152764528f7725a.tar.gz |
[v4] More python functional tests
-rw-r--r-- | gitlab/v4/objects.py | 24 | ||||
-rw-r--r-- | tools/python_test_v4.py | 119 |
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) |