Exemple #1
0
    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
Exemple #2
0
    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")
Exemple #3
0
    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?"
Exemple #4
0
    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")
Exemple #5
0
    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."
Exemple #6
0
    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
Exemple #7
0
    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")
Exemple #8
0
    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")
Exemple #9
0
    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")