diff --git a/src/wagtail_factories/blocks.py b/src/wagtail_factories/blocks.py index 4b6706f..e6ba771 100644 --- a/src/wagtail_factories/blocks.py +++ b/src/wagtail_factories/blocks.py @@ -27,6 +27,7 @@ "PageChooserBlockFactory", "ImageChooserBlockFactory", "DocumentChooserBlockFactory", + "RichTextBlockFactory", ] @@ -216,6 +217,12 @@ class Meta: model = blocks.IntegerBlock +@register_block_factory(blocks.RichTextBlock) +class RichTextBlockFactory(BlockFactory): + class Meta: + model = blocks.RichTextBlock + + class ChooserBlockFactory(BlockFactory): pass diff --git a/tests/test_blocks.py b/tests/test_blocks.py index 6d5163a..04a5523 100644 --- a/tests/test_blocks.py +++ b/tests/test_blocks.py @@ -2,6 +2,7 @@ import pytest import wagtail_factories +from wagtail import rich_text from wagtail.blocks import StructValue from wagtail.documents.models import Document from wagtail.images.models import Image @@ -250,3 +251,17 @@ def test_chooser_block_strategy(Model, ModelChooserBlockFactory): # Object is saved in database when the strategy is create ModelChooserBlockFactory.create() assert Model.objects.count() == objects_count + 1 + + +@pytest.mark.django_db() +def test_rich_text_block_factory(): + value = "

Foo bar

" + instance = MyTestPageWithStreamFieldFactory.build( + body__0="rich_text", body__1__rich_text=value + ) + # Generated block value will be a RichText instance + assert isinstance(instance.body[0].value, rich_text.RichText) + + # Declared value will be as declared (for now) + assert isinstance(instance.body[1].value, str) + assert instance.body[1].value == value diff --git a/tests/testapp/factories.py b/tests/testapp/factories.py index 17f1cf2..4b98835 100644 --- a/tests/testapp/factories.py +++ b/tests/testapp/factories.py @@ -53,6 +53,7 @@ class MyTestPageWithStreamFieldFactory(wagtail_factories.PageFactory): "document": factory.SubFactory( wagtail_factories.DocumentChooserBlockFactory ), + "rich_text": factory.SubFactory(wagtail_factories.RichTextBlockFactory), } ) diff --git a/tests/testapp/migrations/0001_initial.py b/tests/testapp/migrations/0001_initial.py index 1f24c1f..a80266e 100644 --- a/tests/testapp/migrations/0001_initial.py +++ b/tests/testapp/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.0.10 on 2023-05-16 05:53 +# Generated by Django 4.0.10 on 2023-08-16 08:18 import django.db.models.deletion import wagtail.blocks @@ -15,7 +15,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ("wagtailcore", "0030_index_on_pagerevision_created_at"), + ("wagtailcore", "0078_referenceindex"), ] operations = [ @@ -80,6 +80,12 @@ class Migration(migrations.Migration): required=False ), ), + ( + "rich_text", + wagtail.blocks.RichTextBlock( + required=False + ), + ), ] ), ), @@ -89,6 +95,7 @@ class Migration(migrations.Migration): "document", wagtail.documents.blocks.DocumentChooserBlock(), ), + ("rich_text", wagtail.blocks.RichTextBlock()), ], use_json_field=True, ), @@ -158,6 +165,12 @@ class Migration(migrations.Migration): required=False ), ), + ( + "rich_text", + wagtail.blocks.RichTextBlock( + required=False + ), + ), ] ), ), @@ -282,6 +295,12 @@ class Migration(migrations.Migration): required=False ), ), + ( + "rich_text", + wagtail.blocks.RichTextBlock( + required=False + ), + ), ] ), ), @@ -356,6 +375,12 @@ class Migration(migrations.Migration): required=False ), ), + ( + "rich_text", + wagtail.blocks.RichTextBlock( + required=False + ), + ), ] ), ), @@ -437,6 +462,12 @@ class Migration(migrations.Migration): required=False ), ), + ( + "rich_text", + wagtail.blocks.RichTextBlock( + required=False + ), + ), ] ), ), diff --git a/tests/testapp/models.py b/tests/testapp/models.py index 7ae052a..6fe64de 100644 --- a/tests/testapp/models.py +++ b/tests/testapp/models.py @@ -15,6 +15,7 @@ class MyBlock(blocks.StructBlock): item = MyBlockItem() items = blocks.ListBlock(MyBlockItem) image = ImageChooserBlock(required=False) + rich_text = blocks.RichTextBlock(required=False) class SimpleStructBlock(blocks.StructBlock): @@ -41,6 +42,7 @@ class MyTestPage(Page): ("page", blocks.PageChooserBlock()), ("image", ImageChooserBlock()), ("document", DocumentChooserBlock()), + ("rich_text", blocks.RichTextBlock()), ], use_json_field=True, )