Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions ietf/stats/tests.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
# Copyright The IETF Trust 2016-2020, All Rights Reserved
# -*- coding: utf-8 -*-

# Copyright The IETF Trust 2016-2026, All Rights Reserved

import calendar
import json
import datetime

from django.http import Http404
from pyquery import PyQuery

import debug # pyflakes:ignore

from django.test import RequestFactory
from django.urls import reverse as urlreverse
from django.utils import timezone

from ietf.meeting.models import Meeting
from ietf.utils.test_utils import login_testing_unauthorized, TestCase
import ietf.stats.views

Expand Down Expand Up @@ -87,7 +88,29 @@ def test_meeting_stats(self):
self.assertContains(r, "/stats/meeting/124/country")
self.assertContains(r, "/stats/meeting/125/country")
self.assertContains(r, "This page provides a timeline of meeting registrations.")


def test_meeting_stats_for_bad_meeting(self):
self.assertFalse(Meeting.objects.filter(number=676767).exists())
for stats_type in ["affiliation", "country"]:
r = self.client.get(
urlreverse(
"ietf.stats.views.meeting_stats",
kwargs={"meeting_number": 676767, "stats_type": stats_type},
)
)
self.assertEqual(r.status_code, 404)

# We don't have a URL for an interim, but make sure the view will 404 if
# somehow a non-interim gets selected...
interim_num = MeetingFactory(type_id="interim").number
request_factory = RequestFactory()
with self.assertRaises(Http404):
ietf.stats.views.meeting_stats(
request_factory.get(f"/stats/meeting/{interim_num}/{stats_type}"),
meeting_number=interim_num,
stats_type=stats_type,
)

def test_known_country_list(self):
# check redirect
url = urlreverse(ietf.stats.views.known_countries_list)
Expand Down
18 changes: 9 additions & 9 deletions ietf/stats/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from django.contrib.auth.decorators import login_required
from django.core.cache import cache
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.shortcuts import render, get_object_or_404
from django.urls import reverse as urlreverse
from django.db.models import Count

Expand All @@ -27,11 +27,11 @@
from ietf.group.models import Role, Group
from ietf.person.models import Person
from ietf.name.models import ReviewResultName, CountryName, ReviewAssignmentStateName
from ietf.meeting.models import Registration
from ietf.meeting.models import Registration, Meeting
from ietf.ietfauth.utils import has_role
from ietf.utils.response import permission_denied
from ietf.utils.timezone import date_today, DEADLINE_TZINFO
from ietf.meeting.helpers import get_current_ietf_meeting_num, get_ietf_meeting
from ietf.meeting.helpers import get_current_ietf_meeting_num

# Color palette for lines
colors = [
Expand Down Expand Up @@ -568,12 +568,12 @@ def meeting_stats(request, meeting_number=None, stats_type='country'):
Returns:
Rendered response for the meeting stats template.
"""

current_meeting = get_current_ietf_meeting_num()
current_meeting_number = get_current_ietf_meeting_num()
if meeting_number is None:
meeting_number = current_meeting

this_meeting = get_ietf_meeting(meeting_number)
meeting_number = current_meeting_number
this_meeting = get_object_or_404(
Meeting.objects.filter(type_id="ietf"), number=meeting_number
)

if stats_type == 'affiliation':
minimum_required = 4
Expand Down Expand Up @@ -616,7 +616,7 @@ def meeting_stats(request, meeting_number=None, stats_type='country'):
if int(meeting_number) > 72: # No registration data before IETF-72
possible_meeting_numbers.append((int(meeting_number)-1, urlreverse(meeting_stats, kwargs={'meeting_number': int(meeting_number)-1, 'stats_type': stats_type})))
possible_meeting_numbers.append((meeting_number, urlreverse(meeting_stats, kwargs={'meeting_number': meeting_number, 'stats_type': stats_type})))
if int(meeting_number) <= int(current_meeting): # Allow current meeting +1
if int(meeting_number) <= int(current_meeting_number): # Allow current meeting +1
possible_meeting_numbers.append((int(meeting_number)+1, urlreverse(meeting_stats, kwargs={'meeting_number': int(meeting_number)+1, 'stats_type': stats_type})))

return render(request, "stats/meeting_stats.html", {
Expand Down
Loading