aboutsummaryrefslogblamecommitdiffstats
path: root/alphabetlearning/resources/tests/test_forms.py
blob: aebc11034c5f5bc7306e3a3f79b42c2807260baa (plain) (tree)
1
2
3
4
5
6
7
8
9
10
             
                                                             
                                    
                                
                                                      
 



                                                                     

 



                                                                                               


                                              
                                                        
                                                   
                                              




                                                                





                                                                           

                              
                                
                                                                           

                                    
                                    

                                          

                                                                     
         




                                                                                   
 
                              
                                                                             



















                                                                        
                                  
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 alphabetlearning.resources.factories import ResourceModelFactory
from alphabetlearning.resources.forms import ResourceCreateForm
from alphabetlearning.resources.models import ResourceCategory
from alphabetlearning.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()