SciPost Code Repository

Skip to content
Snippets Groups Projects
test_views.py 3.51 KiB
Newer Older
from django.core.urlresolvers import reverse
from django.contrib.auth.models import Group
from django.test import TestCase
from scipost.factories import ContributorFactory

from .factories import UnVettedCommentaryFactory, VettedCommentaryFactory
from .models import Commentary
class RequestCommentaryTest(TestCase):
    """Test cases for `request_commentary` view method"""
Jorran de Wit's avatar
Jorran de Wit committed
    fixtures = ['permissions', 'groups', 'contributors']

    def setUp(self):
Jorran de Wit's avatar
Jorran de Wit committed
        self.view_url = reverse('commentaries:request_commentary')
        self.login_url = reverse('scipost:login')
        self.redirected_login_url = '%s?next=%s' % (self.login_url, self.view_url)
Jorran de Wit's avatar
Jorran de Wit committed
    def test_get_requests(self):
        """Test different GET requests on view"""
        # Anoymous user should redirect to login page
        request = self.client.get(self.view_url)
        self.assertRedirects(request, self.redirected_login_url)
Jorran de Wit's avatar
Jorran de Wit committed
        # Registered Contributor should get 200
        self.client.login(username="Test", password="testpw")
        request = self.client.get(self.view_url)
        self.assertEquals(request.status_code, 200)

    def test_post_invalid_forms(self):
        """Test different kind of invalid RequestCommentaryForm submits"""
        self.client.login(username="Test", password="testpw")
        request = self.client.post(self.view_url)
        self.assertEquals(request.status_code, 200)


class VetCommentaryRequestsTest(TestCase):
    """Test cases for `vet_commentary_requests` view method"""
    fixtures = ['groups', 'permissions']

    def setUp(self):
        self.view_url = reverse('commentaries:vet_commentary_requests')
        self.login_url = reverse('scipost:login')
        self.password = 'test123'
        self.contributor = ContributorFactory(user__password=self.password)
    def set_required_permissions_and_login(self):
        '''Set the required permissions to testuser to access vet_commentary_requests.'''
        group = Group.objects.get(name="Vetting Editors")
        self.contributor.user.groups.add(group)
        self.client.login(username=self.contributor.user.username, password=self.password)

    def test_user_permissions(self):
        """Test view permission is restricted to Vetting Editors."""
        # Anoymous user
        response = self.client.get(self.view_url)
        self.assertEquals(response.status_code, 403)

        # Wrong permissions group
        self.client.login(username=self.contributor.user.username, password=self.password)
Jorran de Wit's avatar
Jorran de Wit committed
        response = self.client.get(self.view_url)
        self.assertEquals(response.status_code, 403)
        # Right permissions group
        self.set_required_permissions_and_login()
Jorran de Wit's avatar
Jorran de Wit committed
        response = self.client.get(self.view_url)
        self.assertEquals(response.status_code, 200)
    def test_get_valid_unvetted_commentaries(self):
        """Test if valid commentaries are sent back to user, if exists."""
        self.set_required_permissions_and_login()

        # No Commentary exists!
        response = self.client.get(self.view_url)
        self.assertTrue('commentary_to_vet' in response.context)
        self.assertEquals(response.context['commentary_to_vet'], None)

        # Only vetted Commentaries exist!
        VettedCommentaryFactory()
        response = self.client.get(self.view_url)
        self.assertEquals(response.context['commentary_to_vet'], None)

        # Unvetted Commentaries do exist!
        UnVettedCommentaryFactory()
        response = self.client.get(self.view_url)
        self.assertTrue(type(response.context['commentary_to_vet']) is Commentary)