summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2015-07-11 08:56:17 +0200
committerGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2015-07-11 08:57:44 +0200
commit802c144cfd199684506b3404f03c3657c75e307d (patch)
tree1ab2f010b98c368288867ecc9a7bd1d5a5fccf47
parente57b7794d1e1ae6795f5b914132a2891dc0d9509 (diff)
downloadgitlab-802c144cfd199684506b3404f03c3657c75e307d.tar.gz
Fix the update/delete CLI subcommands
Also update the testing tool to test these features. Closes #62
-rw-r--r--gitlab/__init__.py7
-rw-r--r--gitlab/cli.py19
-rwxr-xr-xtools/functional_tests.sh10
3 files changed, 31 insertions, 5 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 93e8b82..52fc7db 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -643,6 +643,11 @@ class GitlabObject(object):
requiredCreateAttrs = []
#: Attributes that are optional when creating a new object
optionalCreateAttrs = []
+ #: Attributes that are required when updating an object
+ requiredUpdateAttrs = None
+ #: Attributes that are optional when updating an object
+ optionalUpdateAttrs = None
+
idAttr = 'id'
shortPrintAttr = None
@@ -1086,6 +1091,7 @@ class ProjectLabel(GitlabObject):
idAttr = 'name'
requiredDeleteAttrs = ['name']
requiredCreateAttrs = ['name', 'color']
+ requiredUpdateAttrs = []
# FIXME: new_name is only valid with update
optionalCreateAttrs = ['new_name']
@@ -1157,6 +1163,7 @@ class Project(GitlabObject):
_url = '/projects'
_constructorTypes = {'owner': 'User', 'namespace': 'Group'}
requiredCreateAttrs = ['name']
+ requiredUpdateAttrs = []
optionalCreateAttrs = ['default_branch', 'issues_enabled', 'wall_enabled',
'merge_requests_enabled', 'wiki_enabled',
'snippets_enabled', 'public', 'visibility_level',
diff --git a/gitlab/cli.py b/gitlab/cli.py
index 9c07e82..d678439 100644
--- a/gitlab/cli.py
+++ b/gitlab/cli.py
@@ -103,12 +103,23 @@ def populate_sub_parser_by_class(cls, sub_parser):
for x in cls.optionalCreateAttrs]
elif action_name == UPDATE:
+ id_attr = cls.idAttr.replace('_', '-')
+ sub_parser_action.add_argument("--%s" % id_attr,
+ required=True)
+
+ attrs = (cls.requiredUpdateAttrs
+ if cls.requiredUpdateAttrs is not None
+ else cls.requiredCreateAttrs)
[sub_parser_action.add_argument("--%s" % x.replace('_', '-'),
required=True)
- for x in cls.requiredCreateAttrs]
+ for x in attrs]
+
+ attrs = (cls.optionalUpdateAttrs
+ if cls.optionalUpdateAttrs is not None
+ else cls.optionalCreateAttrs)
[sub_parser_action.add_argument("--%s" % x.replace('_', '-'),
required=False)
- for x in cls.optionalCreateAttrs]
+ for x in attrs]
if cls in extra_actions:
for action_name in sorted(extra_actions[cls]):
@@ -182,7 +193,7 @@ def do_delete(cls, gl, what, args):
if not cls.canDelete:
die("%s objects can't be deleted" % what)
- o = do_get(cls, args, what, args)
+ o = do_get(cls, gl, what, args)
try:
o.delete()
except Exception as e:
@@ -193,7 +204,7 @@ def do_update(cls, gl, what, args):
if not cls.canUpdate:
die("%s objects can't be updated" % what)
- o = do_get(cls, args, what, args)
+ o = do_get(cls, gl, what, args)
try:
for k, v in args.items():
o.__dict__[k] = v
diff --git a/tools/functional_tests.sh b/tools/functional_tests.sh
index 24124ce..dd31c90 100755
--- a/tools/functional_tests.sh
+++ b/tools/functional_tests.sh
@@ -23,7 +23,7 @@ cleanup() {
}
trap cleanup EXIT
-docker run --name gitlab-test --detach --publish 8080:80 --publish 2222:22 sytse/gitlab-ce:7.10.1 >/dev/null 2>&1
+docker run --name gitlab-test --detach --publish 8080:80 --publish 2222:22 genezys/gitlab:latest >/dev/null 2>&1
LOGIN='root'
PASSWORD='5iveL!fe'
@@ -80,6 +80,14 @@ PROJECT_ID=$($GITLAB project create --name test-project1 | grep ^id: | cut -d' '
$GITLAB project list | grep -q test-project1
$OK
+echo -n "Testing project update... "
+$GITLAB project update --id $PROJECT_ID --description "My New Description"
+$OK
+
+echo -n "Testing project deletion... "
+$GITLAB project delete --id $PROJECT_ID
+$OK
+
echo -n "Testing user creation... "
USER_ID=$($GITLAB user create --email fake@email.com --username user1 --name "User One" --password fakepassword | grep ^id: | cut -d' ' -f2)
$OK