a few tests for partition pages
This commit is contained in:
parent
b2ce6629c8
commit
5e0495fb94
2 changed files with 82 additions and 0 deletions
0
partitions/tests/__init__.py
Normal file
0
partitions/tests/__init__.py
Normal file
82
partitions/tests/test_views.py
Normal file
82
partitions/tests/test_views.py
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.core.files import File
|
||||||
|
from django.template.defaultfilters import urlencode
|
||||||
|
from django.test import Client, TestCase
|
||||||
|
|
||||||
|
from gestion.models import ErnestoUser
|
||||||
|
from ..models import Partition, PartitionSet
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
|
def new_user(username, ernesto=False, chef=False):
|
||||||
|
u = User.objects.create_user(username=username)
|
||||||
|
ErnestoUser.objects.create(user=u, slug=username, is_chef=chef, is_ernesto=ernesto)
|
||||||
|
return u
|
||||||
|
|
||||||
|
|
||||||
|
class TestViews(TestCase):
|
||||||
|
# TODO: add tests for upload/deletions
|
||||||
|
# TODO: test forms
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
# User with different access level and their clients
|
||||||
|
chef = new_user("chef", ernesto=True, chef=True)
|
||||||
|
chef_c = Client()
|
||||||
|
chef_c.force_login(chef)
|
||||||
|
ernesto = new_user("ernesto", ernesto=True)
|
||||||
|
ernesto_c = Client()
|
||||||
|
ernesto_c.force_login(ernesto)
|
||||||
|
self.client_matrix = [
|
||||||
|
(chef, chef_c),
|
||||||
|
(ernesto, ernesto_c),
|
||||||
|
(None, Client())
|
||||||
|
]
|
||||||
|
# A Partition set with 1 partition
|
||||||
|
self.pset = PartitionSet.objects.create(nom="My PSet", auteur="PSet author")
|
||||||
|
file = File(open("media/test_file.txt"), "test file")
|
||||||
|
Partition.objects.create(nom="part1", part=file, morceau=self.pset)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
"""Remove dummy files from media/partitions/"""
|
||||||
|
for partition in self.pset.partition_set.all():
|
||||||
|
partition.delete()
|
||||||
|
|
||||||
|
def _get_restricted_page(self, url):
|
||||||
|
"""Shorthand for testing wether a page in only accessible by ernesto members"""
|
||||||
|
for user, client in self.client_matrix:
|
||||||
|
# If user is not None, it is an ernesto member
|
||||||
|
resp = client.get(url)
|
||||||
|
if user:
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
else:
|
||||||
|
encoded_url = urlencode(urlencode(url))
|
||||||
|
self.assertRedirects(resp, "/login?next={}".format(encoded_url))
|
||||||
|
|
||||||
|
def test_get_partition_sets(self):
|
||||||
|
"""The list of all partition sets can be fetched by everyone"""
|
||||||
|
for _, client in self.client_matrix:
|
||||||
|
resp = client.get("/partitions/")
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
|
def test_get_partitions(self):
|
||||||
|
"""Only ernesto members can see the partitions inside of a partition set"""
|
||||||
|
url = "/partitions/{}/{}".format(self.pset.nom, self.pset.auteur)
|
||||||
|
self._get_restricted_page(url)
|
||||||
|
|
||||||
|
def test_see(self):
|
||||||
|
"""Only ernesto members can see partitions"""
|
||||||
|
part = self.pset.partition_set.first()
|
||||||
|
url = "/partitions/{}/{}/see/{}".format(self.pset.nom, self.pset.auteur, part.id)
|
||||||
|
self._get_restricted_page(url)
|
||||||
|
|
||||||
|
def test_download(self):
|
||||||
|
"""Only ernesto members can download partitions"""
|
||||||
|
part = self.pset.partition_set.first()
|
||||||
|
url = "/partitions/{}/{}/{}".format(self.pset.nom, self.pset.auteur, part.id)
|
||||||
|
self._get_restricted_page(url)
|
||||||
|
|
||||||
|
def test_new(self):
|
||||||
|
"""Only ernesto members can create partiton sets"""
|
||||||
|
url = "/partitions/new"
|
||||||
|
self._get_restricted_page(url)
|
Loading…
Add table
Reference in a new issue