Merge lp:~mhall119/summit/fix-cache into lp:summit

Proposed by Michael Hall
Status: Merged
Approved by: Nigel Babu
Approved revision: 183
Merged at revision: 183
Proposed branch: lp:~mhall119/summit/fix-cache
Merge into: lp:summit
Diff against target: 114 lines (+91/-0)
2 files modified
summit/schedule/models/__init__.py (+2/-0)
summit/schedule/tests.py (+89/-0)
To merge this branch: bzr merge lp:~mhall119/summit/fix-cache
Reviewer Review Type Date Requested Status
Nigel Babu (community) Approve
Review via email: mp+75881@code.launchpad.net

Commit message

Fixes problem with old cache on track view schedule

Description of the change

Overview
========
Fixes problem with old cache on track view schedule

Details
=======
There was already signal code to clear the cache on meeting or agenda change, but it wasn't clearing the separate cache being used by the track view of the schedule. This code will clear the track view cache, and also adds tests to make sure that both are being cleared.

To post a comment you must log in.
Revision history for this message
Nigel Babu (nigelbabu) wrote :

Nice job!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'summit/schedule/models/__init__.py'
2--- summit/schedule/models/__init__.py 2011-09-14 19:39:48 +0000
3+++ summit/schedule/models/__init__.py 2011-09-18 01:19:26 +0000
4@@ -34,8 +34,10 @@
5 instance = kwargs['instance']
6 if isinstance(instance, Meeting):
7 cache.set('meeting-html-%d' % instance.id, None)
8+ cache.set('meeting-track-html-%d' % instance.id, None)
9 elif isinstance(instance, Agenda):
10 cache.set('meeting-html-%d' % instance.meeting.id, None)
11+ cache.set('meeting-track-html-%d' % instance.meeting.id, None)
12
13
14 post_save.connect(meeting_update_callback, sender=Meeting)
15
16=== modified file 'summit/schedule/tests.py'
17--- summit/schedule/tests.py 2011-09-18 01:00:39 +0000
18+++ summit/schedule/tests.py 2011-09-18 01:19:26 +0000
19@@ -891,6 +891,95 @@
20 self.assertEqual(None, schedule.fakenow)
21
22
23+class ScheduleCacheTestCase(djangotest.TestCase):
24+
25+ def setUp(self):
26+ now = datetime.datetime.utcnow()
27+ one_hour = datetime.timedelta(0, 3600)
28+ week = datetime.timedelta(days=5)
29+ self.summit = factory.make_one(Summit, name='uds-test', timezone='UTC')
30+ self.slot = factory.make_one(
31+ Slot,
32+ start_utc=now+one_hour,
33+ end_utc=now+(2*one_hour),
34+ type='open',
35+ summit=self.summit)
36+
37+ self.track = factory.make_one(Track, slug='test.track', summit=self.summit)
38+ self.room = factory.make_one(Room, name='test.room', title='Test Room', summit=self.summit)
39+ self.room.tracks = [self.track]
40+ self.meeting = factory.make_one(Meeting, summit=self.summit, title='Test Meeting', name='meeting', private=False, requires_dial_in=False)
41+ self.meeting.tracks = [self.track]
42+ self.agenda = factory.make_one(Agenda, slot=self.slot, meeting=self.meeting, room=self.room)
43+
44+ self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User')
45+ self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week)
46+
47+ def tearDown(self):
48+ # Cached requests cause render.py to return old data, so clear the cache
49+ if hasattr(cache, 'clear'):
50+ cache.clear()
51+ # Older django didn't have .clear, but locmem cache did have ._cull
52+ elif hasattr(cache, '_cull'):
53+ cache._cull()
54+
55+ def request_schedule_by_date(self):
56+ schedule_args = [self.summit.name, self.agenda.slot.start_utc.date()]
57+ schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
58+ response = self.client.get(schedule_url)
59+ return response
60+
61+ def request_schedule_by_track(self):
62+ schedule_args = [self.summit.name, self.track.slug]
63+ schedule_url = reverse('summit.schedule.views.by_track', args=schedule_args)
64+ response = self.client.get(schedule_url)
65+ return response
66+
67+ def test_cache_cleared_on_meeting_change(self):
68+ self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
69+ response = self.request_schedule_by_date()
70+ self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
71+
72+ self.meeting.save()
73+
74+ self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
75+ response = self.request_schedule_by_date()
76+ self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
77+
78+ def test_cache_cleared_on_agenda_change(self):
79+ self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
80+ response = self.request_schedule_by_date()
81+ self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
82+
83+ self.agenda.save()
84+
85+ self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
86+ response = self.request_schedule_by_date()
87+ self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
88+
89+ def test_track_cache_cleared_on_meeting_change(self):
90+ self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
91+ response = self.request_schedule_by_track()
92+ self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
93+
94+ self.meeting.save()
95+
96+ self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
97+ response = self.request_schedule_by_track()
98+ self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
99+
100+ def test_track_cache_cleared_on_agenda_change(self):
101+ self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
102+ response = self.request_schedule_by_track()
103+ self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
104+
105+ self.agenda.save()
106+
107+ self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
108+ response = self.request_schedule_by_track()
109+ self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
110+
111+
112 class LaunchpadExportNode(dict):
113
114 def __init__(self, *args, **kwargs):

Subscribers

People subscribed via source and target branches