from __future__ import unicode_literals from rest_framework.compat import StringIO from django import forms from django.test import TestCase from django.utils import unittest from rest_framework.compat import etree from rest_framework.parsers import FormParser from rest_framework.parsers import XMLParser import datetime class Form(forms.Form): field1 = forms.CharField(max_length=3) field2 = forms.CharField() class TestFormParser(TestCase): def setUp(self): self.string = "field1=abc&field2=defghijk" def test_parse(self): """ Make sure the `QueryDict` works OK """ parser = FormParser() stream = StringIO(self.string) data = parser.parse(stream) self.assertEqual(Form(data).is_valid(), True) class TestXMLParser(TestCase): def setUp(self): self._input = StringIO( '' '' '121.0' 'dasd' '' '2011-12-25 12:45:00' '' ) 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( '' '' '2011-12-25 12:45:00' '' '1first' '2second' '' 'name' '' ) 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" } ] } @unittest.skipUnless(etree, 'defusedxml not installed') def test_parse(self): parser = XMLParser() data = parser.parse(self._input) self.assertEqual(data, self._data) @unittest.skipUnless(etree, 'defusedxml not installed') def test_complex_data_parse(self): parser = XMLParser() data = parser.parse(self._complex_data_input) self.assertEqual(data, self._complex_data)