Élie Bouttier 8 years ago
parent
commit
cc3411cebe
2 changed files with 136 additions and 12 deletions
  1. 26 4
      adhesions/tests.py
  2. 110 8
      services/tests.py

+ 26 - 4
adhesions/tests.py

@@ -102,17 +102,39 @@ class AdhesionsTests(TestCase):
         self.assertEquals(adh2.get_adherent_name(), 'GoodCorp')
 
     def test_user_creation(self):
+        url = reverse('user-add')
         self.client.login(username='user', password='user')
-        # TODO
+        response = self.client.get(url)
+        self.assertRedirects(response, reverse('login') + '?next=' + url)
+        self.client.login(username='admin', password='admin')
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, 200)
 
     def test_user_update(self):
+        user = User.objects.get(username='user')
+        url = reverse('user-edit', kwargs={'pk': user.pk})
         self.client.login(username='user', password='user')
-        # TODO
+        response = self.client.get(url)
+        self.assertRedirects(response, reverse('login') + '?next=' + url)
+        self.client.login(username='admin', password='admin')
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, 200)
 
     def test_corp_creation(self):
+        url = reverse('corporation-add')
         self.client.login(username='user', password='user')
-        # TODO
+        response = self.client.get(url)
+        self.assertRedirects(response, reverse('login') + '?next=' + url)
+        self.client.login(username='admin', password='admin')
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, 200)
 
     def test_corp_update(self):
+        corp = Corporation.objects.get(social_reason='EvilCorp')
+        url = reverse('corporation-edit', kwargs={'pk': corp.pk})
         self.client.login(username='user', password='user')
-        # TODO
+        response = self.client.get(url)
+        self.assertRedirects(response, reverse('login') + '?next=' + url)
+        self.client.login(username='admin', password='admin')
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, 200)

+ 110 - 8
services/tests.py

@@ -2,24 +2,126 @@ from django.contrib.auth.models import User
 from django.core.urlresolvers import reverse
 from django.test import TestCase
 from django.contrib.contenttypes.models import ContentType
+from django.utils import timezone
 
-from adhesions.models import Adhesion
-from .models import Service, ServiceType
+from adhesions.models import Adhesion, Corporation
+from .models import Service, ServiceType, IPResource, ResourceAllocation
 
 
 class ServicesTests(TestCase):
     def setUp(self):
-        user = User.objects.create_user('user', email='user@example.net', password='user')
-        user = User.objects.create_user('admin', email='admin@example.net', password='admin', is_superuser=True)
-        adhesion = Adhesion.objects.create(adherent_type=ContentType.objects.get_for_model(user), adherent_id=user.pk)
+        user_ct = ContentType.objects.get_for_model(User)
+        corp_ct = ContentType.objects.get_for_model(Corporation)
+        user1 = User.objects.create_user('user1', email='user1@example.net', password='user1')
+        adh_u1 = Adhesion.objects.create(adherent_type=user_ct, adherent_id=user1.pk)
+        corp1 = Corporation.objects.create(social_reason='Corp 1')
+        corp1.members.add(user1)
+        adh_c1 = Adhesion.objects.create(adherent_type=corp_ct, adherent_id=corp1.pk)
+        user2 = User.objects.create_user('user2', email='user2@example.net', password='user2', is_superuser=True)
+        adh_u2 = Adhesion.objects.create(adherent_type=user_ct, adherent_id=user2.pk)
+        corp2 = Corporation.objects.create(social_reason='Corp 2')
+        corp2.members.add(user2)
+        adh_c2 = Adhesion.objects.create(adherent_type=corp_ct, adherent_id=corp2.pk)
         stype = ServiceType.objects.create(name='VM')
-        s1 = Service.objects.create(adhesion=adhesion, service_type=stype, label='Service 1')
+        s1 = Service.objects.create(adhesion=adh_u1, service_type=stype, label='Service 1')
+        s2 = Service.objects.create(adhesion=adh_u2, service_type=stype, label='Service 2')
+        s3 = Service.objects.create(adhesion=adh_c1, service_type=stype, label='Service 3')
+        s4 = Service.objects.create(adhesion=adh_c2, service_type=stype, label='Service 4')
+        ip1 = IPResource.objects.create(ip='91.224.148.1')
+        ResourceAllocation.objects.create(resource=ip1, service=s1, start=timezone.now())
+        ip2 = IPResource.objects.create(ip='91.224.148.2')
+        ip3 = IPResource.objects.create(ip='91.224.148.3', mask=32)
+
+    def test_home_service_list(self):
+        self.client.login(username='user1', password='user1')
+        response = self.client.get(reverse('user'))
+        self.assertContains(response, 'Service 1')
+        self.assertNotContains(response, 'Service 2')
+        self.assertNotContains(response, 'Service 3')
+        self.assertNotContains(response, 'Service 4')
 
     def test_service_list(self):
-        self.client.login(username='user', password='user')
+        self.client.login(username='user1', password='user1')
         response = self.client.get(reverse('service-list'))
         self.assertRedirects(response, reverse('login') + '?next=' + reverse('service-list'))
-        self.client.login(username='admin', password='admin')
+        self.client.login(username='user2', password='user2')
         response = self.client.get(reverse('service-list'))
         self.assertEqual(response.status_code, 200)
         self.assertContains(response, 'Service 1')
+        self.assertContains(response, 'Service 2')
+        self.assertContains(response, 'Service 3')
+        self.assertContains(response, 'Service 4')
+
+    def test_service_detail(self):
+        s1 = Service.objects.get(label='Service 1')
+        s2 = Service.objects.get(label='Service 2')
+        s3 = Service.objects.get(label='Service 3')
+        s4 = Service.objects.get(label='Service 4')
+        # L’utilisateur lambda n’a accès qu’aux services 1 et 3
+        self.client.login(username='user1', password='user1')
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s1.pk}))
+        self.assertEqual(response.status_code, 200)
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s2.pk}))
+        self.assertEqual(response.status_code, 404)
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s3.pk}))
+        self.assertEqual(response.status_code, 200)
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s4.pk}))
+        self.assertEqual(response.status_code, 404)
+        # L’admin a accès à tous les services
+        self.client.login(username='user2', password='user2')
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s1.pk}))
+        self.assertEqual(response.status_code, 200)
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s2.pk}))
+        self.assertEqual(response.status_code, 200)
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s3.pk}))
+        self.assertEqual(response.status_code, 200)
+        response = self.client.get(reverse('service-detail', kwargs={'pk': s4.pk}))
+        self.assertEqual(response.status_code, 200)
+
+    def test_ipresource_allocate(self):
+        ip1 = IPResource.objects.get(ip='91.224.148.1')
+        url1 = reverse('ip-allocate', kwargs={'pk': ip1.pk})
+        ip2 = IPResource.objects.get(ip='91.224.148.2')
+        url2 = reverse('ip-allocate', kwargs={'pk': ip2.pk})
+        self.client.login(username='user1', password='user1')
+        response = self.client.get(url1)
+        self.assertRedirects(response, reverse('login') + '?next=' + url1)
+        self.client.login(username='user2', password='user2')
+        response = self.client.get(url1)
+        self.assertEqual(response.status_code, 410)
+        response = self.client.get(url2)
+        self.assertEqual(response.status_code, 200)
+
+    def test_service_allocate(self):
+        s1 = Service.objects.get(label='Service 1')
+        url = reverse('service-allocate', kwargs={'pk': s1.pk})
+        self.client.login(username='user1', password='user1')
+        response = self.client.get(url)
+        self.assertRedirects(response, reverse('login') + '?next=' + url)
+        self.client.login(username='user2', password='user2')
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, 200)
+        self.assertNotContains(response, '91.224.148.1') # in use
+        self.assertContains(response, '91.224.148.2')
+        self.assertContains(response, '91.224.148.3')
+
+    def test_deallocate(self):
+        ip1 = IPResource.objects.get(ip='91.224.148.1')
+        ip2 = IPResource.objects.get(ip='91.224.148.2')
+        allocation = ResourceAllocation.objects.get(resource=ip1)
+        self.assertTrue(ip1.in_use)
+        self.assertFalse(ip2.in_use)
+        self.assertTrue(allocation.active)
+        url = reverse('deallocate', kwargs={'pk': allocation.pk})
+        self.client.login(username='user1', password='user1')
+        response = self.client.get(url)
+        self.assertRedirects(response, reverse('login') + '?next=' + url)
+        self.client.login(username='user2', password='user2')
+        response = self.client.get(url)
+        self.assertEqual(response.status_code, 405)
+        response = self.client.post(url)
+        self.assertRedirects(response, reverse('ip-detail', kwargs={'pk': ip1.pk}))
+        self.assertFalse(ip1.in_use)
+        self.assertFalse(allocation.active)
+        response = self.client.post(url)
+        self.assertEqual(response.status_code, 403)