Steve Piercy
2016-12-06 4996dbe000774b8d6fe015dd5d29b9bd9bfc827d
add new test in attempt to catch status code and stderr
1 files modified
39 ■■■■■ changed files
pyramid/tests/test_scripts/test_pcreate.py 39 ●●●●● patch | view | raw | blame | history
pyramid/tests/test_scripts/test_pcreate.py
@@ -1,4 +1,30 @@
from contextlib import contextmanager
import unittest
@contextmanager
def patch_argparser(parser):
    result = {}
    old_exit = parser.exit
    old_error = parser.error
    try:
        def dummy_exit(status=0, message=None):
            result['status'] = status
            result['message'] = message
            raise ArgumentParserExit
        def dummy_error(message):
            result['message'] = message
        parser.exit = dummy_exit
        parser.error = dummy_error
        yield result
    finally:
        parser.exit = old_exit
        parser.error = old_error
class ArgumentParserExit(Exception):
    pass
class TestPCreateCommand(unittest.TestCase):
@@ -49,6 +75,19 @@
        self.assertTrue(out.count(
            'You must provide at least one scaffold name'))
    def test_test_no_project_name(self):
        cmd = self._makeOne('-s', 'dummy')
        with patch_argparser(cmd.parser) as result:
            try:
                cmd.run()
            except ArgumentParserExit:
                self.assertEqual(result['status'], 2)
                self.assertTrue(result['message'].startswith(
                    'usage: pcreate [-h] [-s SCAFFOLD_NAME] [-t SCAFFOLD_NAME] [-l]'
                ))
            else:  # pragma: no cover
                raise AssertionError
    def test_no_project_name(self):
        cmd = self._makeOne('-s', 'dummy')
        result = cmd.run()