def test_select_field(self): obj_type = ContentType.objects.get_for_model(Site) # Create a custom field cf = CustomField( type=CustomFieldTypeChoices.TYPE_SELECT, name="my_field", required=False, ) cf.save() cf.content_types.set([obj_type]) CustomFieldChoice.objects.create(field=cf, value="Option A") CustomFieldChoice.objects.create(field=cf, value="Option B") CustomFieldChoice.objects.create(field=cf, value="Option C") # Assign a value to the first Site site = Site.objects.first() site.cf[cf.name] = "Option A" site.save() # Retrieve the stored value site.refresh_from_db() self.assertEqual(site.cf[cf.name], "Option A") # Delete the stored value site.cf.pop(cf.name) site.save() site.refresh_from_db() self.assertIsNone(site.cf.get(cf.name)) # Delete the custom field cf.delete()
def test_delete_custom_field_data_task(self): obj_type = ContentType.objects.get_for_model(Site) cf = CustomField( name="cf1", type=CustomFieldTypeChoices.TYPE_TEXT, ) cf.save() cf.content_types.set([obj_type]) # Synchronously process all jobs on the queue in this process self.get_worker() site = Site(name="Site 1", slug="site-1", _custom_field_data={"cf1": "foo"}) site.save() cf.delete() # Synchronously process all jobs on the queue in this process self.get_worker() site.refresh_from_db() self.assertTrue("cf1" not in site.cf)
class CustomFieldChoiceTest(TestCase): def setUp(self): obj_type = ContentType.objects.get_for_model(Site) self.cf = CustomField( name="cf1", type=CustomFieldTypeChoices.TYPE_SELECT, ) self.cf.save() self.cf.content_types.set([obj_type]) self.choice = CustomFieldChoice(field=self.cf, value="Foo") self.choice.save() self.site = Site( name="Site 1", slug="site-1", _custom_field_data={ "cf1": "Foo", }, ) self.site.save() def test_default_value_must_be_valid_choice_sad_path(self): self.cf.default = "invalid value" with self.assertRaises(ValidationError): self.cf.full_clean() def test_default_value_must_be_valid_choice_happy_path(self): self.cf.default = "Foo" self.cf.full_clean() self.cf.save() self.assertEqual(self.cf.default, "Foo") def test_active_choice_cannot_be_deleted(self): with self.assertRaises(ProtectedError): self.choice.delete() def test_custom_choice_deleted_with_field(self): self.cf.delete() self.assertEqual(CustomField.objects.count(), 0) self.assertEqual(CustomFieldChoice.objects.count(), 0)
def test_delete_custom_field_data_task(self): self.clear_worker() obj_type = ContentType.objects.get_for_model(Site) cf = CustomField( name="cf1", type=CustomFieldTypeChoices.TYPE_TEXT, ) cf.save() cf.content_types.set([obj_type]) site = Site(name="Site 1", slug="site-1", _custom_field_data={"cf1": "foo"}) site.save() cf.delete() self.wait_on_active_tasks() site.refresh_from_db() self.assertTrue("cf1" not in site.cf)
def test_simple_fields(self): DATA = ( { "field_type": CustomFieldTypeChoices.TYPE_TEXT, "field_value": "Foobar!", "empty_value": "", }, { "field_type": CustomFieldTypeChoices.TYPE_INTEGER, "field_value": 0, "empty_value": None, }, { "field_type": CustomFieldTypeChoices.TYPE_INTEGER, "field_value": 42, "empty_value": None, }, { "field_type": CustomFieldTypeChoices.TYPE_BOOLEAN, "field_value": True, "empty_value": None, }, { "field_type": CustomFieldTypeChoices.TYPE_BOOLEAN, "field_value": False, "empty_value": None, }, { "field_type": CustomFieldTypeChoices.TYPE_DATE, "field_value": "2016-06-23", "empty_value": None, }, { "field_type": CustomFieldTypeChoices.TYPE_URL, "field_value": "http://example.com/", "empty_value": "", }, ) obj_type = ContentType.objects.get_for_model(Site) for data in DATA: # Create a custom field cf = CustomField(type=data["field_type"], name="my_field", required=False) cf.save() cf.content_types.set([obj_type]) # Assign a value to the first Site site = Site.objects.first() site.cf[cf.name] = data["field_value"] site.save() # Retrieve the stored value site.refresh_from_db() self.assertEqual(site.cf[cf.name], data["field_value"]) # Delete the stored value site.cf.pop(cf.name) site.save() site.refresh_from_db() self.assertIsNone(site.cf.get(cf.name)) # Delete the custom field cf.delete()