ernestophone.ens.fr/pads/tests.py
2020-01-09 18:05:18 +01:00

184 lines
5.8 KiB
Python

from django.contrib.auth import get_user_model
from django.test import Client, TestCase
from django.urls import reverse, reverse_lazy
from django.utils import timezone
from gestion.models import ErnestoUser
from pads.models import Pad
User = get_user_model()
def new_user(username):
u = User.objects.create_user(username=username)
ErnestoUser.objects.create(user=u, slug=username, is_ernesto=True)
return u
class PadListTest(TestCase):
url = reverse_lazy("pads:list")
def setUp(self):
for name in ["foo", "bar", "baz"]:
Pad.objects.create(
nom=name, url="example.com/{}".format(name), date=timezone.now()
)
def test_anonymous_cannot_get(self):
response = Client().get(self.url)
self.assertRedirects(response, "/login?next={}".format(self.url))
def test_ernesto_user_can_get(self):
client = Client()
client.force_login(new_user("toto"))
response = client.get(self.url)
self.assertEqual(response.status_code, 200)
class PadCreateTest(TestCase):
url = reverse_lazy("pads:add")
def test_anonymous_cannot_get(self):
response = Client().get(self.url)
self.assertRedirects(response, "/login?next={}".format(self.url))
def test_anonymous_cannot_post(self):
response = Client().post(self.url, {"nom": "foo", "url": "http://example.com"})
self.assertRedirects(response, "/login?next={}".format(self.url))
def test_ernesto_cannot_get(self):
client = Client()
client.force_login(new_user("toto"))
response = client.get(self.url)
self.assertEqual(response.status_code, 403)
def test_ernesto_cannot_post(self):
client = Client()
client.force_login(new_user("toto"))
response = client.post(self.url, {"nom": "foo", "url": "http://example.com"})
self.assertEqual(response.status_code, 403)
def test_chef_can_get(self):
user = new_user("toto")
user.profile.is_chef = True
user.profile.save()
client = Client()
client.force_login(user)
response = client.get(self.url)
self.assertEqual(response.status_code, 200)
def test_chef_can_post(self):
user = new_user("toto")
user.profile.is_chef = True
user.profile.save()
client = Client()
client.force_login(user)
client.post(self.url, {"nom": "foo", "url": "http://example.com"})
pads = Pad.objects.all()
self.assertEqual(pads.count(), 1)
pad = pads.get()
self.assertEqual(pad.nom, "foo")
self.assertEqual(pad.url, "http://example.com")
class PadUpdateTest(TestCase):
def setUp(self):
pad = Pad.objects.create(
nom="bar", url="http://djangoproject.com", date=timezone.now()
)
self.url = reverse("pads:edit", args=(pad.id,))
def test_anonymous_cannot_get(self):
response = Client().get(self.url)
self.assertRedirects(response, "/login?next={}".format(self.url))
def test_anonymous_cannot_post(self):
response = Client().post(self.url, {"nom": "foo", "url": "http://example.com"})
self.assertRedirects(response, "/login?next={}".format(self.url))
def test_ernesto_cannot_get(self):
client = Client()
client.force_login(new_user("toto"))
response = client.get(self.url)
self.assertEqual(response.status_code, 403)
def test_ernesto_cannot_post(self):
client = Client()
client.force_login(new_user("toto"))
response = client.post(self.url, {"nom": "foo", "url": "http://example.com"})
self.assertEqual(response.status_code, 403)
def test_chef_can_get(self):
user = new_user("toto")
user.profile.is_chef = True
user.profile.save()
client = Client()
client.force_login(user)
response = client.get(self.url)
self.assertEqual(response.status_code, 200)
def test_chef_can_post(self):
user = new_user("toto")
user.profile.is_chef = True
user.profile.save()
client = Client()
client.force_login(user)
client.post(self.url, {"nom": "foo", "url": "http://example.com"})
pads = Pad.objects.all()
self.assertEqual(pads.count(), 1)
pad = pads.get()
self.assertEqual(pad.nom, "foo")
self.assertEqual(pad.url, "http://example.com")
class PadDeleteTest(TestCase):
def setUp(self):
pad = Pad.objects.create(
nom="bar", url="http://djangoproject.com", date=timezone.now()
)
self.url = reverse("pads:delete", args=(pad.id,))
def test_anonymous_cannot_get(self):
response = Client().get(self.url)
self.assertRedirects(response, "/login?next={}".format(self.url))
def test_anonymous_cannot_post(self):
response = Client().post(self.url, {})
self.assertRedirects(response, "/login?next={}".format(self.url))
def test_ernesto_cannot_get(self):
client = Client()
client.force_login(new_user("toto"))
response = client.get(self.url)
self.assertEqual(response.status_code, 403)
def test_ernesto_cannot_post(self):
client = Client()
client.force_login(new_user("toto"))
response = client.post(self.url, {})
self.assertEqual(response.status_code, 403)
def test_chef_can_get(self):
user = new_user("toto")
user.profile.is_chef = True
user.profile.save()
client = Client()
client.force_login(user)
response = client.get(self.url)
self.assertEqual(response.status_code, 200)
def test_chef_can_post(self):
user = new_user("toto")
user.profile.is_chef = True
user.profile.save()
client = Client()
client.force_login(user)
client.post(self.url, {})
self.assertFalse(Pad.objects.exists())