from django.core.urlresolvers import reverse from misago.acl.testutils import override_acl from misago.categories.models import Category from misago.users.testutils import AuthenticatedUserTestCase from misago.threads.models import Thread, Event from misago.threads.testutils import post_thread, reply_thread class EventsViewTestCase(AuthenticatedUserTestCase): ajax_header = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'} def setUp(self): super(EventsViewTestCase, self).setUp() self.category = Category.objects.all_categories().filter(role='forum')[:1][0] self.category.labels = [] self.thread = post_thread(self.category) def override_acl(self, new_acl): new_acl.update({ 'can_see': True, 'can_browse': True, 'can_see_all_threads': True, 'can_see_own_threads': False, 'can_pin_threads': True }) categories_acl = self.user.acl categories_acl['visible_categories'].append(self.category.pk) categories_acl['categories'][self.category.pk] = new_acl override_acl(self.user, categories_acl) def test_hide_event(self): """its possible to hide event""" self.override_acl({'can_hide_events': 0}) response = self.client.post(self.thread.get_absolute_url(), data={'thread_action': 'pin'}) self.assertEqual(response.status_code, 302) event = self.thread.event_set.all()[0] self.override_acl({'can_hide_events': 0}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'toggle'}, **self.ajax_header) self.assertEqual(response.status_code, 403) self.override_acl({'can_hide_events': 1}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'toggle'}, **self.ajax_header) self.assertEqual(response.status_code, 200) event = Event.objects.get(id=event.id) self.assertTrue(event.is_hidden) def test_show_event(self): """its possible to unhide event""" self.override_acl({'can_hide_events': 0}) response = self.client.post(self.thread.get_absolute_url(), data={'thread_action': 'pin'}) self.assertEqual(response.status_code, 302) event = self.thread.event_set.all()[0] event.is_hidden = True event.save() self.override_acl({'can_hide_events': 0}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'toggle'}, **self.ajax_header) self.assertEqual(response.status_code, 403) self.override_acl({'can_hide_events': 1}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'toggle'}, **self.ajax_header) self.assertEqual(response.status_code, 200) event = Event.objects.get(id=event.id) self.assertFalse(event.is_hidden) def test_delete_event(self): """its possible to delete event""" self.override_acl({'can_hide_events': 0}) response = self.client.post(self.thread.get_absolute_url(), data={'thread_action': 'pin'}) self.assertEqual(response.status_code, 302) self.override_acl({'can_hide_events': 0}) response = self.client.post(self.thread.get_absolute_url(), data={'thread_action': 'unpin'}) self.assertEqual(response.status_code, 302) event = self.thread.event_set.all()[0] self.override_acl({'can_hide_events': 0}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'delete'}, **self.ajax_header) self.assertEqual(response.status_code, 403) self.override_acl({'can_hide_events': 1}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'delete'}, **self.ajax_header) self.assertEqual(response.status_code, 403) self.override_acl({'can_hide_events': 2}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'delete'}, **self.ajax_header) self.assertEqual(response.status_code, 200) thread = Thread.objects.get(id=self.thread.id) self.assertTrue(thread.has_events) self.assertTrue(thread.event_set.exists()) event = self.thread.event_set.all()[0] self.override_acl({'can_hide_events': 2}) response = self.client.post( reverse('misago:edit_event', kwargs={'event_id': event.id}), data={'action': 'delete'}, **self.ajax_header) self.assertEqual(response.status_code, 200) thread = Thread.objects.get(id=self.thread.id) self.assertFalse(thread.has_events) self.assertFalse(thread.event_set.exists())