mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +03:00 
			
		
		
		
	split renderer and parser complex data test case
This commit is contained in:
		
							parent
							
								
									1bec6f2d5e
								
							
						
					
					
						commit
						21776c0de2
					
				| 
						 | 
				
			
			@ -156,10 +156,9 @@ class TestFormParser(TestCase):
 | 
			
		|||
 | 
			
		||||
        self.assertEqual(Form(data).is_valid(), True)
 | 
			
		||||
 | 
			
		||||
		
 | 
			
		||||
class TestXMLParser(TestCase):
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.input = StringIO(
 | 
			
		||||
        self._input = StringIO(
 | 
			
		||||
            '<?xml version="1.0" encoding="utf-8"?>'
 | 
			
		||||
            '<root>'
 | 
			
		||||
            '<field_a>121.0</field_a>'
 | 
			
		||||
| 
						 | 
				
			
			@ -168,15 +167,45 @@ class TestXMLParser(TestCase):
 | 
			
		|||
            '<field_d>2011-12-25 12:45:00</field_d>'
 | 
			
		||||
            '</root>'
 | 
			
		||||
        )	
 | 
			
		||||
        self.data = {	
 | 
			
		||||
        self._data = {	
 | 
			
		||||
            'field_a': 121,
 | 
			
		||||
            'field_b': 'dasd',	
 | 
			
		||||
            'field_c': None,
 | 
			
		||||
            'field_d': datetime.datetime(2011, 12, 25, 12, 45, 00)
 | 
			
		||||
			
 | 
			
		||||
        }
 | 
			
		||||
        self._complex_data_input = StringIO(
 | 
			
		||||
            '<?xml version="1.0" encoding="utf-8"?>'
 | 
			
		||||
            '<root>'
 | 
			
		||||
            '<creation_date>2011-12-25 12:45:00</creation_date>'
 | 
			
		||||
            '<sub_data_list>'
 | 
			
		||||
            '<list-item><sub_id>1</sub_id><sub_name>first</sub_name></list-item>'
 | 
			
		||||
            '<list-item><sub_id>2</sub_id><sub_name>second</sub_name></list-item>'
 | 
			
		||||
            '</sub_data_list>'
 | 
			
		||||
            '<name>name</name>'
 | 
			
		||||
            '</root>'
 | 
			
		||||
        )    
 | 
			
		||||
        self._complex_data = {
 | 
			
		||||
            "creation_date": datetime.datetime(2011, 12, 25, 12, 45, 00), 
 | 
			
		||||
            "name": "name", 
 | 
			
		||||
            "sub_data_list": [
 | 
			
		||||
                {
 | 
			
		||||
                    "sub_id": 1, 
 | 
			
		||||
                    "sub_name": "first"
 | 
			
		||||
                }, 
 | 
			
		||||
                {
 | 
			
		||||
                    "sub_id": 2, 
 | 
			
		||||
                    "sub_name": "second"
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        }                               
 | 
			
		||||
 | 
			
		||||
    def test_parse(self):
 | 
			
		||||
        parser = XMLParser(None)
 | 
			
		||||
        (data, files) = parser.parse(self.input)
 | 
			
		||||
        self.assertEqual(data, self.data)
 | 
			
		||||
        (data, files) = parser.parse(self._input)
 | 
			
		||||
        self.assertEqual(data, self._data)
 | 
			
		||||
 | 
			
		||||
    def test_complex_data_parse(self):
 | 
			
		||||
        parser = XMLParser(None)
 | 
			
		||||
        (data, files) = parser.parse(self._complex_data_input)
 | 
			
		||||
        self.assertEqual(data, self._complex_data)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -283,72 +283,6 @@ if YAMLRenderer:
 | 
			
		|||
            self.assertEquals(obj, data)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class XMLRendererTestCase(TestCase):
 | 
			
		||||
    """
 | 
			
		||||
    Tests specific to the XML Renderer
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def test_render_string(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)
 | 
			
		||||
        content = renderer.render({'field': 'astring'}, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<field>astring</field>')
 | 
			
		||||
 | 
			
		||||
    def test_render_integer(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)
 | 
			
		||||
        content = renderer.render({'field': 111}, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<field>111</field>')
 | 
			
		||||
 | 
			
		||||
    def test_render_datetime(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)
 | 
			
		||||
        content = renderer.render({
 | 
			
		||||
            'field': datetime.datetime(2011, 12, 25, 12, 45, 00)
 | 
			
		||||
        }, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<field>2011-12-25 12:45:00</field>')
 | 
			
		||||
 | 
			
		||||
    def test_render_float(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)
 | 
			
		||||
        content = renderer.render({'field': 123.4}, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<field>123.4</field>')
 | 
			
		||||
 | 
			
		||||
    def test_render_decimal(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)
 | 
			
		||||
        content = renderer.render({'field': Decimal('111.2')}, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<field>111.2</field>')
 | 
			
		||||
 | 
			
		||||
    def test_render_none(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)
 | 
			
		||||
        content = renderer.render({'field': None}, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<field></field>')
 | 
			
		||||
 | 
			
		||||
    def assertXMLContains(self, xml, string):
 | 
			
		||||
        self.assertTrue(xml.startswith('<?xml version="1.0" encoding="utf-8"?>\n<root>'))
 | 
			
		||||
        self.assertTrue(xml.endswith('</root>'))
 | 
			
		||||
        self.assertTrue(string in xml, '%r not in %r' % (string, xml))
 | 
			
		||||
 | 
			
		||||
class HTMLView(View):
 | 
			
		||||
    renderers = (DocumentingHTMLRenderer)
 | 
			
		||||
 | 
			
		||||
    def get(self, request, **kwargs):
 | 
			
		||||
        return 'text' 
 | 
			
		||||
 | 
			
		||||
urlpatterns += patterns('',
 | 
			
		||||
    url(r'^/html$', HTMLView.as_view()),
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -429,6 +363,21 @@ class XMLRendererTestCase(TestCase):
 | 
			
		|||
    Tests specific to the XML Renderer
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    _complex_data = {
 | 
			
		||||
        "creation_date": datetime.datetime(2011, 12, 25, 12, 45, 00), 
 | 
			
		||||
        "name": "name", 
 | 
			
		||||
        "sub_data_list": [
 | 
			
		||||
            {
 | 
			
		||||
                "sub_id": 1, 
 | 
			
		||||
                "sub_name": "first"
 | 
			
		||||
            }, 
 | 
			
		||||
            {
 | 
			
		||||
                "sub_id": 2, 
 | 
			
		||||
                "sub_name": "second"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    def test_render_string(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
| 
						 | 
				
			
			@ -479,56 +428,28 @@ class XMLRendererTestCase(TestCase):
 | 
			
		|||
        content = renderer.render({'field': None}, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<field></field>')
 | 
			
		||||
        
 | 
			
		||||
    def test_render_complex_data(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)            
 | 
			
		||||
        content = renderer.render(self._complex_data, 'application/xml')
 | 
			
		||||
        self.assertXMLContains(content, '<sub_name>first</sub_name>')
 | 
			
		||||
        self.assertXMLContains(content, '<sub_name>second</sub_name>')
 | 
			
		||||
 | 
			
		||||
    def test_render_and_parse_complex_data(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test XML rendering.
 | 
			
		||||
        """
 | 
			
		||||
        renderer = XMLRenderer(None)            
 | 
			
		||||
        complex_data_in = {
 | 
			
		||||
            "creation_date": datetime.datetime(2011, 12, 25, 12, 45, 00), 
 | 
			
		||||
            "name": "name", 
 | 
			
		||||
            "sub_data_list": [
 | 
			
		||||
                {
 | 
			
		||||
                    "sub_id": 1, 
 | 
			
		||||
                    "sub_name": "first"
 | 
			
		||||
                }, 
 | 
			
		||||
                {
 | 
			
		||||
                    "sub_id": 2, 
 | 
			
		||||
                    "sub_name": "second"
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
            
 | 
			
		||||
        content = StringIO(renderer.render(complex_data_in, 'application/xml'))
 | 
			
		||||
        content = StringIO(renderer.render(self._complex_data, 'application/xml'))
 | 
			
		||||
        
 | 
			
		||||
        parser = XMLParser(None)
 | 
			
		||||
        complex_data_out, dummy = parser.parse(content)
 | 
			
		||||
        error_msg = "complex data differs!IN:\n %s \n\n OUT:\n %s" % (repr(complex_data_in), repr(complex_data_out))
 | 
			
		||||
        self.assertDictEqual(complex_data_in, complex_data_out, error_msg)
 | 
			
		||||
        error_msg = "complex data differs!IN:\n %s \n\n OUT:\n %s" % (repr(self._complex_data), repr(complex_data_out))
 | 
			
		||||
        self.assertDictEqual(self._complex_data, complex_data_out, error_msg)
 | 
			
		||||
 | 
			
		||||
    def assertXMLContains(self, xml, string):
 | 
			
		||||
        self.assertTrue(xml.startswith('<?xml version="1.0" encoding="utf-8"?>\n<root>'))
 | 
			
		||||
        self.assertTrue(xml.endswith('</root>'))
 | 
			
		||||
        self.assertTrue(string in xml, '%r not in %r' % (string, xml))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Issue122Tests(TestCase):
 | 
			
		||||
    """
 | 
			
		||||
    Tests that covers #122.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    urls = 'djangorestframework.tests.renderers'
 | 
			
		||||
 | 
			
		||||
    def test_only_html_renderer(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test if no recursion occurs.
 | 
			
		||||
        """
 | 
			
		||||
        resp = self.client.get('/html')
 | 
			
		||||
 | 
			
		||||
    def test_html_renderer_is_first(self):
 | 
			
		||||
        """
 | 
			
		||||
        Test if no recursion occurs.
 | 
			
		||||
        """
 | 
			
		||||
        resp = self.client.get('/html1')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user