Skip to content
Snippets Groups Projects
Commit 7ade89e1 authored by florimondmanca's avatar florimondmanca
Browse files

add tests for read actions on projects app

parent bddaec75
Branches
No related tags found
No related merge requests found
......@@ -3,14 +3,15 @@
import factory
import factory.django
from . import models
from users.factory import UserFactory
from .models import Project, Edition, Participation
class ProjectFactory(factory.DjangoModelFactory):
"""Project object factory."""
class Meta: # noqa
model = models.Project
model = Project
exclude = ('_description',)
name = factory.Faker('company')
......@@ -23,8 +24,29 @@ class EditionFactory(factory.DjangoModelFactory):
"""Edition object factory."""
class Meta: # noqa
model = models.Edition
model = Edition
exclude = ('_description',)
_description = factory.Faker('sentences', locale='fr')
description = factory.LazyAttribute(lambda o: '\n'.join(o._description))
@factory.lazy_attribute
def project(self):
"""Return an existing project or a new one if none exists."""
project = Project.objects.first()
return project and project or ProjectFactory.create()
class ParticipationFactory(factory.DjangoModelFactory):
"""Participation object factory."""
class Meta: # noqa
model = Participation
user = factory.SubFactory(UserFactory)
@factory.lazy_attribute
def edition(self):
"""Return an existing edition or a new one if none exists."""
edition = Edition.objects.first()
return edition and edition or EditionFactory.create()
"""Editions API tests."""
from rest_framework import status
from tests.utils import SimpleAPITestCase
from projects.factory import EditionFactory
class EditionEndpointsTest(SimpleAPITestCase):
"""Test access to the editions endpoints."""
factory = EditionFactory
read_expected_fields = {'id', 'url', 'name', 'year', 'project',
'description', 'organizers', 'participations'}
def setUp(self):
self.factory.create_batch(3)
def perform_list(self):
url = '/api/editions/'
response = self.client.get(url)
return response
def perform_retrieve(self, obj=None):
if obj is None:
obj = self.factory.create()
url = '/api/editions/{obj.pk}/'.format(obj=obj)
response = self.client.get(url)
return response
def test_list_returns_expected_fields(self):
response = self.perform_list()
self.assertEqual(response.status_code, status.HTTP_200_OK)
fields = set(response.data[0])
self.assertSetEqual(fields, self.read_expected_fields)
def test_retrieve_returns_expected_fields(self):
response = self.perform_retrieve()
self.assertEqual(response.status_code, status.HTTP_200_OK)
fields = set(response.data)
self.assertSetEqual(fields, self.read_expected_fields)
"""Projects participations API tests."""
from rest_framework import status
from tests.utils import SimpleAPITestCase
from projects.factory import ParticipationFactory
class ParticipationReadTest(SimpleAPITestCase):
"""Test access to the editions read endpoints."""
factory = ParticipationFactory
read_expected_fields = {'id', 'user', 'edition',
'state', 'submitted'}
def setUp(self):
self.factory.create_batch(3)
def perform_list(self):
url = '/api/project-participations/'
response = self.client.get(url)
return response
def perform_retrieve(self, obj=None):
if obj is None:
obj = self.factory.create()
url = '/api/project-participations/{obj.pk}/'.format(obj=obj)
response = self.client.get(url)
return response
def test_list_returns_expected_fields(self):
response = self.perform_list()
self.assertEqual(response.status_code, status.HTTP_200_OK)
fields = set(response.data[0])
self.assertSetEqual(fields, self.read_expected_fields)
def test_retrieve_returns_expected_fields(self):
response = self.perform_retrieve()
self.assertEqual(response.status_code, status.HTTP_200_OK)
fields = set(response.data)
self.assertSetEqual(fields, self.read_expected_fields)
"""Project API tests."""
from rest_framework import status
from tests.utils import SimpleAPITestCase
from projects.factory import ProjectFactory
class ProjectEndpointsTest(SimpleAPITestCase):
"""Test access to the projects endpoints."""
factory = ProjectFactory
def setUp(self):
self.factory.create_batch(3)
def perform_list(self):
url = '/api/projects/'
response = self.client.get(url)
return response
def perform_retrieve(self, obj=None):
if obj is None:
obj = self.factory.create()
url = '/api/projects/{obj.pk}/'.format(obj=obj)
response = self.client.get(url)
return response
def test_list_returns_expected_fields(self):
expected = {'id', 'url', 'name', 'logo', 'description'}
response = self.perform_list()
self.assertEqual(response.status_code, status.HTTP_200_OK)
fields = set(response.data[0])
self.assertSetEqual(fields, expected)
def test_retrieve_returns_expected_fields(self):
expected = {'id', 'url', 'name', 'logo', 'description'}
response = self.perform_retrieve()
self.assertEqual(response.status_code, status.HTTP_200_OK)
fields = set(response.data)
self.assertSetEqual(fields, expected)
......@@ -7,5 +7,5 @@ from projects.utils import this_year
class ThisYearTest(TestCase):
"""Test the this_year() function."""
def test_is_integer(self):
def test_returns_int(self):
self.assertIsInstance(this_year(), int)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment