Skip to content

Commit

Permalink
Showing 3 changed files with 64 additions and 18 deletions.
24 changes: 7 additions & 17 deletions src/open_inwoner/plans/models.py
Original file line number Diff line number Diff line change
@@ -131,21 +131,6 @@ def __str__(self):
def get_absolute_url(self):
return reverse("plans:plan_detail", kwargs={"uuid": self.uuid})

def get_contact_users(self, request_user):
users = []
for contact in self.contacts.all():
if contact.created_by == request_user:
users += [contact.contact_user]
else:
users += [contact.created_by]
return users

def get_all_users(self, request_user):
users = self.get_contact_users(request_user)
if self.created_by != request_user:
users += [self.created_by]
return users

def contactperson_list(self):
return ", ".join([contact.get_name() for contact in self.contacts.all()])

@@ -161,11 +146,16 @@ def get_all_files(self):
return self.documents.order_by("-created_on")

def get_other_users(self, user=None):
"""return list of users participated in the plan with exception of the current user"""
"""return list of users participating in the plan with exception of the current user"""
contact_user_ids = self.contacts.exclude(contact_user__isnull=True).values_list(
"contact_user", flat=True
)
user_ids = list(contact_user_ids) + [self.created_by.id]
created_by_ids = self.contacts.exclude(contact_user__isnull=True).values_list(
"created_by", flat=True
)
user_ids = list(
set(list(contact_user_ids) + list(created_by_ids) + [self.created_by.id])
)

if user and user.id in user_ids:
user_ids.remove(user.id)
56 changes: 56 additions & 0 deletions src/open_inwoner/plans/tests/test_views.py
Original file line number Diff line number Diff line change
@@ -56,6 +56,62 @@ def test_plan_list_filled(self):
self.assertEqual(response.status_code, 200)
self.assertContains(response, self.plan.title)

def test_plan_detail_contacts(self):
response = self.app.get(self.detail_url, user=self.user)
self.assertContains(response, self.contact_user.get_full_name())
self.assertContains(response, self.user.get_full_name())

response = self.app.get(self.detail_url, user=self.contact_user)
self.assertContains(response, self.user.get_full_name())
self.assertContains(response, self.contact_user.get_full_name())

# Contact for one user, but not the other
# Check if all users can see eachother in the plan
new_user = UserFactory()
new_contact = ContactFactory(contact_user=new_user, created_by=self.user)
self.plan.contacts.add(new_contact)

response = self.app.get(self.detail_url, user=self.user)
self.assertContains(response, self.contact_user.get_full_name())
self.assertContains(response, new_user.get_full_name())

response = self.app.get(self.detail_url, user=self.contact_user)
self.assertContains(response, self.user.get_full_name())
self.assertContains(response, new_user.get_full_name())

response = self.app.get(self.detail_url, user=new_user)
self.assertContains(response, self.contact_user.get_full_name())
self.assertContains(response, self.user.get_full_name())

new_user.delete()

# Verify the reverse Contact-relationship
new_user = UserFactory()
new_contact = ContactFactory(created_by=new_user, contact_user=self.user)
self.plan.contacts.add(new_contact)

response = self.app.get(self.detail_url, user=self.user)
self.assertContains(response, self.contact_user.get_full_name())
self.assertContains(response, new_user.get_full_name())

response = self.app.get(self.detail_url, user=self.contact_user)
self.assertContains(response, self.user.get_full_name())
self.assertContains(response, new_user.get_full_name())

response = self.app.get(self.detail_url, user=new_user)
self.assertContains(response, self.contact_user.get_full_name())
self.assertContains(response, self.user.get_full_name())

new_user.delete()

# Verify that without being added to the plan the contact isn't visible
new_user = UserFactory()
new_contact = ContactFactory(created_by=new_user, contact_user=self.user)

response = self.app.get(self.detail_url, user=self.user)
self.assertContains(response, self.contact_user.get_full_name())
self.assertNotContains(response, new_user.get_full_name())

def test_plan_contact_can_access(self):
response = self.app.get(self.list_url, user=self.contact_user)
self.assertEqual(response.status_code, 200)
2 changes: 1 addition & 1 deletion src/open_inwoner/plans/views.py
Original file line number Diff line number Diff line change
@@ -66,7 +66,7 @@ def get_queryset(self):
def get_context_data(self, **kwargs):
actions = self.object.actions.all()
context = super().get_context_data(**kwargs)
context["contact_users"] = self.object.get_contact_users(self.request.user)
context["contact_users"] = self.object.get_other_users(self.request.user)
context["is_creator"] = self.request.user == self.object.created_by
context["anchors"] = [
("#title", self.object.title),

0 comments on commit fb8c3b8

Please sign in to comment.