# -*- coding: utf-8 -*- # Import Python libs from __future__ import absolute_import, print_function, unicode_literals # Import Salt Testing libs from tests.support.mixins import LoaderModuleMockMixin from tests.support.unit import TestCase from tests.support.mock import MagicMock, patch, call # Import salt libs import salt.modules.rvm as rvm class TestRvmModule(TestCase, LoaderModuleMockMixin): def setup_loader_modules(self): return { rvm: { '__salt__': { 'cmd.has_exec': MagicMock(return_value=True), 'config.option': MagicMock(return_value=None) } } } def test_rvm(self): mock = MagicMock(return_value={'retcode': 0, 'stdout': ''}) with patch.dict(rvm.__salt__, {'cmd.run_all': mock}): rvm._rvm(['install', '1.9.3']) mock.assert_called_once_with( ['/usr/local/rvm/bin/rvm', 'install', '1.9.3'], runas=None, cwd=None, python_shell=False, env=None ) def test_rvm_do(self): mock = MagicMock(return_value={'retcode': 0, 'stdout': 'stdout'}) with patch.dict(rvm.__salt__, {'cmd.run_all': mock}): rvm._rvm_do('1.9.3', ['gemset', 'list']) mock.assert_called_once_with( ['/usr/local/rvm/bin/rvm', '1.9.3', 'do', 'gemset', 'list'], runas=None, cwd=None, python_shell=False, env=None ) def test_install(self): mock = MagicMock(return_value={'retcode': 0}) with patch.dict(rvm.__salt__, {'cmd.run_all': mock}): rvm.install() curl_cmd = 'curl -Ls https://raw.githubusercontent.com/rvm/rvm/master/binscripts/rvm-installer ' \ '| bash -s stable' mock.assert_called_once_with(curl_cmd, runas=None, python_shell=True) def test_install_ruby_nonroot(self): mock = MagicMock(return_value={'retcode': 0, 'stdout': 'stdout'}) expected = [ call( ['/usr/local/rvm/bin/rvm', 'autolibs', 'disable', '2.0.0'], runas='rvm', cwd=None, python_shell=False, env=None ), call( ['/usr/local/rvm/bin/rvm', 'install', '2.0.0', '--disable-binary'], runas='rvm', cwd=None, python_shell=False, env=None ) ] with patch.dict(rvm.__salt__, {'cmd.run_all': mock}): rvm.install_ruby('2.0.0', runas='rvm') self.assertEqual(mock.call_args_list, expected) def test_install_with_env(self): mock = MagicMock(return_value={'retcode': 0, 'stdout': 'stdout'}) expected = [ call( ['/usr/local/rvm/bin/rvm', 'install', '2.0.0'], runas=None, cwd=None, python_shell=False, env=[{'RUBY_CONFIGURE_OPTS': '--foobar'}] ) ] with patch.dict(rvm.__salt__, {'cmd.run_all': mock}): rvm.install_ruby('2.0.0', env=[{'RUBY_CONFIGURE_OPTS': '--foobar'}]) self.assertEqual(mock.call_args_list, expected) def test_install_with_opts(self): mock = MagicMock(return_value={'retcode': 0, 'stdout': 'stdout'}) expected = [ call( ['/usr/local/rvm/bin/rvm', 'install', '2.0.0', '-C --enable-shared,--with-readline-dir=$HOME/.rvm/usr', '--patch /path/to/awesome.patch'], runas=None, cwd=None, python_shell=False, env=None ) ] with patch.dict(rvm.__salt__, {'cmd.run_all': mock}): rvm.install_ruby('2.0.0', opts=[ '-C --enable-shared,--with-readline-dir=$HOME/.rvm/usr', '--patch /path/to/awesome.patch' ]) self.assertEqual(mock.call_args_list, expected) def test_list(self): list_output = ''' rvm rubies jruby-1.6.5.1 [ amd64 ] ree-1.8.7-2011.03 [ x86_64 ] ree-1.8.7-2011.12 [ x86_64 ] =* ree-1.8.7-2012.02 [ x86_64 ] ruby-1.9.2-p180 [ x86_64 ] ruby-1.9.3-p125 [ x86_64 ] ruby-head [ x86_64 ] # => - current # =* - current && default # * - default ''' with patch.object(rvm, '_rvm') as mock_method: mock_method.return_value = list_output self.assertEqual( [['jruby', '1.6.5.1', False], ['ree', '1.8.7-2011.03', False], ['ree', '1.8.7-2011.12', False], ['ree', '1.8.7-2012.02', True], ['ruby', '1.9.2-p180', False], ['ruby', '1.9.3-p125', False], ['ruby', 'head', False]], rvm.list_()) def test_gemset_list(self): output = ''' gemsets for ree-1.8.7-2012.02 (found in /usr/local/rvm/gems/ree-1.8.7-2012.02) global bar foo ''' with patch.object(rvm, '_rvm_do') as mock_method: mock_method.return_value = output self.assertEqual( ['global', 'bar', 'foo'], rvm.gemset_list()) def test_gemset_list_all(self): output = ''' gemsets for ruby-1.9.3-p125 (found in /usr/local/rvm/gems/ruby-1.9.3-p125) 9bar 9foo global gemsets for ruby-head (found in /usr/local/rvm/gems/ruby-head) global headbar headfoo gemsets for jruby-1.6.5.1 (found in /usr/local/rvm/gems/jruby-1.6.5.1) global jbar jfoo gemsets for ruby-1.9.2-p180 (found in /usr/local/rvm/gems/ruby-1.9.2-p180) global ''' with patch.object(rvm, '_rvm_do') as mock_method: mock_method.return_value = output self.assertEqual( {'jruby-1.6.5.1': ['global', 'jbar', 'jfoo'], 'ruby-1.9.2-p180': ['global'], 'ruby-1.9.3-p125': ['9bar', '9foo', 'global'], 'ruby-head': ['global', 'headbar', 'headfoo']}, rvm.gemset_list_all())