diff --git a/src/backoffice/tests.py b/src/backoffice/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..5a0d54c36c9419307d51c0b06e54487fd3ebc678 --- /dev/null +++ b/src/backoffice/tests.py @@ -0,0 +1,70 @@ +from datetime import datetime +from pytz import utc +import uuid + +from django.test import TestCase, override_settings +from django.urls import reverse + + +from core.models import Assembly, Conference, ConferenceMember, PlatformUser, AssemblyLink + + +# from https://github.com/Grollicus/unittest_patterns/blob/master/unittest_patterns/__init__.py +class Pattern(object): + def __req__(self, lhs): + return self.__eq__(lhs) + + __hash__ = None + + +# from https://github.com/Grollicus/unittest_patterns/blob/master/unittest_patterns/__init__.py +class Any(Pattern): + """ Equals everything """ + + def __eq__(self, rhs): + return True + + +class ThingWithLength(Pattern): + def __init__(self, _len): + self.len = _len + + def __eq__(self, rhs): + return len(rhs) == self.len + + +TEST_CONF_ID = uuid.uuid4() + + +@override_settings(PLAINUI_CONFERENCE=TEST_CONF_ID) +class AssemblyListViewTest(TestCase): + def setUp(self): + self.conf = Conference( + id=TEST_CONF_ID, + name='conf_asdf', + slug='slug1', + start=datetime(2020, 1, 1, 0, 0, 0, tzinfo=utc), + end=datetime(2020, 1, 3, 0, 0, 0, tzinfo=utc), + is_public=True, + ) + self.conf.save() + self.user = PlatformUser(username='testuser', email='no@where.test', is_staff=True, is_superuser=True) + self.user.save() + self.conference_member = ConferenceMember(conference=self.conf, user=self.user) + self.conference_member.save() + self.assemblies = [Assembly(slug=a, name=a, is_virtual=True, conference_id=self.conf.id, state_assembly=Assembly.State.ACCEPTED) + for a in ('a1', 'a2', 'a3')] + for a in self.assemblies: + a.save() + self.assembly_links = [ + AssemblyLink(a=self.assemblies[0], b=self.assemblies[1]), + AssemblyLink(a=self.assemblies[0], b=self.assemblies[2]) + ] + for al in self.assembly_links: + al.save() + + self.client.force_login(self.user) + + def test_slugname_related_assemblies(self): + resp = self.client.get(reverse('backoffice:assemblieslist', kwargs={'variant': 'slugname'})) + self.assertIn(b'<td>a2, a3</td>', resp.content) diff --git a/src/backoffice/views/assemblyteam.py b/src/backoffice/views/assemblyteam.py index f6a56c552c02f2f5636588c6e515b982ecd4b6aa..4b58c32d884b155aa437db753b528cce75017f9d 100644 --- a/src/backoffice/views/assemblyteam.py +++ b/src/backoffice/views/assemblyteam.py @@ -11,7 +11,7 @@ from django.utils.text import format_lazy from django.utils.translation import gettext_lazy as _ from django.views.generic import ListView, View -from core.models.assemblies import Assembly, AssemblyMember +from core.models.assemblies import Assembly, AssemblyMember, AssemblyLink from core.models.users import UserCommunicationChannel from .mixins import ConferenceMixin @@ -182,10 +182,13 @@ class AssembliesListsView(AssembliesListMixin, View): variant_fields = None if variant == 'slugname': - # all assemblies with just slug + name - qs = self.get_queryset().values_list('slug', 'name') + # all assemblies with slug + name + related assemblies + qs = tuple( + (a.slug, a.name, ", ".join(link.b.name for link in AssemblyLink.objects.filter(a=a))) + for a in self.get_queryset() + ) variant_name = 'slug + name' - variant_fields = [_('Assembly__slug'), _('Assembly__name')] + variant_fields = [_('Assembly__slug'), _('Assembly__name'), _('assembly_links')] elif variant == 'contactsmail': # all assembly contacts' email addresses with duplicates removed