"""Test for the CLI """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import os import sys from scripttest import TestFileEnvironment from nose.tools import assert_equals TEST_DIR = os.path.abspath('test/test-cli-output') DEVFILE_NAME = 'testfile' DEVFILE = os.path.join(TEST_DIR, DEVFILE_NAME) CONFIGFILE = 'testconfig.yaml' CONFIG_YAML = ''' --- printer: type: file devfile: {testfile} '''.format( testfile=DEVFILE, ) class TestCLI: """ Contains setups, teardowns, and tests for CLI """ @classmethod def setup_class(cls): """ Create a config file to read from """ with open(CONFIGFILE, 'w') as config: config.write(CONFIG_YAML) @classmethod def teardown_class(cls): """ Remove config file """ os.remove(CONFIGFILE) def setup(self): """ Create a file to print to and set up env""" self.env = TestFileEnvironment( base_path=TEST_DIR, cwd=os.getcwd(), ) self.default_args = ( sys.executable, '-mescpos.cli', '-c', CONFIGFILE, ) fhandle = open(DEVFILE, 'a') try: os.utime(DEVFILE, None) finally: fhandle.close() def teardown(self): """ Destroy printer file and env """ os.remove(DEVFILE) self.env.clear() def test_cli_help(self): """ Test getting help from cli """ result = self.env.run(sys.executable, '-mescpos.cli', '-h') assert not result.stderr assert 'usage' in result.stdout def test_cli_text(self): """ Make sure text returns what we sent it """ test_text = 'this is some text' result = self.env.run( *(self.default_args + ( 'text', '--txt', test_text, )) ) assert not result.stderr assert DEVFILE_NAME in result.files_updated.keys() assert_equals( result.files_updated[DEVFILE_NAME].bytes, test_text + '\n' ) def test_cli_text_inavlid_args(self): """ Test a failure to send valid arguments """ result = self.env.run( *(self.default_args + ( 'text', '--invalid-param', 'some data' )), expect_error=True, expect_stderr=True ) assert_equals(result.returncode, 2) assert 'error:' in result.stderr assert not result.files_updated