# -*- coding: utf-8 -*-
#
# Copyright (c) The PyAMF Project.
# See LICENSE.txt for details.

"""
Tests for AMF Remoting AMF0 style.

@since: 0.6
"""

import unittest

from pyamf import remoting
from pyamf.remoting import amf0


class MockGateway(object):
    """
    """

    debug = True


class BaseTestCase(unittest.TestCase):
    """
    Provides a L{processor} attribute.
    """

    def setUp(self):
        unittest.TestCase.setUp(self)

        self.gateway = MockGateway()
        self.processor = amf0.RequestProcessor(self.gateway)


class ExceptionTestCase(BaseTestCase):
    """
    Tests exception handling
    """

    def generate_exception(self):
        try:
            raise NameError('foobar')
        except NameError:
            import sys

            return sys.exc_info()

    def test_debug(self):
        self.assertTrue(self.gateway.debug)

        response = self.processor.buildErrorResponse(
            None, error=self.generate_exception()
        )

        self.assertEqual(response.status, remoting.STATUS_ERROR)

        error = response.body

        self.assertEqual(error.level, 'error')
        self.assertEqual(error.code, 'NameError')
        self.assertEqual(error.description, 'foobar')
        self.assertTrue(isinstance(error.details, list))

    def test_no_debug(self):
        self.gateway.debug = False

        response = self.processor.buildErrorResponse(
            None, error=self.generate_exception()
        )

        self.assertEqual(response.status, remoting.STATUS_ERROR)

        error = response.body

        self.assertEqual(error.level, 'error')
        self.assertEqual(error.code, 'NameError')
        self.assertEqual(error.description, 'foobar')
        self.assertEqual(error.details, None)
