Skip to content

Commit

Permalink
Directory: Ensure all Directory Entry Subscribers are listed
Browse files Browse the repository at this point in the history
TYPE: Bugfix
LINK: ogc-2063
  • Loading branch information
Tschuppi81 authored Feb 7, 2025
1 parent 81b5776 commit 956bda2
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
14 changes: 8 additions & 6 deletions src/onegov/org/views/directory.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
from __future__ import annotations

from itertools import groupby
import re

import morepath
import transaction

from collections import OrderedDict, defaultdict
from collections import defaultdict
from onegov.core.html import html_to_text
from onegov.core.security import Public, Private, Secret
from onegov.core.templates import render_template
Expand Down Expand Up @@ -1173,11 +1172,14 @@ def view_directory_entry_update_recipients(
warning = request.translate(_('Do you really want to unsubscribe "{}"?'))

recipients = EntryRecipientCollection(request.session).query().filter_by(
directory_id=self.directory.id).filter_by(confirmed=True).all()
by_letter = OrderedDict()
directory_id=self.directory.id).filter_by(confirmed=True)

by_letter = defaultdict(list)
for recipient in recipients:
letter = recipient.address[0].upper()
by_letter[letter].append(recipient)
by_letter = defaultdict(list, sorted(by_letter.items()))

for key, values in groupby(recipients, key=lambda r: r.address[0].upper()):
by_letter[key] = list(values)
layout = layout or DirectoryEntryCollectionLayout(self, request)
layout.breadcrumbs.append(Link(_('Recipients of new entry updates'), '#'))
layout.editbar_links = []
Expand Down
17 changes: 14 additions & 3 deletions tests/onegov/town6/test_views_directory.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,14 +129,21 @@ def test_directory_entry_subscription(client):

page = page.click('Benachrichtigungen bei neuen Einträgen erhalten')
page.form['address'] = '[email protected]'
page = page.form.submit().follow()

page = page.click('Benachrichtigungen bei neuen Einträgen erhalten')
page.form['address'] = '[email protected]'
page.form.submit().follow()

assert len(os.listdir(client.app.maildir)) == 2
assert len(os.listdir(client.app.maildir)) == 3
message = client.get_email(0)['TextBody']
confirm = re.search(r'Anmeldung bestätigen\]\(([^\)]+)', message).group(1)
message_2 = client.get_email(1)['TextBody']
confirm_2 = re.search(
r'Anmeldung bestätigen\]\(([^\)]+)', message_2).group(1)
message_3 = client.get_email(2)['TextBody']
confirm_3 = re.search(
r'Anmeldung bestätigen\]\(([^\)]+)', message_3).group(1)

illegal_confirm = confirm.split('/confirm')[0] + 'x/confirm'
assert "falsches Token" in client.get(illegal_confirm).follow().follow()
Expand All @@ -148,16 +155,20 @@ def test_directory_entry_subscription(client):
page = client.get(confirm_2).follow().follow()
assert "[email protected] wurde erfolgreich" in page

page = client.get(confirm_3).follow().follow()
assert "[email protected] wurde erfolgreich" in page

page = client.get('/directories/trainers/+recipients')
assert '[email protected]' in page
assert '[email protected]' in page
assert '[email protected]' in page

page = client.get('/directories/trainers').click("^Eintrag$")
page.form['name'] = 'Emily Larlham'
page.form.submit()

assert len(os.listdir(client.app.maildir)) == 3
message = client.get_email(2)['TextBody']
assert len(os.listdir(client.app.maildir)) == 4
message = client.get_email(3)['TextBody']
assert 'Emily Larlham' in message

unsubscribe = re.search(r'abzumelden.\]\(([^\)]+)', message).group(1)
Expand Down

0 comments on commit 956bda2

Please sign in to comment.