Esempio n. 1
0
class TestBase(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super(TestBase, self).__init__(*args, **kwargs)

        self.patcher_xvfb = patch('cabu.drivers.Xvfb', spec=True)
        self.patcher_xvfb.start()
        self.patcher_ftpretty = patch('cabu.core.ftpretty', spec=True)
        self.patcher_ftpretty.start()

    def __del__(self, *args, **kwargs):
        self.patcher_ftpretty.stop()
        self.patcher_xvfb.stop()

    def __exit__(self, *args, **kwargs):
        self.patcher_ftpretty.stop()
        self.patcher_xvfb.stop()
        super(TestBase, self).__exit__(*args, **kwargs)

    @patch('cabu.drivers.load_phantomjs', return_value=MagicMock())
    def setUp(self, mock_driver):
        if 'CABU_SETTINGS' in os.environ:
            del os.environ['CABU_SETTINGS']
        os.environ['CABU_SETTINGS'] = 'cabu.tests.test_settings'
        self.app = Cabu(__name__)
        self.config = self.app.config
        self.vdisplay = self.app.vdisplay
        self.client = self.app.test_client()

    def tearDown(self):
        if hasattr(self, 'ftp'):
            self.ftp.close()
        if 'CABU_SETTINGS' in os.environ:
            del os.environ['CABU_SETTINGS']
        if hasattr(self, 'app'):
            del self.app

    def get(self, resource, item=None, query='', headers=[]):
        url = self.resolve_resource(resource, item)
        res = self.client.get(url + query, headers=headers)
        return self.parse_response(res)

    def post(self, resource, data, item=None, headers=[], content_type=None):
        if not content_type:
            content_type = 'application/json'
        headers.append(('Content-Type', content_type))
        url = self.resolve_resource(resource, item)
        res = self.client.post(url, data=json.dumps(data), headers=headers)
        return self.parse_response(res)

    def put(self, resource, data, item=None, headers=[]):
        headers.append(('Content-Type', 'application/json'))
        url = self.resolve_resource(resource, item)
        res = self.client.put(url, data=json.dumps(data), headers=headers)
        return self.parse_response(res)

    def patch(self, resource, data, item=None, headers=[]):
        headers.append(('Content-Type', 'application/json'))
        url = self.resolve_resource(resource, item)
        res = self.client.patch(url, data=json.dumps(data), headers=headers)
        return self.parse_response(res)

    def delete(self, resource, item=None, headers=None):
        url = self.resolve_resource(resource, item)
        res = self.client.delete(url, headers=headers)
        return self.parse_response(res)

    def parse_response(self, res):
        val = None
        if res.get_data():
            val = res.get_data().decode("utf-8")
            try:
                val = json.loads(val)
            except ValueError:
                self.fail("'%s' is not valid JSON" % (val))

        return val, res.status_code