from django.test import TestCase from django.core import serializers from markupfield.fields import MarkupField from markupfield.markup import Markup, RestructuredtextMarkup from markupfield.widgets import MarkupTextarea, AdminMarkupTextareaWidget from markupfield.tests.models import Post, Article, Concrete, CustomArticle from django.forms.models import modelform_factory ArticleForm = modelform_factory(Article) class MarkupFieldTestCase(TestCase): def setUp(self): self.mp = Post(title='example markdown post', body='**markdown**', body_markup_type='text/x-markdown') self.mp.save() self.rp = Post(title='example restructuredtext post', body='*ReST*', body_markup_type='ReST') self.rp.save() def test_verbose_name(self): self.assertEquals(self.mp._meta.get_field('body').verbose_name, 'body of post') def test_markup_body(self): self.assertEquals(self.mp.body.raw, '**markdown**') self.assertEquals(self.mp.body.rendered, '
markdown
') self.assertEquals(self.mp.body.markup_type, 'text/x-markdown') def test_markup_unicode(self): u = unicode(self.rp.body.rendered) self.assertEquals(u, u'ReST
\n') def test_from_database(self): " Test that data loads back from the database correctly and 'post' has the right type." p1 = Post.objects.get(pk=self.mp.pk) self.assert_(isinstance(p1.body, Markup)) self.assertEquals(unicode(p1.body), u'markdown
') ## Assignment ## def test_body_assignment(self): self.rp.body = '**ReST**' self.rp.save() self.assertEquals(unicode(self.rp.body), u'ReST
\n') def test_raw_assignment(self): self.rp.body.raw = '*ReST*' self.rp.save() self.assertEquals(unicode(self.rp.body), u'ReST
\n') def test_rendered_assignment(self): def f(): self.rp.body.rendered = 'this should fail' self.assertRaises(AttributeError, f) def test_body_type_assignment(self): self.rp.body.markup_type = 'text/x-markdown' self.rp.save() self.assertEquals(self.rp.body.markup_type, 'text/x-markdown') self.assertEquals(unicode(self.rp.body), u'ReST
') ## Serialization ## def test_serialize_to_json(self): stream = serializers.serialize('json', Post.objects.all()) self.assertEquals(stream, '[{"pk": 1, "model": "tests.post", "fields": {"body": "**markdown**", "_body_rendered": "markdown
", "body_markup_type": "text/x-markdown", "title": "example markdown post"}}, {"pk": 2, "model": "tests.post", "fields": {"body": "*ReST*", "_body_rendered": "ReST
\\n", "body_markup_type": "ReST", "title": "example restructuredtext post"}}]') def test_deserialize_json(self): stream = serializers.serialize('json', Post.objects.all()) obj = list(serializers.deserialize('json', stream))[0] self.assertEquals(obj.object, self.mp) ## Other ## def test_inheritance(self): # test that concrete correctly got the added fields concrete_fields = [f.name for f in Concrete._meta.fields] self.assertEquals(concrete_fields, ['id', 'content', 'content_markup_type', '_content_rendered']) def test_markup_type_validation(self): self.assertRaises(ValueError, MarkupField, 'verbose name', 'markup_field', 'bad_markup_type') def test_custom_markup_class(self): complex_rest = "Title of the article\n====================\n\nA paragraph with an *emphasized text*.\n\n" a = CustomArticle(text=complex_rest) a.save() self.assertEquals(type(a.text), RestructuredtextMarkup) self.assertEquals(a.text.rendered, u'A paragraph with an emphasized text.
\n