Skip to content
Snippets Groups Projects
tests.py 2.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • import json
    
    from django.test import TestCase
    
    from opentech.apply.categories.models import Option
    from opentech.apply.categories.tests.factories import CategoryFactory, OptionFactory
    
    from .widgets import CategoriesWidget
    
    
    class TestCategoriesWidget(TestCase):
        def setUp(self):
            self.category = CategoryFactory()
            self.options = OptionFactory.create_batch(3, category=self.category)
    
        def test_init_has_no_queries(self):
            with self.assertNumQueries(0):
                CategoriesWidget()
    
        def test_can_access_categories_and_options(self):
            widget = CategoriesWidget()
            widgets = list(widget.widgets)
            self.assertEqual(len(widgets), 1)
            choices = list(widgets[0].choices)
            self.assertEqual(len(choices), len(self.options))
            self.assertCountEqual(list(choices), list(Option.objects.values_list('id', 'value')))
    
        def test_can_get_multiple_categories(self):
            CategoryFactory()
            widget = CategoriesWidget()
            widgets = list(widget.widgets)
            self.assertEqual(len(widgets), 2)
    
        def test_can_decompress_data(self):
            widget = CategoriesWidget()
            value = json.dumps({
                self.category.id: [self.options[0].id]
            })
            self.assertEqual(widget.decompress(value), [[self.options[0].id]])
    
        def test_can_decompress_multiple_data(self):
            new_category = CategoryFactory()
            widget = CategoriesWidget()
            value = json.dumps({
                self.category.id: [self.options[0].id],
                new_category.id: [],
            })
            self.assertEqual(widget.decompress(value), [[self.options[0].id], []])
    
        def test_can_get_data_from_form(self):
            name = 'categories'
            widget = CategoriesWidget()
            submitted_data = {
                name + '_0': [self.options[1].id],
            }
    
            value = widget.value_from_datadict(submitted_data, [], name)
    
            self.assertEqual(value, json.dumps({self.category.id: [self.options[1].id]}))
    
        def test_can_get_multiple_data_from_form(self):
            new_category = CategoryFactory()
            new_options = OptionFactory.create_batch(3, category=new_category)
    
            name = 'categories'
            widget = CategoriesWidget()
            answer_1 = [self.options[1].id]
            answer_2 = [new_options[1].id, new_options[2].id]
            submitted_data = {
                name + '_0': answer_1,
                name + '_1': answer_2,
            }
    
            value = widget.value_from_datadict(submitted_data, [], name)
    
            self.assertEqual(
                value,
                json.dumps({
                    self.category.id: answer_1,
                    new_category.id: answer_2,
                })
            )