Commit 705c8b91 by Ben Patterson

Udpates based on feedback.

parent 67be6807
...@@ -14,7 +14,7 @@ from path import Path as path ...@@ -14,7 +14,7 @@ from path import Path as path
from paver.easy import BuildFailure from paver.easy import BuildFailure
import pavelib.quality import pavelib.quality
from pavelib.paver_tests.utils import CustomShMock from pavelib.paver_tests.utils import fail_on_pylint, fail_on_eslint
@ddt @ddt
...@@ -298,7 +298,7 @@ class TestPaverRunQuality(unittest.TestCase): ...@@ -298,7 +298,7 @@ class TestPaverRunQuality(unittest.TestCase):
""" """
# Underlying sh call must fail when it is running the pylint diff-quality task # Underlying sh call must fail when it is running the pylint diff-quality task
self._mock_paver_sh.side_effect = CustomShMock().fail_on_pylint self._mock_paver_sh.side_effect = fail_on_pylint
_mock_pep8_violations = MagicMock(return_value=(0, [])) _mock_pep8_violations = MagicMock(return_value=(0, []))
with patch('pavelib.quality._get_pep8_violations', _mock_pep8_violations): with patch('pavelib.quality._get_pep8_violations', _mock_pep8_violations):
with self.assertRaises(SystemExit): with self.assertRaises(SystemExit):
...@@ -318,7 +318,7 @@ class TestPaverRunQuality(unittest.TestCase): ...@@ -318,7 +318,7 @@ class TestPaverRunQuality(unittest.TestCase):
""" """
# Underlying sh call must fail when it is running the eslint diff-quality task # Underlying sh call must fail when it is running the eslint diff-quality task
self._mock_paver_sh.side_effect = CustomShMock().fail_on_eslint self._mock_paver_sh.side_effect = fail_on_eslint
_mock_pep8_violations = MagicMock(return_value=(0, [])) _mock_pep8_violations = MagicMock(return_value=(0, []))
with patch('pavelib.quality._get_pep8_violations', _mock_pep8_violations): with patch('pavelib.quality._get_pep8_violations', _mock_pep8_violations):
with self.assertRaises(SystemExit): with self.assertRaises(SystemExit):
......
...@@ -7,8 +7,9 @@ import unittest ...@@ -7,8 +7,9 @@ import unittest
from mock import call, patch from mock import call, patch
from paver.easy import BuildFailure from paver.easy import BuildFailure
from pavelib.prereqs import no_prereq_install, node_prereqs_installation from pavelib.prereqs import no_prereq_install, node_prereqs_installation
from pavelib.paver_tests.utils import PaverTestCase, CustomShMock from pavelib.paver_tests.utils import (
from pavelib.paver_tests.test_paver_quality import CustomShMock PaverTestCase, unexpected_fail_on_npm_install, fail_on_npm_install
)
class TestPaverPrereqInstall(unittest.TestCase): class TestPaverPrereqInstall(unittest.TestCase):
...@@ -81,17 +82,21 @@ class TestPaverNodeInstall(PaverTestCase): ...@@ -81,17 +82,21 @@ class TestPaverNodeInstall(PaverTestCase):
def setUp(self): def setUp(self):
super(TestPaverNodeInstall, self).setUp() super(TestPaverNodeInstall, self).setUp()
# Ensure prereqs will be run
os.environ['NO_PREREQ_INSTALL'] = 'false' os.environ['NO_PREREQ_INSTALL'] = 'false'
patcher = patch('pavelib.prereqs.sh', return_value=True) patcher = patch('pavelib.prereqs.sh', return_value=True)
self._mock_paver_sh = patcher.start() self._mock_paver_sh = patcher.start()
self.addCleanup(patcher.stop) self.addCleanup(patcher.stop)
def test_npm_install_with_subprocess_error(self): def test_npm_install_with_subprocess_error(self):
""" """
Test that we handle a subprocess 1 (proxy for cb() never called error) An exit with subprocess exit 1 is what paver receives when there is
TE-1767 an npm install error ("cb() never called!"). Test that we can handle
this kind of failure. For more info see TE-1767.
""" """
self._mock_paver_sh.side_effect = CustomShMock().fail_on_npm_install self._mock_paver_sh.side_effect = fail_on_npm_install
with self.assertRaises(BuildFailure): with self.assertRaises(BuildFailure):
node_prereqs_installation() node_prereqs_installation()
actual_calls = self._mock_paver_sh.mock_calls actual_calls = self._mock_paver_sh.mock_calls
...@@ -113,7 +118,7 @@ class TestPaverNodeInstall(PaverTestCase): ...@@ -113,7 +118,7 @@ class TestPaverNodeInstall(PaverTestCase):
""" """
If there's some other error, only call npm install once, and raise a failure If there's some other error, only call npm install once, and raise a failure
""" """
self._mock_paver_sh.side_effect = CustomShMock().unexpected_fail_on_npm_install self._mock_paver_sh.side_effect = unexpected_fail_on_npm_install
with self.assertRaises(BuildFailure): with self.assertRaises(BuildFailure):
node_prereqs_installation() node_prereqs_installation()
actual_calls = self._mock_paver_sh.mock_calls actual_calls = self._mock_paver_sh.mock_calls
......
...@@ -63,50 +63,47 @@ class MockEnvironment(tasks.Environment): ...@@ -63,50 +63,47 @@ class MockEnvironment(tasks.Environment):
self.messages.append(unicode(output)) self.messages.append(unicode(output))
class CustomShMock(object): def fail_on_eslint(arg):
""" """
Diff-quality makes a number of sh calls. None of those calls should be made during tests; however, some For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what
of them need to have certain responses. is going to fail when we pass in a percentage ("p") requirement.
""" """
if "eslint" in arg:
# Essentially mock diff-quality exiting with 1
paver.easy.sh("exit 1")
else:
return
def fail_on_pylint(self, arg):
""" def fail_on_pylint(arg):
For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what """
is going to fail when we pass in a percentage ("p") requirement. For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what
""" is going to fail when we pass in a percentage ("p") requirement.
if "pylint" in arg: """
# Essentially mock diff-quality exiting with 1 if "pylint" in arg:
paver.easy.sh("exit 1") # Essentially mock diff-quality exiting with 1
else: paver.easy.sh("exit 1")
return else:
return
def fail_on_eslint(self, arg):
"""
For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what def fail_on_npm_install(arg):
is going to fail when we pass in a percentage ("p") requirement. """
""" For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what
if "eslint" in arg: is going to fail when we pass in a percentage ("p") requirement.
# Essentially mock diff-quality exiting with 1 """
paver.easy.sh("exit 1") if "npm install" in arg:
else: raise BuildFailure('Subprocess return code: 1')
return else:
return
def fail_on_npm_install(self, arg):
"""
For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what def unexpected_fail_on_npm_install(arg):
is going to fail when we pass in a percentage ("p") requirement. """
""" For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what
if "npm install" in arg: is going to fail when we pass in a percentage ("p") requirement.
raise BuildFailure('Subprocess return code: 1') """
else: if "npm install" in arg:
return raise BuildFailure('Subprocess return code: 50')
else:
def unexpected_fail_on_npm_install(self, arg): return
"""
For our tests, we need the call for diff-quality running pep8 reports to fail, since that is what
is going to fail when we pass in a percentage ("p") requirement.
"""
if "npm install" in arg:
raise BuildFailure('Subprocess return code: 50')
else:
return
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment