Test GalaxyCLI when no actions are provided

Adds a new test for GalaxyCLI. Tests cases when:

- no actions are provided
- invalid actions are provided
- each valid action is provided

When parser() runs successfully the method returns True, creates a
SortedOptParser instance, a Galaxy instance, and updates certain class data.
This commit is contained in:
s-hertel 2016-07-22 11:45:56 -04:00 committed by Ryan S. Brown
parent adea1f2b80
commit 93c5ec42cf

View file

@ -29,9 +29,12 @@ from nose.plugins.skip import SkipTest
from ansible.compat.six import PY3
from ansible.compat.tests import unittest
from mock import patch, call
import ansible
from ansible.errors import AnsibleError
from ansible.errors import AnsibleError, AnsibleOptionsError
from nose.plugins.skip import SkipTest
if PY3:
raise SkipTest('galaxy is not ported to be py3 compatible yet')
@ -159,3 +162,107 @@ class TestGalaxy(unittest.TestCase):
# testing that error expected is not raised with --ignore-errors flag in use
gc.run()
self.assertTrue(mocked_display.called_once_with("- downloading role 'fake_role_name', owned by "))
def run_parse_common(self, galaxycli_obj, action):
with patch.object(ansible.cli.SortedOptParser, "set_usage") as mocked_usage:
with patch('sys.argv', ["-c"]):
galaxy_parser = galaxycli_obj.parse()
# checking that the common results of parse() for all possible actions have been created/called
self.assertTrue(galaxy_parser)
self.assertTrue(isinstance(galaxycli_obj.parser, ansible.cli.SortedOptParser))
self.assertTrue(isinstance(galaxycli_obj.galaxy, ansible.galaxy.Galaxy))
if action in ['import', 'delete']:
formatted_call = 'usage: %prog ' + action + ' [options] github_user github_repo'
elif action == 'info':
formatted_call = 'usage: %prog ' + action + ' [options] role_name[,version]'
elif action == 'init':
formatted_call = 'usage: %prog ' + action + ' [options] role_name'
elif action == 'install':
formatted_call = 'usage: %prog ' + action + ' [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)]'
elif action == 'list':
formatted_call = 'usage: %prog ' + action + ' [role_name]'
elif action == 'login':
formatted_call = 'usage: %prog ' + action + ' [options]'
elif action == 'remove':
formatted_call = 'usage: %prog ' + action + ' role1 role2 ...'
elif action == 'search':
formatted_call = 'usage: %prog ' + action + ' [searchterm1 searchterm2] [--galaxy-tags galaxy_tag1,galaxy_tag2] [--platforms platform1,platform2] [--author username]'
elif action == 'setup':
formatted_call = 'usage: %prog ' + action + ' [options] source github_user github_repo secret'
calls = [call('usage: %prog [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...'), call(formatted_call)]
mocked_usage.assert_has_calls(calls)
def test_parse(self):
''' systematically testing that the expected options parser is created '''
# testing no action given
gc = GalaxyCLI(args=[])
with patch('sys.argv', ["-c"]):
self.assertRaises(AnsibleOptionsError, gc.parse)
# testing action that doesn't exist
gc = GalaxyCLI(args=["NOT_ACTION"])
with patch('sys.argv', ["-c"]):
self.assertRaises(AnsibleOptionsError, gc.parse)
# testing action 'delete'
gc = GalaxyCLI(args=["delete"])
self.run_parse_common(gc, "delete")
self.assertTrue(gc.options.verbosity==0)
# testing action 'import'
gc = GalaxyCLI(args=["import"])
self.run_parse_common(gc, "import")
self.assertTrue(gc.options.wait==True)
self.assertTrue(gc.options.reference==None)
self.assertTrue(gc.options.check_status==False)
self.assertTrue(gc.options.verbosity==0)
# testing action 'info'
gc = GalaxyCLI(args=["info"])
self.run_parse_common(gc, "info")
self.assertTrue(gc.options.offline==False)
# testing action 'init'
gc = GalaxyCLI(args=["init"])
self.run_parse_common(gc, "init")
self.assertTrue(gc.options.offline==False)
self.assertTrue(gc.options.force==False)
# testing action 'install'
gc = GalaxyCLI(args=["install"])
self.run_parse_common(gc, "install")
self.assertTrue(gc.options.ignore_errors==False)
self.assertTrue(gc.options.no_deps==False)
self.assertTrue(gc.options.role_file==None)
self.assertTrue(gc.options.force==False)
# testing action 'list'
gc = GalaxyCLI(args=["list"])
self.run_parse_common(gc, "list")
self.assertTrue(gc.options.verbosity==0)
# testing action 'login'
gc = GalaxyCLI(args=["login"])
self.run_parse_common(gc, "login")
self.assertTrue(gc.options.verbosity==0)
self.assertTrue(gc.options.token==None)
# testing action 'remove'
gc = GalaxyCLI(args=["remove"])
self.run_parse_common(gc, "remove")
self.assertTrue(gc.options.verbosity==0)
# testing action 'search'
gc = GalaxyCLI(args=["search"])
self.run_parse_common(gc, "search")
self.assertTrue(gc.options.platforms==None)
self.assertTrue(gc.options.tags==None)
self.assertTrue(gc.options.author==None)
# testing action 'setup'
gc = GalaxyCLI(args=["setup"])
self.run_parse_common(gc, "setup")
self.assertTrue(gc.options.verbosity==0)
self.assertTrue(gc.options.remove_id==None)
self.assertTrue(gc.options.setup_list==False)