Unit-testing Custom Admin Action, requires request and querysets parameters.

2,464 views
Skip to first unread message

Azam Alias

unread,
Nov 2, 2014, 9:07:06 PM11/2/14
to django...@googlegroups.com
Hi,

I would like to unit-test the activate_apps( ) and deactivate_apps( ) functions below, as low-level as possible.

How could I do this without going through Selenium (FT) route?

In my admin.py:

from django.contrib import admin
from my_app_listing.models import App

class AppAdmin(admin.ModelAdmin):
    actions
= ['activate_apps', 'deactivate_apps']
    list_display
= ('name', 'is_active', 'frequency')
    fieldsets
= [
       
(None, {'fields': ['name']}),
       
(None, {'fields': ['is_active']}),
       
(None, {'fields': ['frequency']}),
       
('Description', {'fields': ['description'], 'classes': ['collapse']}),
   
]

   
def activate_apps(self, request, queryset):
       
queryset.update(is_active=True)
    activate_apps
.short_description = "Activate selected Apps"

   
def deactivate_apps(self, request, queryset):
       
queryset.update(is_active=False)
    deactivate_apps
.short_description = "Deactivate selected Apps"

admin
.site.register(App, AppAdmin)

Thanks in advance

Collin Anderson

unread,
Nov 5, 2014, 12:05:13 PM11/5/14
to django...@googlegroups.com
Hello,

Would it work to import AppAdmin, instantiate it, and then call the methods in a unit test?

Collin
 

Azam Alias

unread,
Nov 25, 2014, 9:14:24 PM11/25/14
to django...@googlegroups.com
Hi Collin,

I apologise for the late update. Didnt get any notifications from your reply.

I have solved this issue as per your suggestion. Pasting the solution for others' reference.

Thanks !

from django.test import TestCase
from django.contrib.admin.sites import AdminSite
from batch_apps.models import App
from batch_apps.admin import AppAdmin


class MockRequest(object):
   
pass

request
= MockRequest()


class AppAdminTest(TestCase):

   
def setUp(self):
       
self.app_admin = AppAdmin(App, AdminSite())

   
def test_activate_apps_should_activate_inactive_app(self):
        app1
= App.objects.create(name='Inactive App 001', is_active=False)
        queryset
= App.objects.filter(pk=1)
       
self.app_admin.activate_apps(request, queryset)
       
self.assertTrue(App.objects.get(pk=1).is_active)

   
def test_deactivate_apps_should_deactivate_active_app(self):
        app1
= App.objects.create(name='Active App 001', is_active=True)
        queryset
= App.objects.filter(pk=1)
       
self.app_admin.deactivate_apps(request, queryset)
       
self.assertFalse(App.objects.get(pk=1).is_active)
Reply all
Reply to author
Forward
0 new messages