def test_render_single(self): widget = self.get_widget_instance() val = 4 rendered_value = widget.render('field_name', val) inputs = parsed_inputs(rendered_value) field = inputs['field_name_1'][0] self.assertEqual(field.attributes['data-selectable-type'].value, 'hidden-multiple') self.assertEqual(field.attributes['type'].value, 'hidden') self.assertEqual(field.attributes['value'].value, str(val))
def test_render_list(self): widget = self.get_widget_instance() list_val = [8, 5] rendered_value = widget.render('field_name', list_val) inputs = parsed_inputs(rendered_value) found_values = [] for field in inputs['field_name_1']: self.assertEqual(field.attributes['data-selectable-type'].value, 'hidden-multiple') self.assertEqual(field.attributes['type'].value, 'hidden') found_values.append(int(field.attributes['value'].value)) self.assertListEqual(found_values, list_val)
def test_populate_from_model(self): "Populate from existing model." other_thing = OtherThing.objects.create(thing=self.test_thing, name="a") form = OtherThingForm(instance=other_thing) rendered_form = form.as_p() inputs = parsed_inputs(rendered_form) # Selected text should be populated thing_0 = inputs["thing_0"][0] self.assertEqual(thing_0.attributes["value"].value, self.test_thing.name) # Selected pk should be populated thing_1 = inputs["thing_1"][0] self.assertEqual(int(thing_1.attributes["value"].value), self.test_thing.pk)
def test_render_qs(self): widget = self.get_widget_instance() t1 = self.create_thing() t2 = self.create_thing() qs_val = Thing.objects.filter(pk__in=[t1.pk, t2.pk]).values_list('pk', flat=True) rendered_value = widget.render('field_name', qs_val) inputs = parsed_inputs(rendered_value) found_values = [] for field in inputs['field_name_1']: self.assertEqual(field.attributes['data-selectable-type'].value, 'hidden-multiple') self.assertEqual(field.attributes['type'].value, 'hidden') found_values.append(int(field.attributes['value'].value)) self.assertListEqual(found_values, [t1.pk, t2.pk])
def test_populate_from_model(self): "Populate from existing model." other_thing = OtherThing.objects.create(thing=self.test_thing, name='a') form = OtherThingForm(instance=other_thing) rendered_form = form.as_p() inputs = parsed_inputs(rendered_form) # Selected text should be populated thing_0 = inputs['thing_0'][0] self.assertEqual(thing_0.attributes['value'].value, self.test_thing.name) # Selected pk should be populated thing_1 = inputs['thing_1'][0] self.assertEqual(int(thing_1.attributes['value'].value), self.test_thing.pk)
def test_invalid_but_still_selected(self): "Invalid form should keep selected item." data = { "name": "", "thing_0": self.test_thing.name, # Text input "thing_1": self.test_thing.pk, # Hidden input } form = OtherThingForm(data=data) self.assertFalse(form.is_valid(), "Form should not be valid") rendered_form = form.as_p() inputs = parsed_inputs(rendered_form) # Selected text should be populated thing_0 = inputs["thing_0"][0] self.assertEqual(thing_0.attributes["value"].value, self.test_thing.name) # Selected pk should be populated thing_1 = inputs["thing_1"][0] self.assertEqual(int(thing_1.attributes["value"].value), self.test_thing.pk)
def test_invalid_but_still_selected(self): "Invalid form should keep selected item." data = { 'name': '', 'thing_0': self.test_thing.name, # Text input 'thing_1': self.test_thing.pk, # Hidden input } form = OtherThingForm(data=data) self.assertFalse(form.is_valid(), 'Form should not be valid') rendered_form = form.as_p() inputs = parsed_inputs(rendered_form) # Selected text should be populated thing_0 = inputs['thing_0'][0] self.assertEqual(thing_0.attributes['value'].value, self.test_thing.name) # Selected pk should be populated thing_1 = inputs['thing_1'][0] self.assertEqual(int(thing_1.attributes['value'].value), self.test_thing.pk)