ernestophone.ens.fr/partitions/tests/test_views.py

102 lines
3.3 KiB
Python
Raw Normal View History

2018-01-05 13:57:40 +01:00
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
2018-05-01 12:44:34 +02:00
from ..models import Category, Partition, PartitionSet
2018-01-05 13:57:40 +01:00
User = get_user_model()
def new_user(username, ernesto=False, chef=False):
u = User.objects.create_user(username=username)
2018-05-01 12:44:34 +02:00
ErnestoUser.objects.create(
user=u,
slug=username,
is_chef=chef,
is_ernesto=ernesto
)
2018-01-05 13:57:40 +01:00
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
2018-05-01 12:44:34 +02:00
self.pset = PartitionSet.objects.create(
category=Category.objects.first(),
nom="My PSet",
auteur="PSet author"
)
2018-01-05 13:57:40 +01:00
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):
2018-05-01 12:44:34 +02:00
"""
Shorthand for testing wether a page in only accessible by ernesto
members
"""
2018-01-05 13:57:40 +01:00
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))
2018-05-01 12:44:34 +02:00
redirection_url = "/login?next={}".format(encoded_url)
self.assertRedirects(resp, redirection_url)
2018-01-05 13:57:40 +01:00
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):
2018-05-01 12:44:34 +02:00
"""
Only ernesto members can see the partitions inside of a partition set
"""
2018-01-05 13:57:40 +01:00
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()
2018-05-01 12:44:34 +02:00
url = "/partitions/{}/{}/see/{}".format(
self.pset.nom, self.pset.auteur, part.id
)
2018-01-05 13:57:40 +01:00
self._get_restricted_page(url)
def test_download(self):
"""Only ernesto members can download partitions"""
part = self.pset.partition_set.first()
2018-05-01 12:44:34 +02:00
url = "/partitions/{}/{}/{}".format(
self.pset.nom, self.pset.auteur, part.id
)
2018-01-05 13:57:40 +01:00
self._get_restricted_page(url)
def test_new(self):
"""Only ernesto members can create partiton sets"""
url = "/partitions/new"
self._get_restricted_page(url)