import pytest from django.core.files.uploadedfile import SimpleUploadedFile from django.db import IntegrityError from django.test import TestCase from django.utils.datastructures import MultiValueDict from pyblackbird_cc.resources.factories import ResourceModelFactory from pyblackbird_cc.resources.forms import ResourceCreateForm from pyblackbird_cc.resources.models import ResourceCategory from pyblackbird_cc.resources.models import ResourceType class ResourceCreateFormTest(TestCase): def setUp(self): self.resource_type = ResourceType.objects.create(name="Test Resource Type") self.resource_category = ResourceCategory.objects.create(name="Test Resource Category") self.form_data = { "name": "Test Resource", "description": "Test Description", "card_description": "Test Card Description", "resource_type": self.resource_type.id, "age_range": "Reception (4-5yrs)", "curriculum": "English", "feature_slot": 1, "main_resource_category": self.resource_category.id, } self.pdf_files = [ # use the correct PDF file header - this should pass validation SimpleUploadedFile( f"file{i}.pdf", b"\x25\x50\x44\x46\x2d", content_type="application/pdf", ) for i in range(11) ] self.thumbnail_files = [ # use the correct JPG file header - this should pass validation SimpleUploadedFile( f"thumbnail{i}.jpg", b"\xff\xd8\xff\xdb", content_type="image/jpeg", ) # 5 is the max number currently set in ALLOWED_THUMBNAILS for i in range(5) ] # This needs to be a MultiValueDict for the test to mimic production code # see clean_pdf_files - self.files.getlist() self.form_files = MultiValueDict( {"pdf_files": self.pdf_files, "thumbnail_files": self.thumbnail_files}, ) def test_form_valid(self): form = ResourceCreateForm(data=self.form_data, files=self.form_files) assert form.is_valid() @pytest.mark.django_db() def test_featured_slots_must_be_unique(self): r1 = ResourceModelFactory(feature_slot=1) with pytest.raises(IntegrityError): ResourceModelFactory(feature_slot=1) @pytest.mark.django_db() def test_featured_slots_allowable(self): form_data = { "name": "Test Resource", "description": "Test Description", "resource_type": self.resource_type.id, "age_range": "5-7", "curriculum": "English", "feature_slot": 4, "main_resource_category": self.resource_category.id, } form = ResourceCreateForm(data=form_data, files=self.form_files) assert not form.is_valid()