|
| 1 | +from __future__ import unicode_literals |
| 2 | + |
| 3 | +from django.contrib import admin |
| 4 | +from django.test import RequestFactory, TestCase |
| 5 | + |
| 6 | +from djcelery.admin import PeriodicTaskAdmin |
| 7 | +from djcelery.models import PeriodicTask, IntervalSchedule, PERIOD_CHOICES |
| 8 | + |
| 9 | + |
| 10 | +class MockRequest(object): |
| 11 | + pass |
| 12 | + |
| 13 | +request = MockRequest() |
| 14 | + |
| 15 | +site = admin.AdminSite() |
| 16 | + |
| 17 | + |
| 18 | +class TestPeriodicTaskAdmin(TestCase): |
| 19 | + @classmethod |
| 20 | + def setUpTestData(cls): |
| 21 | + cls.interval = IntervalSchedule.objects.create( |
| 22 | + every=1, period=PERIOD_CHOICES[0][0]) |
| 23 | + |
| 24 | + cls.request_factory = RequestFactory() |
| 25 | + |
| 26 | + cls.pt_admin = PeriodicTaskAdmin(PeriodicTask, site) |
| 27 | + |
| 28 | + def test_specified_ordering(self): |
| 29 | + """ |
| 30 | + Ordering should be by ('-enabled', 'name') |
| 31 | + """ |
| 32 | + PeriodicTask.objects.bulk_create([ |
| 33 | + PeriodicTask(name='Bohemian Rhapsody', task='bohemian_rhapsody', |
| 34 | + interval=self.interval, enabled=True), |
| 35 | + PeriodicTask(name='Somebody to Love', task='somebody_to_love', |
| 36 | + interval=self.interval, enabled=False), |
| 37 | + PeriodicTask(name='Tie Your Mother Down', |
| 38 | + task='tie_your_mother_down', |
| 39 | + interval=self.interval, enabled=False), |
| 40 | + PeriodicTask(name='Under Pressure', task='under_pressure', |
| 41 | + interval=self.interval, enabled=True), |
| 42 | + ]) |
| 43 | + names = [b.name for b in self.pt_admin.get_queryset(request)] |
| 44 | + self.assertListEqual(['Bohemian Rhapsody', 'Under Pressure', |
| 45 | + 'Somebody to Love', 'Tie Your Mother Down'], |
| 46 | + names) |
| 47 | + |
| 48 | + def test_enable_tasks_should_enable_disabled_periodic_tasks(self): |
| 49 | + """ |
| 50 | + enable_tasks action should enable selected periodic tasks |
| 51 | + """ |
| 52 | + PeriodicTask.objects.create(name='Killer Queen', task='killer_queen', |
| 53 | + interval=self.interval, enabled=False), |
| 54 | + queryset = PeriodicTask.objects.filter(pk=1) |
| 55 | + self.pt_admin.enable_tasks(request, queryset) |
| 56 | + self.assertTrue(PeriodicTask.objects.get(pk=1).enabled) |
| 57 | + |
| 58 | + def test_disable_tasks_should_disable_enabled_periodic_tasks(self): |
| 59 | + """ |
| 60 | + disable_tasks action should disable selected periodic tasks |
| 61 | + """ |
| 62 | + PeriodicTask.objects.create(name='Killer Queen', task='killer_queen', |
| 63 | + interval=self.interval, enabled=True), |
| 64 | + queryset = PeriodicTask.objects.filter(pk=1) |
| 65 | + self.pt_admin.disable_tasks(request, queryset) |
| 66 | + self.assertFalse(PeriodicTask.objects.get(pk=1).enabled) |
| 67 | + |
| 68 | + def test_for_valid_search_fields(self): |
| 69 | + """ |
| 70 | + Valid search fields should be ('name', 'task') |
| 71 | + """ |
| 72 | + search_fields = self.pt_admin.search_fields |
| 73 | + self.assertEqual(search_fields, ('name', 'task')) |
| 74 | + |
| 75 | + for fieldname in search_fields: |
| 76 | + query = '%s__icontains' % fieldname |
| 77 | + kwargs = {query: 'Queen'} |
| 78 | + # We have no content, so the number of results if we search on |
| 79 | + # something should be zero. |
| 80 | + self.assertEquals(PeriodicTask.objects.filter(**kwargs).count(), 0) |
0 commit comments