Skip to content

Commit

Permalink
Merge pull request #96 from Xpirix/feed_item_detail
Browse files Browse the repository at this point in the history
Feed item detail page
  • Loading branch information
Xpirix authored Dec 2, 2024
2 parents 90533d8 + c62ca31 commit f6b5cc4
Show file tree
Hide file tree
Showing 11 changed files with 579 additions and 8 deletions.
9 changes: 9 additions & 0 deletions qgisfeedproject/qgisfeed/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,13 @@ class FeedEntryFilterForm(forms.Form):
)

class MapWidget(forms.OSMWidget):

def __init__(self, attrs=None):
default_attrs = {'default_lat': 0, 'default_lon': 0, 'default_zoom': 2}
if attrs:
default_attrs.update(attrs)
super().__init__(default_attrs)

class Media:
js = ['https://cdn.jsdelivr.net/npm/[email protected]/dist/ol.js']

Expand Down Expand Up @@ -165,3 +172,5 @@ def get_approvers_choices(self):
email__isnull=False
).exclude(email='') if u.has_perm("qgisfeed.publish_qgisfeedentry")
)


11 changes: 10 additions & 1 deletion qgisfeedproject/qgisfeed/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,14 @@
from qgisfeed.utils import simplify
from django.core.exceptions import ValidationError

from .languages import LANGUAGES

class QgisLanguageField(models.CharField):
"""
A language field for Django models.
"""
def __init__(self, *args, **kwargs):
# Local import so the languages aren't loaded unless they are needed.
from .languages import LANGUAGES
kwargs.setdefault('max_length', 3)
kwargs.setdefault('choices', LANGUAGES)
super().__init__(*args, **kwargs)
Expand Down Expand Up @@ -113,6 +114,14 @@ def publish_from_epoch(self):
def __str__(self):
return self.title

@property
def language_filter_text(self):
"""Return the text value of the language filter"""
if self.language_filter:
choices_dict = dict(LANGUAGES)
return choices_dict.get(self.language_filter, 'English')
return None

class Meta:
db_table = ''
managed = True
Expand Down
19 changes: 19 additions & 0 deletions qgisfeedproject/qgisfeed/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -621,3 +621,22 @@ def test_add_feed_with_reviewer(self):
settings.QGISFEED_FROM_EMAIL
)


class FeedEntryDetailViewTestCase(TestCase):
fixtures = ['qgisfeed.json', 'users.json']

def setUp(self):
self.client = Client()

def test_feed_entry_detail_view(self):
# Test accessing a valid feed entry detail
feed_entry = QgisFeedEntry.objects.first()
response = self.client.get(reverse('feed_detail', args=[feed_entry.pk]))
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'feeds/feed_item_detail.html')
self.assertContains(response, feed_entry.title)

def test_feed_entry_detail_view_not_found(self):
# Test accessing a non-existent feed entry detail
response = self.client.get(reverse('feed_detail', args=[9999]))
self.assertEqual(response.status_code, 404)
1 change: 1 addition & 0 deletions qgisfeedproject/qgisfeed/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

urlpatterns = [
path('', views.QgisEntriesView.as_view(), name='all'),
path('<int:pk>/', views.FeedEntryDetailView.as_view(), name='feed_detail'),
path('manage/', views.FeedsListView.as_view(), name='feeds_list'),
path('manage/add/', views.FeedEntryAddView.as_view(), name='feed_entry_add'),
path('manage/update/<int:pk>/', views.FeedEntryUpdateView.as_view(), name='feed_entry_update'),
Expand Down
11 changes: 11 additions & 0 deletions qgisfeedproject/qgisfeed/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,3 +406,14 @@ def post(self, request, pk):
}

return render(request, self.template_name, args)


class FeedEntryDetailView(View):
"""
View to display a feed entry item
"""
template_name = 'feeds/feed_item_detail.html'

def get(self, request, pk):
feed_entry = get_object_or_404(QgisFeedEntry, pk=pk)
return render(request, self.template_name, {"feed_entry": feed_entry})
Loading

0 comments on commit f6b5cc4

Please sign in to comment.