Skip to content

Commit

Permalink
Merge pull request #19 from 4sfc/add_page_admin
Browse files Browse the repository at this point in the history
Add page admin
  • Loading branch information
jwokaty authored Sep 11, 2020
2 parents f959b28 + 264fc8f commit da8f782
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 1 deletion.
3 changes: 2 additions & 1 deletion member_manager/admin/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from django.contrib import admin
"""MemberManagerAdmin classes"""

from member_manager.admin.availability import AvailabilityAdmin
from member_manager.admin.availability_inline import AvailabilityInline
from member_manager.admin.page import PageAdmin
from member_manager.admin.profile import ProfileAdmin
from member_manager.admin.profile_skill_inline import ProfileSkillInline
from member_manager.admin.profile_skill import ProfileSkillAdmin
Expand Down
18 changes: 18 additions & 0 deletions member_manager/admin/page.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""PageAdmin class"""

from django.contrib import admin

from common_files.admin.timestamp import TimestampAdmin
from member_manager.models.page import Page


@admin.register(Page)
class PageAdmin(TimestampAdmin):
"""PageAdmin inherits from TimestampAdmin"""

fields = ['title', 'slug', 'content', 'public', 'published']
list_display = ['title', 'slug', 'content', 'public', 'published']
list_filter = ['public']
ordering = ['title', 'slug', 'public']
readonly_fields = ['created', 'created_by', 'modified', 'modified_by']
search_fields = ['title', 'slug', 'content']
Empty file.
28 changes: 28 additions & 0 deletions member_manager/filters/published.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
"""PublishedFilter class"""

from django.contrib import admin
from django.utils.translation import gettext_lazy as _


class PublishedListFilter(admin.SimpleListFilter):
"""PublishedListFilter filters published and unpublished pages"""

title = _('published')
parameter_name = 'published'

def lookups(self, request, model_admin):
return (
('published', _('Yes')),
('unpublished', _('No')),
)

def queryset(self, request, queryset):
"""Return queryset of published or unpublished pages."""
if not self.value():
return queryset

if self.value() == 'published':
updated_qs = queryset.filter(published__isnull=False)
elif self.value() == 'unpublished':
updated_qs = queryset.filter(published__isnull=True)
return updated_qs
2 changes: 2 additions & 0 deletions member_manager/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
from member_manager.tests.availability_inline_formset import (
AvailabilityInlineFormSetTest
)
from member_manager.tests.page import PageTest
from member_manager.tests.profile import ProfileTest
from member_manager.tests.profile_skill import ProfileSkillTest
from member_manager.tests.published import PublishedListFilterTest
from member_manager.tests.skill import SkillTest
from member_manager.tests.utils import MemberManagerUtilsTest
68 changes: 68 additions & 0 deletions member_manager/tests/published.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
"""PublishedListFilterTest class"""

from django.contrib.auth.models import User
from django.test import TestCase
from django.utils import timezone
from django.utils.translation import gettext_lazy as _

from member_manager.filters.published import PublishedListFilter
from member_manager.models.page import Page


class PublishedListFilterTest(TestCase):
"""Test PublishedListFilter"""

@classmethod
def setUpTestData(cls):
user = User.objects.create(username='fbar', email='[email protected]')
Page.objects.bulk_create([
Page(title='Title 1', slug='title-1', content='Content of page 1',
public=True, published=timezone.now(), created_by=user,
modified_by=user),
Page(title='Title 2', slug='title-2', content='Content of page 2',
public=False, published=timezone.now(), created_by=user,
modified_by=user),
Page(title='Title 3', slug='title-3', content='Content of page 3',
public=True, published=timezone.now(), created_by=user,
modified_by=user),
Page(title='Title 4', slug='title-4', content='Content of page 4',
public=True, created_by=user, modified_by=user),
Page(title='Title 5', slug='title-5', content='Content of page 5',
public=False, created_by=user, modified_by=user),
Page(title='Title 6', slug='title-6', content='Content of page 6',
public=True, created_by=user, modified_by=user),
])

def test_lookups(self):
"""Test lookups"""
lookup_values = (
('published', _('Yes')),
('unpublished', _('No')),
)
page_lf = PublishedListFilter(None, {'published': None}, Page, None)
self.assertEqual(page_lf.lookups(None, None), lookup_values)

def test_queryset_with_none_value(self):
"""Test queryset with None value"""
page_lf = PublishedListFilter(None, {'published': None}, Page, None)
self.assertIsNone(page_lf.value())
qs = page_lf.queryset('', Page.objects.all()).order_by('title')
expected = ['<Page: Title 1>', '<Page: Title 2>', '<Page: Title 3>',
'<Page: Title 4>', '<Page: Title 5>', '<Page: Title 6>']
self.assertQuerysetEqual(qs, expected)

def test_queryset_with_published_value(self):
"""Test queryset with published value"""
page_lf = PublishedListFilter(None, {'published': 'published'}, Page, None)
self.assertEqual(page_lf.value(), 'published')
qs = page_lf.queryset('', Page.objects.all()).order_by('title')
expected = ['<Page: Title 1>', '<Page: Title 2>', '<Page: Title 3>']
self.assertQuerysetEqual(qs, expected)

def test_queryset_with_unpublished_value(self):
"""Test queryset with unpublished value"""
page_lf = PublishedListFilter(None, {'published': 'unpublished'}, Page, None)
self.assertEqual(page_lf.value(), 'unpublished')
qs = page_lf.queryset('', Page.objects.all()).order_by('title')
expected = ['<Page: Title 4>', '<Page: Title 5>', '<Page: Title 6>']
self.assertQuerysetEqual(qs, expected)

0 comments on commit da8f782

Please sign in to comment.