Source code for scipost.tests.test_views

__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django.urls import reverse
from django.contrib.auth.models import Group
from django.test import TestCase, Client, tag

from common.helpers.test import add_groups_and_permissions

from commentaries.factories import UnvettedCommentaryFactory, CommentaryFactory,\
                                   UnpublishedCommentaryFactory
from commentaries.forms import CommentarySearchForm
from commentaries.models import Commentary

from ..factories import ContributorFactory


[docs]class RequestCommentaryTest(TestCase): """Test cases for `request_commentary` view method"""
[docs] def setUp(self): add_groups_and_permissions() self.contributor = ContributorFactory(user__username='Test', user__password='testpw') 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)
[docs] 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) # 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)
[docs] 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)
[docs]class VetCommentaryRequestsTest(TestCase): """Test cases for `vet_commentary_requests` view method"""
[docs] def setUp(self): add_groups_and_permissions() self.view_url = reverse('commentaries:vet_commentary_requests') self.login_url = reverse('scipost:login') self.password = 'test123' self.contributor = ContributorFactory(user__password=self.password)
[docs] 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)
[docs] 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) response = self.client.get(self.view_url) self.assertEquals(response.status_code, 403) # Right permissions group self.set_required_permissions_and_login() response = self.client.get(self.view_url) self.assertEquals(response.status_code, 200)
[docs] 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! CommentaryFactory() 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)
[docs]class BrowseCommentariesTest(TestCase): """Test cases for `browse` view."""
[docs] def setUp(self): add_groups_and_permissions() CommentaryFactory(discipline='physics') self.view_url = reverse('commentaries:browse', kwargs={ 'discipline': 'physics', 'nrweeksback': '1' })
[docs] def test_response_list(self): '''Test if the browse view is passing commentaries to anoymous users.''' response = self.client.get(self.view_url) self.assertEquals(response.status_code, 200) # The created vetted Commentary is found! self.assertTrue(response.context['commentary_list'].count() >= 1) # The search form is passed trough the view... self.assertTrue(type(response.context['form']) is CommentarySearchForm)
[docs]class CommentaryDetailTest(TestCase):
[docs] def setUp(self): add_groups_and_permissions() self.client = Client() self.commentary = UnpublishedCommentaryFactory() self.target = reverse( 'commentaries:commentary', kwargs={'arxiv_or_DOI_string': self.commentary.arxiv_or_DOI_string} )
[docs] def test_status_code_200(self): response = self.client.get(self.target) self.assertEqual(response.status_code, 200)