Skip to content

Commit

Permalink
Fixed filtering projects with/without web resources
Browse files Browse the repository at this point in the history
Fixes #7.
  • Loading branch information
Julius Osokinas committed Mar 30, 2016
1 parent 5a2d54b commit 778c473
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 8 deletions.
14 changes: 9 additions & 5 deletions geokey_webresources/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,14 @@ def setUp(self):

self.project_1 = ProjectFactory.create(add_admins=[self.user])
self.project_2 = ProjectFactory.create(add_admins=[self.user])
self.project_3 = ProjectFactory.create(add_contributors=[self.user])
self.project_4 = ProjectFactory.create()
self.project_3 = ProjectFactory.create(add_admins=[self.user])
self.project_4 = ProjectFactory.create(add_contributors=[self.user])
self.project_5 = ProjectFactory.create()
WebResourceFactory.create(project=self.project_2)
WebResourceFactory.create(project=self.project_3)
WebResourceFactory.create(project=self.project_4)

wr_to_delete = WebResourceFactory.create(project=self.project_3)
wr_to_delete.delete()

setattr(self.request, 'session', 'session')
messages = FallbackStorage(self.request)
Expand All @@ -97,7 +101,7 @@ def test_get_with_user(self):
It should render the page with all projects, where user is an
administrator.
"""
projects = [self.project_1, self.project_2]
projects = [self.project_1, self.project_2, self.project_3]

self.request.user = self.user
response = self.view(self.request).render()
Expand Down Expand Up @@ -127,7 +131,7 @@ def test_get_with_user_only_without_web_resources(self):
It should render the page with all projects, where user is an
administrator. Those projects must also not have web resources.
"""
projects = [self.project_1]
projects = [self.project_1, self.project_3]

self.request.user = self.user
self.request.GET['filter'] = 'without-web-resources-only'
Expand Down
17 changes: 14 additions & 3 deletions geokey_webresources/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from django.core.urlresolvers import reverse
from django.views.generic import CreateView, FormView, TemplateView
from django.shortcuts import redirect
from django.db.models import BooleanField, Q, Case, When
from django.utils.safestring import mark_safe
from django.contrib import messages

Expand Down Expand Up @@ -51,19 +52,29 @@ def get_context_data(self, *args, **kwargs):
dict
Context.
"""
projects = Project.objects.filter(admins=self.request.user)
projects = Project.objects.filter(admins=self.request.user).annotate(
with_webresources=Case(
When(
~Q(webresources__status='deleted') &
Q(webresources__isnull=False),
then=True
),
default=False,
output_field=BooleanField()
)
).distinct()

filters = {}
filter_for_projects = self.request.GET.get('filter')

filter_to_add = 'without-web-resources-only'
if filter_for_projects == filter_to_add:
projects = projects.filter(webresources__isnull=True).distinct()
projects = projects.filter(with_webresources=False)
filters[filter_to_add] = 'Without web resources'

filter_to_add = 'with-web-resources-only'
if filter_for_projects == filter_to_add:
projects = projects.filter(webresources__isnull=False).distinct()
projects = projects.filter(with_webresources=True)
filters[filter_to_add] = 'With web resources'

return super(IndexPage, self).get_context_data(
Expand Down

0 comments on commit 778c473

Please sign in to comment.