from django.core.urlresolvers import reverse from django.test import TestCase, Client from models import Notification from base.accounts import User class NotificationTestCase(TestCase): """ Helper base class for all the follow test cases. """ def setUp(self): self.new_notification = 'This is a new notification!' self.user = User.objects.create_superuser('admin@admin.com', 'testpassword') def tearDown(self): self.user.delete() class NotificationTest(NotificationTestCase): def login(self): response = self.client.post('/accounts/login/', { 'username': 'admin@admin.com', 'password': 'testpassword', }) self.assertEqual(response.status_code, 302) def test_add_new_notification(self): self.login() r = self.client.get('/sys/notificationadmin/') # Check that response is 200 OK self.assertEqual(r.status_code, 200) # now there are no notifications self.assertEqual(len(r.context['notes']), 0) # try add one notification r = self.client.post('/notification/add/', { 'message': self.new_notification, }) # Redirect only if it worked self.assertEqual(r.status_code, 302) # look up in database notifications = Notification.objects.all() self.assertEqual(notifications.count(), 1) # check this notification is not set primary, thus will not showed # in top bar n = Notification.objects.all()[0] self.assertFalse(n.primary) def test_set_primary(self): n = Notification() n.message = self.new_notification n.primary = False n.save() # set primary self.login() r = self.client.get(reverse('set_primary', args=[n.id]), {}) # Redirect only if it worked self.assertEqual(r.status_code, 302) # now check it's primary n = Notification.objects.all()[0] self.assertTrue(n.primary) # check it's showed in top bar r = self.client.get('/sys/notificationadmin/') self.assert_('This is a new notification!' in str(r)) # and it's still there when reach other pages r = self.client.get('/home/my/') self.assert_('This is a new notification!' in str(r)) def test_close_notification(self): n = Notification() n.message = self.new_notification n.primary = True n.save() self.login() r = self.client.get('/home/my/') self.assert_('This is a new notification!' in str(r)) # now close notification r = self.client.get(reverse('notification_close', args=[1]), {}) # Redirect only if it worked self.assertEqual(r.status_code, 302) # it's gone self.assert_('This is a new notification!' not in str(r)) # and it's gone when reach other pages r = self.client.get('/home/my/') self.assert_('This is a new notification!' not in str(r))