Skip to content

Commit

Permalink
Show related contacts in the POI form
Browse files Browse the repository at this point in the history
Co-authored-by: David Venhoff <[email protected]>
  • Loading branch information
MizukiTemma and david-venhoff committed Nov 6, 2024
1 parent 03fb569 commit c241298
Show file tree
Hide file tree
Showing 7 changed files with 175 additions and 11 deletions.
15 changes: 15 additions & 0 deletions integreat_cms/cms/fixtures/test_data.json
Original file line number Diff line number Diff line change
Expand Up @@ -997,6 +997,21 @@
"created_date": "2024-08-06T13:23:45.256Z"
}
},
{
"model": "cms.contact",
"pk": 4,
"fields": {
"title": "",
"name": "",
"location": 6,
"email": "[email protected]",
"phone_number": "0123456789",
"website": "https://integreat-app.de/",
"archived": false,
"last_updated": "2024-08-06T13:23:45.256Z",
"created_date": "2024-08-06T13:23:45.256Z"
}
},
{
"model": "cms.recurrencerule",
"pk": 1,
Expand Down
1 change: 1 addition & 0 deletions integreat_cms/cms/models/contact/contact.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from django.db.models import Q
from django.utils import timezone
from django.utils.functional import cached_property
from django.utils.translation import gettext
from django.utils.translation import gettext_lazy as _

from ..abstract_base_model import AbstractBaseModel
Expand Down
3 changes: 3 additions & 0 deletions integreat_cms/cms/templates/pois/poi_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@ <h3 class="font-bold text-black heading">
<div id="right-sidebar-column"
class="flex flex-col flex-wrap 3xl:col-end-3 4xl:col-end-auto md:w-full">
{% include "./poi_form_sidebar/contact_box.html" with box_id="poi-contact" %}
{% if poi_form.instance.id and perms.cms.view_contact %}
{% include "./poi_form_sidebar/related_contacts_box.html" with box_id="poi-related-contacts" %}
{% endif %}
{% include "./poi_form_sidebar/opening_hours_box.html" with box_id="poi-opening-hours" no_padding=True %}
{% include "./poi_form_sidebar/category_box.html" with box_id="poi-category" %}
{% include "./poi_form_sidebar/icon_box.html" with box_id="poi-icon" %}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{% extends "../../_collapsible_box.html" %}
{% load i18n %}
{% load widget_tweaks %}
{% block collapsible_box_icon %}
message-square
{% endblock collapsible_box_icon %}
{% block collapsible_box_title %}
{% trans "Related contacts" %}
{% endblock collapsible_box_title %}
{% block collapsible_box_content %}
{% with poi_form.instance.contacts.all as contacts %}
<div>
<div class="help-text">
{% if contacts %}
{% trans "This location is currently referred to in those contacts." %}
{% else %}
{% trans "This location is not currently referred to in any contact." %}
{% endif %}
</div>
{% for contact in contacts %}
<a href="{% url 'edit_contact' contact_id=contact.id region_slug=request.region.slug %}"
class="block pt-2 hover:underline">
<i icon-name="pen-square" class="mr-2"></i> {{ contact }}
</a>
{% endfor %}
</div>
{% endwith %}
{% endblock collapsible_box_content %}
20 changes: 17 additions & 3 deletions integreat_cms/locale/de/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -2259,7 +2259,8 @@ msgstr "Sprachen und Übersetzungen kopieren"
msgid ""
"Disable to skip copying of the language tree and all content translations."
msgstr ""
"Abwählen, um das Kopieren des Sprachbaums und aller Inhaltsübersetzungen zu überspringen."
"Abwählen, um das Kopieren des Sprachbaums und aller Inhaltsübersetzungen zu "
"überspringen."

#: cms/forms/regions/region_form.py
msgid "Page based offers cloning behavior"
Expand Down Expand Up @@ -7706,6 +7707,18 @@ msgstr "Nur Koordinaten übernehmen"
msgid "Please choose one option or cancel"
msgstr "Bitte eine Option auswählen oder abbrechen"

#: cms/templates/pois/poi_form_sidebar/related_contacts_box.html
msgid "Related contacts"
msgstr "Zugehörige Kontakte"

#: cms/templates/pois/poi_form_sidebar/related_contacts_box.html
msgid "This location is currently referred to in those contacts."
msgstr "Dieser Ort wird in folgenden Kontakten verwendet."

#: cms/templates/pois/poi_form_sidebar/related_contacts_box.html
msgid "This location is not currently referred to in any contact."
msgstr "Zur Zeit gibt es keine Kontakte zu diesem Ort."

#: cms/templates/pois/poi_list.html cms/templates/pois/poi_list_archived.html
msgid "Archived locations"
msgstr "Archivierte Orte"
Expand Down Expand Up @@ -11009,17 +11022,18 @@ msgstr ""
"Diese Seite konnte nicht importiert werden, da sie zu einer anderen Region "
"gehört ({})."

#~ msgid "General contact information"
#~ msgstr "Allgemeine Kontaktinformationen"

#~ msgid "{}{}"
#~ msgstr "{}{}"

#~ msgid " "
#~ msgstr " "

#, python-format
#~ msgid "%s %s"
#~ msgstr "%s %s"

#, python-format
#~ msgid "%s with %s"
#~ msgstr "%s mit %s"

Expand Down
16 changes: 8 additions & 8 deletions tests/cms/views/contacts/test_contact_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,39 +9,39 @@ def test_copying_contact_works(
load_test_data: None,
login_role_user: tuple[Client, str],
) -> None:
assert Contact.objects.all().count() == 3
assert Contact.objects.all().count() == 4

contact = Contact.objects.get(id=1)
contact.copy()

assert Contact.objects.all().count() == 4
assert Contact.objects.all().count() == 5


@pytest.mark.django_db
def test_deleting_contact_works(
load_test_data: None,
login_role_user: tuple[Client, str],
) -> None:
assert Contact.objects.all().count() == 3
assert Contact.objects.all().count() == 4

contact = Contact.objects.get(id=1)
contact.delete()

assert Contact.objects.all().count() == 2
assert Contact.objects.all().count() == 3


@pytest.mark.django_db
def test_archiving_contact_works(
load_test_data: None,
login_role_user: tuple[Client, str],
) -> None:
assert Contact.objects.all().count() == 3
assert Contact.objects.all().count() == 4

contact = Contact.objects.get(id=1)
assert contact.archived is False
contact.archive()

assert Contact.objects.all().count() == 3
assert Contact.objects.all().count() == 4
assert contact.archived is True


Expand All @@ -50,11 +50,11 @@ def test_restoring_contact_works(
load_test_data: None,
login_role_user: tuple[Client, str],
) -> None:
assert Contact.objects.all().count() == 3
assert Contact.objects.all().count() == 4

contact = Contact.objects.get(id=2)
assert contact.archived is True
contact.restore()

assert Contact.objects.all().count() == 3
assert Contact.objects.all().count() == 4
assert contact.archived is False
103 changes: 103 additions & 0 deletions tests/cms/views/poi/test_poi_form.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,3 +218,106 @@ def test_poi_in_use_not_bulk_archived(

# Check the POI is not archived
assert not POI.objects.filter(id=poi_id).first().archived


@pytest.mark.django_db
def test_poi_form_shows_associated_contacts(
load_test_data: None,
login_role_user: tuple[Client, str],
settings: SettingsWrapper,
) -> None:
"""
POI "Draft location" (id=6) has three related contacts. Test whether they are shown in the POI form.
"""
client, role = login_role_user

# Choose a POI which has related contacts
POI_ID = 6

# Set the language setting to English so assertion does not fail because of corresponding German sentence appearing instead the english one.
settings.LANGUAGE_CODE = "en"

poi = POI.objects.filter(id=POI_ID).first()
related_contacts = list(poi.contacts.all())

assert len(related_contacts) > 0

edit_poi = reverse(
"edit_poi",
kwargs={
"poi_id": poi.id,
"region_slug": poi.region.slug,
"language_slug": poi.region.default_language.slug,
},
)
response = client.get(edit_poi)

if role == ANONYMOUS:
assert response.status_code == 302
assert (
response.headers.get("location") == f"{settings.LOGIN_URL}?next={edit_poi}"
)
# probably needs adjustment after #2958
elif role in HIGH_PRIV_STAFF_ROLES:
for contact in related_contacts:
if contact.title and contact.name:
assert f"{contact.title} {contact.name}" in response.content.decode(
"utf-8"
)
else:
assert "General contact information" in response.content.decode("utf-8")
else:
assert (
"This location is currently referred to in those contacts."
not in response.content.decode("utf-8")
)


@pytest.mark.django_db
def test_poi_form_shows_no_associated_contacts(
load_test_data: None,
login_role_user: tuple[Client, str],
settings: SettingsWrapper,
) -> None:
"""
POI "Test location" (id=4) has no related contacts. Test whether the correct message is shown in the POi form.
"""
client, role = login_role_user

# Choose a POI which has related contacts
POI_ID = 4

# Set the language setting to English so assertion does not fail because of corresponding German sentence appearing instead the english one.
settings.LANGUAGE_CODE = "en"

poi = POI.objects.filter(id=POI_ID).first()
related_contacts = list(poi.contacts.all())

assert len(related_contacts) == 0

edit_poi = reverse(
"edit_poi",
kwargs={
"poi_id": poi.id,
"region_slug": poi.region.slug,
"language_slug": poi.region.default_language.slug,
},
)
response = client.get(edit_poi)

if role == ANONYMOUS:
assert response.status_code == 302
assert (
response.headers.get("location") == f"{settings.LOGIN_URL}?next={edit_poi}"
)
# probably needs adjustment after #2958
elif role in HIGH_PRIV_STAFF_ROLES:
assert (
"This location is not currently referred to in any contact."
in response.content.decode("utf-8")
)
else:
assert (
"This location is not currently referred to in any contact."
not in response.content.decode("utf-8")
)

0 comments on commit c241298

Please sign in to comment.