import os import subprocess from _pytest.monkeypatch import MonkeyPatch from redash.query_runner.script import query_to_script_path, run_script from tests import BaseTestCase class TestQueryToScript(BaseTestCase): monkeypatch = MonkeyPatch() def test_unspecified(self): self.assertEqual( "/foo/bar/baz.sh", query_to_script_path("*", "/foo/bar/baz.sh") ) def test_specified(self): self.assertRaises(IOError, lambda: query_to_script_path("/foo/bar", "baz.sh")) self.monkeypatch.setattr(os.path, "exists", lambda x: True) self.assertEqual( ["/foo/bar/baz.sh"], query_to_script_path("/foo/bar", "baz.sh") ) class TestRunScript(BaseTestCase): monkeypatch = MonkeyPatch() def test_success(self): self.monkeypatch.setattr( subprocess, "check_output", lambda script, shell: "test" ) self.assertEqual(("test", None), run_script("/foo/bar/baz.sh", True)) def test_failure(self): self.monkeypatch.setattr(subprocess, "check_output", lambda script, shell: None) self.assertEqual( (None, "Error reading output"), run_script("/foo/bar/baz.sh", True) ) self.monkeypatch.setattr(subprocess, "check_output", lambda script, shell: "") self.assertEqual( (None, "Empty output from script"), run_script("/foo/bar/baz.sh", True) ) self.monkeypatch.setattr(subprocess, "check_output", lambda script, shell: " ") self.assertEqual( (None, "Empty output from script"), run_script("/foo/bar/baz.sh", True) )