Skip to content

Commit

Permalink
Group description edit form
Browse files Browse the repository at this point in the history
  • Loading branch information
rafalp committed Feb 25, 2024
1 parent 6147f9f commit e1352ee
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 0 deletions.
30 changes: 30 additions & 0 deletions misago/admin/groups/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@

from ...core.validators import validate_color_hex, validate_css_name, validate_sluggable
from ...parser.context import create_parser_context
from ...parser.enums import ContentType
from ...parser.factory import create_parser
from ...parser.html import render_ast_to_html
from ...parser.metadata import create_ast_metadata
from ...parser.plaintext import PlainTextFormat, render_ast_to_plaintext
from ...users.models import Group, GroupDescription
from ..forms import YesNoSwitch

Expand Down Expand Up @@ -160,6 +165,31 @@ class Meta:
"meta",
]

def __init__(self, *args, request, **kwargs):
self.request = request
super().__init__(*args, **kwargs)

def clean(self):
data = super().clean()

if data.get("markdown"):
context = create_parser_context(
self.request,
content_type=ContentType.GROUP_DESCRIPTION,
)
parse = create_parser(context)
ast = parse(data["markdown"])
metadata = create_ast_metadata(context, ast)
data["html"] = render_ast_to_html(context, ast, metadata)

if not data.get("meta"):
data["meta"] = render_ast_to_plaintext(
context, ast, metadata, PlainTextFormat.META_DESCRIPTION
)
else:
data.update({"markdown": None, "html": None})

if not data.get("meta"):
data["meta"] = None

return data
2 changes: 2 additions & 0 deletions misago/admin/groups/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,14 @@ def get_form(self, form_class, request, target):
request.FILES,
instance=target.description,
prefix="description",
request=request,
)
else:
group_form = EditGroupForm(instance=target, prefix="group")
description_form = EditGroupDescriptionForm(
instance=target.description,
prefix="description",
request=request,
)

formset.add_form(group_form)
Expand Down
61 changes: 61 additions & 0 deletions misago/admin/tests/test_group_edit.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,67 @@ def test_edit_group_form_copies_group_permissions(
)


def test_edit_group_form_sets_group_description_and_meta_description(
admin_client, custom_group
):
form_data = get_form_data(custom_group)
form_data["description-markdown"] = "Hello **world**!"
form_data["description-meta"] = "Hello meta description!"

response = admin_client.post(
reverse("misago:admin:groups:edit", kwargs={"pk": custom_group.id}),
form_data,
)
assert response.status_code == 302

custom_group.description.refresh_from_db()
assert custom_group.description.markdown == "Hello **world**!"
assert custom_group.description.html == "<p>Hello <strong>world</strong>!</p>"
assert custom_group.description.meta == "Hello meta description!"


def test_edit_group_form_sets_group_description_and_automatic_meta_description(
admin_client, custom_group
):
form_data = get_form_data(custom_group)
form_data["description-markdown"] = "Hello **world**!"

response = admin_client.post(
reverse("misago:admin:groups:edit", kwargs={"pk": custom_group.id}),
form_data,
)
assert response.status_code == 302

custom_group.description.refresh_from_db()
assert custom_group.description.markdown == "Hello **world**!"
assert custom_group.description.html == "<p>Hello <strong>world</strong>!</p>"
assert custom_group.description.meta == "Hello world!"


def test_edit_group_form_clears_group_description_and_meta_description(
admin_client, custom_group
):
custom_group.description.markdown = "Hello **world**!"
custom_group.description.html = "<p>Hello <strong>world</strong>!</p>"
custom_group.description.meta = "Hello meta description!"
custom_group.description.save()

form_data = get_form_data(custom_group)
form_data["description-markdown"] = ""
form_data["description-meta"] = ""

response = admin_client.post(
reverse("misago:admin:groups:edit", kwargs={"pk": custom_group.id}),
form_data,
)
assert response.status_code == 302

custom_group.description.refresh_from_db()
assert custom_group.description.markdown is None
assert custom_group.description.html is None
assert custom_group.description.meta is None


def test_edit_group_form_invalidates_groups_cache(admin_client, custom_group):
with assert_invalidates_cache(CacheName.GROUPS):
admin_client.post(
Expand Down
1 change: 1 addition & 0 deletions misago/parser/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
class ContentType(StrEnum):
POST = "post"
SIGNATURE = "signature"
GROUP_DESCRIPTION = "group-description"

0 comments on commit e1352ee

Please sign in to comment.