def test_notifications_created(self): """Notifications are created for those that want them.""" pending = Announcement.AnnouncementStatus.PENDING announcement = AnnouncementFactory(status=pending) site = Site.objects.get_current() url = f"http://{site}{announcement.url}" responses.add(responses.GET, url, status=200) user = UserFactory(is_staff=True, is_superuser=True) # Skip users that don't want it. non_announced_user = UserFactory() non_announced_user.profile.wants_announcements = False non_announced_user.profile.save() # Skip canceled users. canceled_user = UserFactory() canceled = Account.AccountStatus.CANCELED Account.objects.filter(user=canceled_user).update(status=canceled) data = { "action": "announce", ACTION_CHECKBOX_NAME: str(announcement.id) } with self.login(user): self.post(self.list_url, data=data) assert Notification.objects.filter( announcement=announcement).count() == 1 notification = Notification.objects.filter( announcement=announcement).first() assert notification.user == user
def test_hijack_user(self): """A superuser can hijack another user.""" hijacked = UserFactory() user = UserFactory(is_staff=True, is_superuser=True) data = { "action": "hijack_user", ACTION_CHECKBOX_NAME: str(hijacked.id) } with self.login(user): response = self.post("admin:users_user_changelist", data=data) self.response_302(response) assert response.get("Location") == self.reverse("core:app")
def test_staff(self): """A staff user can trigger the error page.""" user = UserFactory(is_staff=True) with self.login(user), pytest.raises(Exception) as excinfo: self.get("boom") assert str(excinfo.value) == "Is this thing on?"
def test_multiple_user_hijack_attempt(self): """A superuser may not hijack multiple users simultaneously.""" hijacked = UserFactory() other = UserFactory() user = UserFactory(is_staff=True, is_superuser=True) data = { "action": "hijack_user", ACTION_CHECKBOX_NAME: [str(hijacked.id), str(other.id)], } with self.login(user): response = self.post("admin:users_user_changelist", data=data) self.response_302(response) assert response.get("Location") == self.reverse( "admin:users_user_changelist")
def test_announce_only_pending(self): """Only pending announcements can be announced.""" announced = Announcement.AnnouncementStatus.ANNOUNCED announcement = AnnouncementFactory(status=announced) user = UserFactory(is_staff=True, is_superuser=True) data = { "action": "announce", ACTION_CHECKBOX_NAME: str(announcement.id) } with self.login(user): response = self.post(self.list_url, data=data) message = list(get_messages(response.wsgi_request))[0] assert str(message) == "That announcement is already announced."
def test_announcement_announced(self): """An announcement is marked as announced.""" pending = Announcement.AnnouncementStatus.PENDING announcement = AnnouncementFactory(status=pending) site = Site.objects.get_current() url = f"http://{site}{announcement.url}" responses.add(responses.GET, url, status=200) user = UserFactory(is_staff=True, is_superuser=True) data = { "action": "announce", ACTION_CHECKBOX_NAME: str(announcement.id) } with self.login(user): self.post(self.list_url, data=data) announcement.refresh_from_db() assert announcement.status == Announcement.AnnouncementStatus.ANNOUNCED
def test_check_for_invalid_url(self): """The URL is checked to be valid and rejected when bad.""" pending = Announcement.AnnouncementStatus.PENDING announcement = AnnouncementFactory(status=pending) site = Site.objects.get_current() url = f"http://{site}{announcement.url}" responses.add(responses.GET, url, status=404) user = UserFactory(is_staff=True, is_superuser=True) data = { "action": "announce", ACTION_CHECKBOX_NAME: str(announcement.id) } with self.login(user): response = self.post(self.list_url, data=data) message = list(get_messages(response.wsgi_request))[0] assert str(message) == "The announcement URL was a non-200 response." self.response_302(response) assert response.get("Location") == self.reverse( "admin:notifications_announcement_changelist")
def test_single_announcement(self): """Only one announcement can be announced.""" pending = Announcement.AnnouncementStatus.PENDING announcement = AnnouncementFactory(status=pending) other_announcement = AnnouncementFactory(status=pending) user = UserFactory(is_staff=True, is_superuser=True) data = { "action": "announce", ACTION_CHECKBOX_NAME: [str(announcement.id), str(other_announcement.id)], } with self.login(user): response = self.post(self.list_url, data=data) message = list(get_messages(response.wsgi_request))[0] assert str(message) == "Select one." self.response_302(response) assert response.get("Location") == self.reverse( "admin:notifications_announcement_changelist")
def test_staff(self): """A staff user can access the page.""" user = UserFactory(is_staff=True) with self.login(user): self.get_check_200("office:social_image")