mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-24 08:25:17 -06:00
Rearrange custom fields to be ordered consistently
This commit is contained in:
parent
26946b2461
commit
1ae1478eaa
@ -401,6 +401,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='text_field', default='foo'),
|
CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='text_field', default='foo'),
|
||||||
CustomField(type=CustomFieldTypeChoices.TYPE_LONGTEXT, name='longtext_field', default='ABC'),
|
CustomField(type=CustomFieldTypeChoices.TYPE_LONGTEXT, name='longtext_field', default='ABC'),
|
||||||
CustomField(type=CustomFieldTypeChoices.TYPE_INTEGER, name='number_field', default=123),
|
CustomField(type=CustomFieldTypeChoices.TYPE_INTEGER, name='number_field', default=123),
|
||||||
|
CustomField(type=CustomFieldTypeChoices.TYPE_DECIMAL, name='decimal_field', default='123.45'),
|
||||||
CustomField(type=CustomFieldTypeChoices.TYPE_BOOLEAN, name='boolean_field', default=False),
|
CustomField(type=CustomFieldTypeChoices.TYPE_BOOLEAN, name='boolean_field', default=False),
|
||||||
CustomField(type=CustomFieldTypeChoices.TYPE_DATE, name='date_field', default='2020-01-01'),
|
CustomField(type=CustomFieldTypeChoices.TYPE_DATE, name='date_field', default='2020-01-01'),
|
||||||
CustomField(type=CustomFieldTypeChoices.TYPE_URL, name='url_field', default='http://example.com/1'),
|
CustomField(type=CustomFieldTypeChoices.TYPE_URL, name='url_field', default='http://example.com/1'),
|
||||||
@ -433,7 +434,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
object_type=ContentType.objects.get_for_model(VLAN),
|
object_type=ContentType.objects.get_for_model(VLAN),
|
||||||
default=[vlans[0].pk, vlans[1].pk],
|
default=[vlans[0].pk, vlans[1].pk],
|
||||||
),
|
),
|
||||||
CustomField(type=CustomFieldTypeChoices.TYPE_DECIMAL, name='decimal_field', default='123.45'),
|
|
||||||
)
|
)
|
||||||
for cf in custom_fields:
|
for cf in custom_fields:
|
||||||
cf.save()
|
cf.save()
|
||||||
@ -452,15 +452,15 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
custom_fields[0].name: 'bar',
|
custom_fields[0].name: 'bar',
|
||||||
custom_fields[1].name: 'DEF',
|
custom_fields[1].name: 'DEF',
|
||||||
custom_fields[2].name: 456,
|
custom_fields[2].name: 456,
|
||||||
custom_fields[3].name: True,
|
custom_fields[3].name: '456.78',
|
||||||
custom_fields[4].name: '2020-01-02',
|
custom_fields[4].name: True,
|
||||||
custom_fields[5].name: 'http://example.com/2',
|
custom_fields[5].name: '2020-01-02',
|
||||||
custom_fields[6].name: '{"foo": 1, "bar": 2}',
|
custom_fields[6].name: 'http://example.com/2',
|
||||||
custom_fields[7].name: 'Bar',
|
custom_fields[7].name: '{"foo": 1, "bar": 2}',
|
||||||
custom_fields[8].name: ['Bar', 'Baz'],
|
custom_fields[8].name: 'Bar',
|
||||||
custom_fields[9].name: vlans[1].pk,
|
custom_fields[9].name: ['Bar', 'Baz'],
|
||||||
custom_fields[10].name: [vlans[2].pk, vlans[3].pk],
|
custom_fields[10].name: vlans[1].pk,
|
||||||
custom_fields[11].name: '456.78',
|
custom_fields[11].name: [vlans[2].pk, vlans[3].pk],
|
||||||
}
|
}
|
||||||
sites[1].save()
|
sites[1].save()
|
||||||
|
|
||||||
@ -469,6 +469,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
CustomFieldTypeChoices.TYPE_TEXT: 'string',
|
CustomFieldTypeChoices.TYPE_TEXT: 'string',
|
||||||
CustomFieldTypeChoices.TYPE_LONGTEXT: 'string',
|
CustomFieldTypeChoices.TYPE_LONGTEXT: 'string',
|
||||||
CustomFieldTypeChoices.TYPE_INTEGER: 'integer',
|
CustomFieldTypeChoices.TYPE_INTEGER: 'integer',
|
||||||
|
CustomFieldTypeChoices.TYPE_DECIMAL: 'decimal',
|
||||||
CustomFieldTypeChoices.TYPE_BOOLEAN: 'boolean',
|
CustomFieldTypeChoices.TYPE_BOOLEAN: 'boolean',
|
||||||
CustomFieldTypeChoices.TYPE_DATE: 'string',
|
CustomFieldTypeChoices.TYPE_DATE: 'string',
|
||||||
CustomFieldTypeChoices.TYPE_URL: 'string',
|
CustomFieldTypeChoices.TYPE_URL: 'string',
|
||||||
@ -477,7 +478,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
CustomFieldTypeChoices.TYPE_MULTISELECT: 'array',
|
CustomFieldTypeChoices.TYPE_MULTISELECT: 'array',
|
||||||
CustomFieldTypeChoices.TYPE_OBJECT: 'object',
|
CustomFieldTypeChoices.TYPE_OBJECT: 'object',
|
||||||
CustomFieldTypeChoices.TYPE_MULTIOBJECT: 'array',
|
CustomFieldTypeChoices.TYPE_MULTIOBJECT: 'array',
|
||||||
CustomFieldTypeChoices.TYPE_DECIMAL: 'decimal',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.add_permissions('extras.view_customfield')
|
self.add_permissions('extras.view_customfield')
|
||||||
@ -504,6 +504,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
'text_field': None,
|
'text_field': None,
|
||||||
'longtext_field': None,
|
'longtext_field': None,
|
||||||
'number_field': None,
|
'number_field': None,
|
||||||
|
'decimal_field': None,
|
||||||
'boolean_field': None,
|
'boolean_field': None,
|
||||||
'date_field': None,
|
'date_field': None,
|
||||||
'url_field': None,
|
'url_field': None,
|
||||||
@ -512,7 +513,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
'multiselect_field': None,
|
'multiselect_field': None,
|
||||||
'object_field': None,
|
'object_field': None,
|
||||||
'multiobject_field': None,
|
'multiobject_field': None,
|
||||||
'decimal_field': None,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
def test_get_single_object_with_custom_field_data(self):
|
def test_get_single_object_with_custom_field_data(self):
|
||||||
@ -529,6 +529,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(response.data['custom_fields']['text_field'], site2_cfvs['text_field'])
|
self.assertEqual(response.data['custom_fields']['text_field'], site2_cfvs['text_field'])
|
||||||
self.assertEqual(response.data['custom_fields']['longtext_field'], site2_cfvs['longtext_field'])
|
self.assertEqual(response.data['custom_fields']['longtext_field'], site2_cfvs['longtext_field'])
|
||||||
self.assertEqual(response.data['custom_fields']['number_field'], site2_cfvs['number_field'])
|
self.assertEqual(response.data['custom_fields']['number_field'], site2_cfvs['number_field'])
|
||||||
|
self.assertEqual(response.data['custom_fields']['decimal_field'], site2_cfvs['decimal_field'])
|
||||||
self.assertEqual(response.data['custom_fields']['boolean_field'], site2_cfvs['boolean_field'])
|
self.assertEqual(response.data['custom_fields']['boolean_field'], site2_cfvs['boolean_field'])
|
||||||
self.assertEqual(response.data['custom_fields']['date_field'], site2_cfvs['date_field'])
|
self.assertEqual(response.data['custom_fields']['date_field'], site2_cfvs['date_field'])
|
||||||
self.assertEqual(response.data['custom_fields']['url_field'], site2_cfvs['url_field'])
|
self.assertEqual(response.data['custom_fields']['url_field'], site2_cfvs['url_field'])
|
||||||
@ -540,7 +541,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
[obj['id'] for obj in response.data['custom_fields']['multiobject_field']],
|
[obj['id'] for obj in response.data['custom_fields']['multiobject_field']],
|
||||||
site2_cfvs['multiobject_field']
|
site2_cfvs['multiobject_field']
|
||||||
)
|
)
|
||||||
self.assertEqual(response.data['custom_fields']['decimal_field'], site2_cfvs['decimal_field'])
|
|
||||||
|
|
||||||
def test_create_single_object_with_defaults(self):
|
def test_create_single_object_with_defaults(self):
|
||||||
"""
|
"""
|
||||||
@ -564,6 +564,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(response_cf['text_field'], cf_defaults['text_field'])
|
self.assertEqual(response_cf['text_field'], cf_defaults['text_field'])
|
||||||
self.assertEqual(response_cf['longtext_field'], cf_defaults['longtext_field'])
|
self.assertEqual(response_cf['longtext_field'], cf_defaults['longtext_field'])
|
||||||
self.assertEqual(response_cf['number_field'], cf_defaults['number_field'])
|
self.assertEqual(response_cf['number_field'], cf_defaults['number_field'])
|
||||||
|
self.assertEqual(response_cf['decimal_field'], cf_defaults['decimal_field'])
|
||||||
self.assertEqual(response_cf['boolean_field'], cf_defaults['boolean_field'])
|
self.assertEqual(response_cf['boolean_field'], cf_defaults['boolean_field'])
|
||||||
self.assertEqual(response_cf['date_field'], cf_defaults['date_field'])
|
self.assertEqual(response_cf['date_field'], cf_defaults['date_field'])
|
||||||
self.assertEqual(response_cf['url_field'], cf_defaults['url_field'])
|
self.assertEqual(response_cf['url_field'], cf_defaults['url_field'])
|
||||||
@ -575,13 +576,13 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
[obj['id'] for obj in response.data['custom_fields']['multiobject_field']],
|
[obj['id'] for obj in response.data['custom_fields']['multiobject_field']],
|
||||||
cf_defaults['multiobject_field']
|
cf_defaults['multiobject_field']
|
||||||
)
|
)
|
||||||
self.assertEqual(response_cf['decimal_field'], cf_defaults['decimal_field'])
|
|
||||||
|
|
||||||
# Validate database data
|
# Validate database data
|
||||||
site = Site.objects.get(pk=response.data['id'])
|
site = Site.objects.get(pk=response.data['id'])
|
||||||
self.assertEqual(site.custom_field_data['text_field'], cf_defaults['text_field'])
|
self.assertEqual(site.custom_field_data['text_field'], cf_defaults['text_field'])
|
||||||
self.assertEqual(site.custom_field_data['longtext_field'], cf_defaults['longtext_field'])
|
self.assertEqual(site.custom_field_data['longtext_field'], cf_defaults['longtext_field'])
|
||||||
self.assertEqual(site.custom_field_data['number_field'], cf_defaults['number_field'])
|
self.assertEqual(site.custom_field_data['number_field'], cf_defaults['number_field'])
|
||||||
|
self.assertEqual(site.custom_field_data['decimal_field'], cf_defaults['decimal_field'])
|
||||||
self.assertEqual(site.custom_field_data['boolean_field'], cf_defaults['boolean_field'])
|
self.assertEqual(site.custom_field_data['boolean_field'], cf_defaults['boolean_field'])
|
||||||
self.assertEqual(str(site.custom_field_data['date_field']), cf_defaults['date_field'])
|
self.assertEqual(str(site.custom_field_data['date_field']), cf_defaults['date_field'])
|
||||||
self.assertEqual(site.custom_field_data['url_field'], cf_defaults['url_field'])
|
self.assertEqual(site.custom_field_data['url_field'], cf_defaults['url_field'])
|
||||||
@ -590,7 +591,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(site.custom_field_data['multiselect_field'], cf_defaults['multiselect_field'])
|
self.assertEqual(site.custom_field_data['multiselect_field'], cf_defaults['multiselect_field'])
|
||||||
self.assertEqual(site.custom_field_data['object_field'], cf_defaults['object_field'])
|
self.assertEqual(site.custom_field_data['object_field'], cf_defaults['object_field'])
|
||||||
self.assertEqual(site.custom_field_data['multiobject_field'], cf_defaults['multiobject_field'])
|
self.assertEqual(site.custom_field_data['multiobject_field'], cf_defaults['multiobject_field'])
|
||||||
self.assertEqual(site.custom_field_data['decimal_field'], cf_defaults['decimal_field'])
|
|
||||||
|
|
||||||
def test_create_single_object_with_values(self):
|
def test_create_single_object_with_values(self):
|
||||||
"""
|
"""
|
||||||
@ -603,6 +603,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
'text_field': 'bar',
|
'text_field': 'bar',
|
||||||
'longtext_field': 'blah blah blah',
|
'longtext_field': 'blah blah blah',
|
||||||
'number_field': 456,
|
'number_field': 456,
|
||||||
|
'decimal_field': '456.78',
|
||||||
'boolean_field': True,
|
'boolean_field': True,
|
||||||
'date_field': '2020-01-02',
|
'date_field': '2020-01-02',
|
||||||
'url_field': 'http://example.com/2',
|
'url_field': 'http://example.com/2',
|
||||||
@ -611,7 +612,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
'multiselect_field': ['Bar', 'Baz'],
|
'multiselect_field': ['Bar', 'Baz'],
|
||||||
'object_field': VLAN.objects.get(vid=2).pk,
|
'object_field': VLAN.objects.get(vid=2).pk,
|
||||||
'multiobject_field': list(VLAN.objects.filter(vid__in=[3, 4]).values_list('pk', flat=True)),
|
'multiobject_field': list(VLAN.objects.filter(vid__in=[3, 4]).values_list('pk', flat=True)),
|
||||||
'decimal_field': '456.78',
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
url = reverse('dcim-api:site-list')
|
url = reverse('dcim-api:site-list')
|
||||||
@ -626,6 +626,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(response_cf['text_field'], data_cf['text_field'])
|
self.assertEqual(response_cf['text_field'], data_cf['text_field'])
|
||||||
self.assertEqual(response_cf['longtext_field'], data_cf['longtext_field'])
|
self.assertEqual(response_cf['longtext_field'], data_cf['longtext_field'])
|
||||||
self.assertEqual(response_cf['number_field'], data_cf['number_field'])
|
self.assertEqual(response_cf['number_field'], data_cf['number_field'])
|
||||||
|
self.assertEqual(response_cf['decimal_field'], data_cf['decimal_field'])
|
||||||
self.assertEqual(response_cf['boolean_field'], data_cf['boolean_field'])
|
self.assertEqual(response_cf['boolean_field'], data_cf['boolean_field'])
|
||||||
self.assertEqual(response_cf['date_field'], data_cf['date_field'])
|
self.assertEqual(response_cf['date_field'], data_cf['date_field'])
|
||||||
self.assertEqual(response_cf['url_field'], data_cf['url_field'])
|
self.assertEqual(response_cf['url_field'], data_cf['url_field'])
|
||||||
@ -637,13 +638,13 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
[obj['id'] for obj in response_cf['multiobject_field']],
|
[obj['id'] for obj in response_cf['multiobject_field']],
|
||||||
data_cf['multiobject_field']
|
data_cf['multiobject_field']
|
||||||
)
|
)
|
||||||
self.assertEqual(response_cf['decimal_field'], data_cf['decimal_field'])
|
|
||||||
|
|
||||||
# Validate database data
|
# Validate database data
|
||||||
site = Site.objects.get(pk=response.data['id'])
|
site = Site.objects.get(pk=response.data['id'])
|
||||||
self.assertEqual(site.custom_field_data['text_field'], data_cf['text_field'])
|
self.assertEqual(site.custom_field_data['text_field'], data_cf['text_field'])
|
||||||
self.assertEqual(site.custom_field_data['longtext_field'], data_cf['longtext_field'])
|
self.assertEqual(site.custom_field_data['longtext_field'], data_cf['longtext_field'])
|
||||||
self.assertEqual(site.custom_field_data['number_field'], data_cf['number_field'])
|
self.assertEqual(site.custom_field_data['number_field'], data_cf['number_field'])
|
||||||
|
self.assertEqual(site.custom_field_data['decimal_field'], data_cf['decimal_field'])
|
||||||
self.assertEqual(site.custom_field_data['boolean_field'], data_cf['boolean_field'])
|
self.assertEqual(site.custom_field_data['boolean_field'], data_cf['boolean_field'])
|
||||||
self.assertEqual(str(site.custom_field_data['date_field']), data_cf['date_field'])
|
self.assertEqual(str(site.custom_field_data['date_field']), data_cf['date_field'])
|
||||||
self.assertEqual(site.custom_field_data['url_field'], data_cf['url_field'])
|
self.assertEqual(site.custom_field_data['url_field'], data_cf['url_field'])
|
||||||
@ -652,7 +653,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(site.custom_field_data['multiselect_field'], data_cf['multiselect_field'])
|
self.assertEqual(site.custom_field_data['multiselect_field'], data_cf['multiselect_field'])
|
||||||
self.assertEqual(site.custom_field_data['object_field'], data_cf['object_field'])
|
self.assertEqual(site.custom_field_data['object_field'], data_cf['object_field'])
|
||||||
self.assertEqual(site.custom_field_data['multiobject_field'], data_cf['multiobject_field'])
|
self.assertEqual(site.custom_field_data['multiobject_field'], data_cf['multiobject_field'])
|
||||||
self.assertEqual(site.custom_field_data['decimal_field'], data_cf['decimal_field'])
|
|
||||||
|
|
||||||
def test_create_multiple_objects_with_defaults(self):
|
def test_create_multiple_objects_with_defaults(self):
|
||||||
"""
|
"""
|
||||||
@ -690,6 +690,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(response_cf['text_field'], cf_defaults['text_field'])
|
self.assertEqual(response_cf['text_field'], cf_defaults['text_field'])
|
||||||
self.assertEqual(response_cf['longtext_field'], cf_defaults['longtext_field'])
|
self.assertEqual(response_cf['longtext_field'], cf_defaults['longtext_field'])
|
||||||
self.assertEqual(response_cf['number_field'], cf_defaults['number_field'])
|
self.assertEqual(response_cf['number_field'], cf_defaults['number_field'])
|
||||||
|
self.assertEqual(response_cf['decimal_field'], cf_defaults['decimal_field'])
|
||||||
self.assertEqual(response_cf['boolean_field'], cf_defaults['boolean_field'])
|
self.assertEqual(response_cf['boolean_field'], cf_defaults['boolean_field'])
|
||||||
self.assertEqual(response_cf['date_field'], cf_defaults['date_field'])
|
self.assertEqual(response_cf['date_field'], cf_defaults['date_field'])
|
||||||
self.assertEqual(response_cf['url_field'], cf_defaults['url_field'])
|
self.assertEqual(response_cf['url_field'], cf_defaults['url_field'])
|
||||||
@ -701,13 +702,13 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
[obj['id'] for obj in response_cf['multiobject_field']],
|
[obj['id'] for obj in response_cf['multiobject_field']],
|
||||||
cf_defaults['multiobject_field']
|
cf_defaults['multiobject_field']
|
||||||
)
|
)
|
||||||
self.assertEqual(response_cf['decimal_field'], cf_defaults['decimal_field'])
|
|
||||||
|
|
||||||
# Validate database data
|
# Validate database data
|
||||||
site = Site.objects.get(pk=response.data[i]['id'])
|
site = Site.objects.get(pk=response.data[i]['id'])
|
||||||
self.assertEqual(site.custom_field_data['text_field'], cf_defaults['text_field'])
|
self.assertEqual(site.custom_field_data['text_field'], cf_defaults['text_field'])
|
||||||
self.assertEqual(site.custom_field_data['longtext_field'], cf_defaults['longtext_field'])
|
self.assertEqual(site.custom_field_data['longtext_field'], cf_defaults['longtext_field'])
|
||||||
self.assertEqual(site.custom_field_data['number_field'], cf_defaults['number_field'])
|
self.assertEqual(site.custom_field_data['number_field'], cf_defaults['number_field'])
|
||||||
|
self.assertEqual(site.custom_field_data['decimal_field'], cf_defaults['decimal_field'])
|
||||||
self.assertEqual(site.custom_field_data['boolean_field'], cf_defaults['boolean_field'])
|
self.assertEqual(site.custom_field_data['boolean_field'], cf_defaults['boolean_field'])
|
||||||
self.assertEqual(str(site.custom_field_data['date_field']), cf_defaults['date_field'])
|
self.assertEqual(str(site.custom_field_data['date_field']), cf_defaults['date_field'])
|
||||||
self.assertEqual(site.custom_field_data['url_field'], cf_defaults['url_field'])
|
self.assertEqual(site.custom_field_data['url_field'], cf_defaults['url_field'])
|
||||||
@ -716,7 +717,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(site.custom_field_data['multiselect_field'], cf_defaults['multiselect_field'])
|
self.assertEqual(site.custom_field_data['multiselect_field'], cf_defaults['multiselect_field'])
|
||||||
self.assertEqual(site.custom_field_data['object_field'], cf_defaults['object_field'])
|
self.assertEqual(site.custom_field_data['object_field'], cf_defaults['object_field'])
|
||||||
self.assertEqual(site.custom_field_data['multiobject_field'], cf_defaults['multiobject_field'])
|
self.assertEqual(site.custom_field_data['multiobject_field'], cf_defaults['multiobject_field'])
|
||||||
self.assertEqual(site.custom_field_data['decimal_field'], cf_defaults['decimal_field'])
|
|
||||||
|
|
||||||
def test_create_multiple_objects_with_values(self):
|
def test_create_multiple_objects_with_values(self):
|
||||||
"""
|
"""
|
||||||
@ -726,6 +726,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
'text_field': 'bar',
|
'text_field': 'bar',
|
||||||
'longtext_field': 'abcdefghij',
|
'longtext_field': 'abcdefghij',
|
||||||
'number_field': 456,
|
'number_field': 456,
|
||||||
|
'decimal_field': '456.78',
|
||||||
'boolean_field': True,
|
'boolean_field': True,
|
||||||
'date_field': '2020-01-02',
|
'date_field': '2020-01-02',
|
||||||
'url_field': 'http://example.com/2',
|
'url_field': 'http://example.com/2',
|
||||||
@ -734,7 +735,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
'multiselect_field': ['Bar', 'Baz'],
|
'multiselect_field': ['Bar', 'Baz'],
|
||||||
'object_field': VLAN.objects.get(vid=2).pk,
|
'object_field': VLAN.objects.get(vid=2).pk,
|
||||||
'multiobject_field': list(VLAN.objects.filter(vid__in=[3, 4]).values_list('pk', flat=True)),
|
'multiobject_field': list(VLAN.objects.filter(vid__in=[3, 4]).values_list('pk', flat=True)),
|
||||||
'decimal_field': '456.78',
|
|
||||||
}
|
}
|
||||||
data = (
|
data = (
|
||||||
{
|
{
|
||||||
@ -767,6 +767,7 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(response_cf['text_field'], custom_field_data['text_field'])
|
self.assertEqual(response_cf['text_field'], custom_field_data['text_field'])
|
||||||
self.assertEqual(response_cf['longtext_field'], custom_field_data['longtext_field'])
|
self.assertEqual(response_cf['longtext_field'], custom_field_data['longtext_field'])
|
||||||
self.assertEqual(response_cf['number_field'], custom_field_data['number_field'])
|
self.assertEqual(response_cf['number_field'], custom_field_data['number_field'])
|
||||||
|
self.assertEqual(response_cf['decimal_field'], custom_field_data['decimal_field'])
|
||||||
self.assertEqual(response_cf['boolean_field'], custom_field_data['boolean_field'])
|
self.assertEqual(response_cf['boolean_field'], custom_field_data['boolean_field'])
|
||||||
self.assertEqual(response_cf['date_field'], custom_field_data['date_field'])
|
self.assertEqual(response_cf['date_field'], custom_field_data['date_field'])
|
||||||
self.assertEqual(response_cf['url_field'], custom_field_data['url_field'])
|
self.assertEqual(response_cf['url_field'], custom_field_data['url_field'])
|
||||||
@ -778,13 +779,13 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
[obj['id'] for obj in response_cf['multiobject_field']],
|
[obj['id'] for obj in response_cf['multiobject_field']],
|
||||||
custom_field_data['multiobject_field']
|
custom_field_data['multiobject_field']
|
||||||
)
|
)
|
||||||
self.assertEqual(response_cf['decimal_field'], custom_field_data['decimal_field'])
|
|
||||||
|
|
||||||
# Validate database data
|
# Validate database data
|
||||||
site = Site.objects.get(pk=response.data[i]['id'])
|
site = Site.objects.get(pk=response.data[i]['id'])
|
||||||
self.assertEqual(site.custom_field_data['text_field'], custom_field_data['text_field'])
|
self.assertEqual(site.custom_field_data['text_field'], custom_field_data['text_field'])
|
||||||
self.assertEqual(site.custom_field_data['longtext_field'], custom_field_data['longtext_field'])
|
self.assertEqual(site.custom_field_data['longtext_field'], custom_field_data['longtext_field'])
|
||||||
self.assertEqual(site.custom_field_data['number_field'], custom_field_data['number_field'])
|
self.assertEqual(site.custom_field_data['number_field'], custom_field_data['number_field'])
|
||||||
|
self.assertEqual(site.custom_field_data['decimal_field'], custom_field_data['decimal_field'])
|
||||||
self.assertEqual(site.custom_field_data['boolean_field'], custom_field_data['boolean_field'])
|
self.assertEqual(site.custom_field_data['boolean_field'], custom_field_data['boolean_field'])
|
||||||
self.assertEqual(str(site.custom_field_data['date_field']), custom_field_data['date_field'])
|
self.assertEqual(str(site.custom_field_data['date_field']), custom_field_data['date_field'])
|
||||||
self.assertEqual(site.custom_field_data['url_field'], custom_field_data['url_field'])
|
self.assertEqual(site.custom_field_data['url_field'], custom_field_data['url_field'])
|
||||||
@ -793,7 +794,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(site.custom_field_data['multiselect_field'], custom_field_data['multiselect_field'])
|
self.assertEqual(site.custom_field_data['multiselect_field'], custom_field_data['multiselect_field'])
|
||||||
self.assertEqual(site.custom_field_data['object_field'], custom_field_data['object_field'])
|
self.assertEqual(site.custom_field_data['object_field'], custom_field_data['object_field'])
|
||||||
self.assertEqual(site.custom_field_data['multiobject_field'], custom_field_data['multiobject_field'])
|
self.assertEqual(site.custom_field_data['multiobject_field'], custom_field_data['multiobject_field'])
|
||||||
self.assertEqual(site.custom_field_data['decimal_field'], custom_field_data['decimal_field'])
|
|
||||||
|
|
||||||
def test_update_single_object_with_values(self):
|
def test_update_single_object_with_values(self):
|
||||||
"""
|
"""
|
||||||
@ -817,8 +817,9 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
# Validate response data
|
# Validate response data
|
||||||
response_cf = response.data['custom_fields']
|
response_cf = response.data['custom_fields']
|
||||||
self.assertEqual(response_cf['text_field'], data['custom_fields']['text_field'])
|
self.assertEqual(response_cf['text_field'], data['custom_fields']['text_field'])
|
||||||
self.assertEqual(response_cf['number_field'], data['custom_fields']['number_field'])
|
|
||||||
self.assertEqual(response_cf['longtext_field'], original_cfvs['longtext_field'])
|
self.assertEqual(response_cf['longtext_field'], original_cfvs['longtext_field'])
|
||||||
|
self.assertEqual(response_cf['number_field'], data['custom_fields']['number_field'])
|
||||||
|
self.assertEqual(response_cf['decimal_field'], original_cfvs['decimal_field'])
|
||||||
self.assertEqual(response_cf['boolean_field'], original_cfvs['boolean_field'])
|
self.assertEqual(response_cf['boolean_field'], original_cfvs['boolean_field'])
|
||||||
self.assertEqual(response_cf['date_field'], original_cfvs['date_field'])
|
self.assertEqual(response_cf['date_field'], original_cfvs['date_field'])
|
||||||
self.assertEqual(response_cf['url_field'], original_cfvs['url_field'])
|
self.assertEqual(response_cf['url_field'], original_cfvs['url_field'])
|
||||||
@ -830,13 +831,13 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
[obj['id'] for obj in response_cf['multiobject_field']],
|
[obj['id'] for obj in response_cf['multiobject_field']],
|
||||||
original_cfvs['multiobject_field']
|
original_cfvs['multiobject_field']
|
||||||
)
|
)
|
||||||
self.assertEqual(response_cf['decimal_field'], original_cfvs['decimal_field'])
|
|
||||||
|
|
||||||
# Validate database data
|
# Validate database data
|
||||||
site2.refresh_from_db()
|
site2.refresh_from_db()
|
||||||
self.assertEqual(site2.custom_field_data['text_field'], data['custom_fields']['text_field'])
|
self.assertEqual(site2.custom_field_data['text_field'], data['custom_fields']['text_field'])
|
||||||
self.assertEqual(site2.custom_field_data['number_field'], data['custom_fields']['number_field'])
|
|
||||||
self.assertEqual(site2.custom_field_data['longtext_field'], original_cfvs['longtext_field'])
|
self.assertEqual(site2.custom_field_data['longtext_field'], original_cfvs['longtext_field'])
|
||||||
|
self.assertEqual(site2.custom_field_data['number_field'], data['custom_fields']['number_field'])
|
||||||
|
self.assertEqual(site2.custom_field_data['decimal_field'], original_cfvs['decimal_field'])
|
||||||
self.assertEqual(site2.custom_field_data['boolean_field'], original_cfvs['boolean_field'])
|
self.assertEqual(site2.custom_field_data['boolean_field'], original_cfvs['boolean_field'])
|
||||||
self.assertEqual(site2.custom_field_data['date_field'], original_cfvs['date_field'])
|
self.assertEqual(site2.custom_field_data['date_field'], original_cfvs['date_field'])
|
||||||
self.assertEqual(site2.custom_field_data['url_field'], original_cfvs['url_field'])
|
self.assertEqual(site2.custom_field_data['url_field'], original_cfvs['url_field'])
|
||||||
@ -845,7 +846,6 @@ class CustomFieldAPITest(APITestCase):
|
|||||||
self.assertEqual(site2.custom_field_data['multiselect_field'], original_cfvs['multiselect_field'])
|
self.assertEqual(site2.custom_field_data['multiselect_field'], original_cfvs['multiselect_field'])
|
||||||
self.assertEqual(site2.custom_field_data['object_field'], original_cfvs['object_field'])
|
self.assertEqual(site2.custom_field_data['object_field'], original_cfvs['object_field'])
|
||||||
self.assertEqual(site2.custom_field_data['multiobject_field'], original_cfvs['multiobject_field'])
|
self.assertEqual(site2.custom_field_data['multiobject_field'], original_cfvs['multiobject_field'])
|
||||||
self.assertEqual(site2.custom_field_data['decimal_field'], original_cfvs['decimal_field'])
|
|
||||||
|
|
||||||
def test_minimum_maximum_values_validation(self):
|
def test_minimum_maximum_values_validation(self):
|
||||||
site2 = Site.objects.get(name='Site 2')
|
site2 = Site.objects.get(name='Site 2')
|
||||||
@ -904,6 +904,7 @@ class CustomFieldImportTest(TestCase):
|
|||||||
CustomField(name='text', type=CustomFieldTypeChoices.TYPE_TEXT),
|
CustomField(name='text', type=CustomFieldTypeChoices.TYPE_TEXT),
|
||||||
CustomField(name='longtext', type=CustomFieldTypeChoices.TYPE_LONGTEXT),
|
CustomField(name='longtext', type=CustomFieldTypeChoices.TYPE_LONGTEXT),
|
||||||
CustomField(name='integer', type=CustomFieldTypeChoices.TYPE_INTEGER),
|
CustomField(name='integer', type=CustomFieldTypeChoices.TYPE_INTEGER),
|
||||||
|
CustomField(name='decimal', type=CustomFieldTypeChoices.TYPE_DECIMAL),
|
||||||
CustomField(name='boolean', type=CustomFieldTypeChoices.TYPE_BOOLEAN),
|
CustomField(name='boolean', type=CustomFieldTypeChoices.TYPE_BOOLEAN),
|
||||||
CustomField(name='date', type=CustomFieldTypeChoices.TYPE_DATE),
|
CustomField(name='date', type=CustomFieldTypeChoices.TYPE_DATE),
|
||||||
CustomField(name='url', type=CustomFieldTypeChoices.TYPE_URL),
|
CustomField(name='url', type=CustomFieldTypeChoices.TYPE_URL),
|
||||||
@ -914,7 +915,6 @@ class CustomFieldImportTest(TestCase):
|
|||||||
CustomField(name='multiselect', type=CustomFieldTypeChoices.TYPE_MULTISELECT, choices=[
|
CustomField(name='multiselect', type=CustomFieldTypeChoices.TYPE_MULTISELECT, choices=[
|
||||||
'Choice A', 'Choice B', 'Choice C',
|
'Choice A', 'Choice B', 'Choice C',
|
||||||
]),
|
]),
|
||||||
CustomField(name='decimal', type=CustomFieldTypeChoices.TYPE_DECIMAL),
|
|
||||||
)
|
)
|
||||||
for cf in custom_fields:
|
for cf in custom_fields:
|
||||||
cf.save()
|
cf.save()
|
||||||
@ -925,9 +925,9 @@ class CustomFieldImportTest(TestCase):
|
|||||||
Import a Site in CSV format, including a value for each CustomField.
|
Import a Site in CSV format, including a value for each CustomField.
|
||||||
"""
|
"""
|
||||||
data = (
|
data = (
|
||||||
('name', 'slug', 'status', 'cf_text', 'cf_longtext', 'cf_integer', 'cf_boolean', 'cf_date', 'cf_url', 'cf_json', 'cf_select', 'cf_multiselect', 'cf_decimal'),
|
('name', 'slug', 'status', 'cf_text', 'cf_longtext', 'cf_integer', 'cf_decimal', 'cf_boolean', 'cf_date', 'cf_url', 'cf_json', 'cf_select', 'cf_multiselect'),
|
||||||
('Site 1', 'site-1', 'active', 'ABC', 'Foo', '123', 'True', '2020-01-01', 'http://example.com/1', '{"foo": 123}', 'Choice A', '"Choice A,Choice B"', '123.45'),
|
('Site 1', 'site-1', 'active', 'ABC', 'Foo', '123', '123.45', 'True', '2020-01-01', 'http://example.com/1', '{"foo": 123}', 'Choice A', '"Choice A,Choice B"'),
|
||||||
('Site 2', 'site-2', 'active', 'DEF', 'Bar', '456', 'False', '2020-01-02', 'http://example.com/2', '{"bar": 456}', 'Choice B', '"Choice B,Choice C"', '456.78'),
|
('Site 2', 'site-2', 'active', 'DEF', 'Bar', '456', '456.78', 'False', '2020-01-02', 'http://example.com/2', '{"bar": 456}', 'Choice B', '"Choice B,Choice C"'),
|
||||||
('Site 3', 'site-3', 'active', '', '', '', '', '', '', '', '', '', ''),
|
('Site 3', 'site-3', 'active', '', '', '', '', '', '', '', '', '', ''),
|
||||||
)
|
)
|
||||||
csv_data = '\n'.join(','.join(row) for row in data)
|
csv_data = '\n'.join(','.join(row) for row in data)
|
||||||
@ -942,13 +942,13 @@ class CustomFieldImportTest(TestCase):
|
|||||||
self.assertEqual(site1.custom_field_data['text'], 'ABC')
|
self.assertEqual(site1.custom_field_data['text'], 'ABC')
|
||||||
self.assertEqual(site1.custom_field_data['longtext'], 'Foo')
|
self.assertEqual(site1.custom_field_data['longtext'], 'Foo')
|
||||||
self.assertEqual(site1.custom_field_data['integer'], 123)
|
self.assertEqual(site1.custom_field_data['integer'], 123)
|
||||||
|
self.assertEqual(site1.custom_field_data['decimal'], '123.45')
|
||||||
self.assertEqual(site1.custom_field_data['boolean'], True)
|
self.assertEqual(site1.custom_field_data['boolean'], True)
|
||||||
self.assertEqual(site1.custom_field_data['date'], '2020-01-01')
|
self.assertEqual(site1.custom_field_data['date'], '2020-01-01')
|
||||||
self.assertEqual(site1.custom_field_data['url'], 'http://example.com/1')
|
self.assertEqual(site1.custom_field_data['url'], 'http://example.com/1')
|
||||||
self.assertEqual(site1.custom_field_data['json'], {"foo": 123})
|
self.assertEqual(site1.custom_field_data['json'], {"foo": 123})
|
||||||
self.assertEqual(site1.custom_field_data['select'], 'Choice A')
|
self.assertEqual(site1.custom_field_data['select'], 'Choice A')
|
||||||
self.assertEqual(site1.custom_field_data['multiselect'], ['Choice A', 'Choice B'])
|
self.assertEqual(site1.custom_field_data['multiselect'], ['Choice A', 'Choice B'])
|
||||||
self.assertEqual(site1.custom_field_data['decimal'], '123.45')
|
|
||||||
|
|
||||||
# Validate data for site 2
|
# Validate data for site 2
|
||||||
site2 = Site.objects.get(name='Site 2')
|
site2 = Site.objects.get(name='Site 2')
|
||||||
@ -956,13 +956,13 @@ class CustomFieldImportTest(TestCase):
|
|||||||
self.assertEqual(site2.custom_field_data['text'], 'DEF')
|
self.assertEqual(site2.custom_field_data['text'], 'DEF')
|
||||||
self.assertEqual(site2.custom_field_data['longtext'], 'Bar')
|
self.assertEqual(site2.custom_field_data['longtext'], 'Bar')
|
||||||
self.assertEqual(site2.custom_field_data['integer'], 456)
|
self.assertEqual(site2.custom_field_data['integer'], 456)
|
||||||
|
self.assertEqual(site2.custom_field_data['decimal'], '456.78')
|
||||||
self.assertEqual(site2.custom_field_data['boolean'], False)
|
self.assertEqual(site2.custom_field_data['boolean'], False)
|
||||||
self.assertEqual(site2.custom_field_data['date'], '2020-01-02')
|
self.assertEqual(site2.custom_field_data['date'], '2020-01-02')
|
||||||
self.assertEqual(site2.custom_field_data['url'], 'http://example.com/2')
|
self.assertEqual(site2.custom_field_data['url'], 'http://example.com/2')
|
||||||
self.assertEqual(site2.custom_field_data['json'], {"bar": 456})
|
self.assertEqual(site2.custom_field_data['json'], {"bar": 456})
|
||||||
self.assertEqual(site2.custom_field_data['select'], 'Choice B')
|
self.assertEqual(site2.custom_field_data['select'], 'Choice B')
|
||||||
self.assertEqual(site2.custom_field_data['multiselect'], ['Choice B', 'Choice C'])
|
self.assertEqual(site2.custom_field_data['multiselect'], ['Choice B', 'Choice C'])
|
||||||
self.assertEqual(site2.custom_field_data['decimal'], '456.78')
|
|
||||||
|
|
||||||
# No custom field data should be set for site 3
|
# No custom field data should be set for site 3
|
||||||
site3 = Site.objects.get(name='Site 3')
|
site3 = Site.objects.get(name='Site 3')
|
||||||
@ -1081,53 +1081,58 @@ class CustomFieldModelFilterTest(TestCase):
|
|||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
|
# Decimal filtering
|
||||||
|
cf = CustomField(name='cf2', type=CustomFieldTypeChoices.TYPE_DECIMAL)
|
||||||
|
cf.save()
|
||||||
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Boolean filtering
|
# Boolean filtering
|
||||||
cf = CustomField(name='cf2', type=CustomFieldTypeChoices.TYPE_BOOLEAN)
|
cf = CustomField(name='cf3', type=CustomFieldTypeChoices.TYPE_BOOLEAN)
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Exact text filtering
|
# Exact text filtering
|
||||||
cf = CustomField(name='cf3', type=CustomFieldTypeChoices.TYPE_TEXT,
|
cf = CustomField(name='cf4', type=CustomFieldTypeChoices.TYPE_TEXT,
|
||||||
filter_logic=CustomFieldFilterLogicChoices.FILTER_EXACT)
|
filter_logic=CustomFieldFilterLogicChoices.FILTER_EXACT)
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Loose text filtering
|
# Loose text filtering
|
||||||
cf = CustomField(name='cf4', type=CustomFieldTypeChoices.TYPE_TEXT,
|
cf = CustomField(name='cf5', type=CustomFieldTypeChoices.TYPE_TEXT,
|
||||||
filter_logic=CustomFieldFilterLogicChoices.FILTER_LOOSE)
|
filter_logic=CustomFieldFilterLogicChoices.FILTER_LOOSE)
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Date filtering
|
# Date filtering
|
||||||
cf = CustomField(name='cf5', type=CustomFieldTypeChoices.TYPE_DATE)
|
cf = CustomField(name='cf6', type=CustomFieldTypeChoices.TYPE_DATE)
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Exact URL filtering
|
# Exact URL filtering
|
||||||
cf = CustomField(name='cf6', type=CustomFieldTypeChoices.TYPE_URL,
|
cf = CustomField(name='cf7', type=CustomFieldTypeChoices.TYPE_URL,
|
||||||
filter_logic=CustomFieldFilterLogicChoices.FILTER_EXACT)
|
filter_logic=CustomFieldFilterLogicChoices.FILTER_EXACT)
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Loose URL filtering
|
# Loose URL filtering
|
||||||
cf = CustomField(name='cf7', type=CustomFieldTypeChoices.TYPE_URL,
|
cf = CustomField(name='cf8', type=CustomFieldTypeChoices.TYPE_URL,
|
||||||
filter_logic=CustomFieldFilterLogicChoices.FILTER_LOOSE)
|
filter_logic=CustomFieldFilterLogicChoices.FILTER_LOOSE)
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Selection filtering
|
# Selection filtering
|
||||||
cf = CustomField(name='cf8', type=CustomFieldTypeChoices.TYPE_SELECT, choices=['Foo', 'Bar', 'Baz'])
|
cf = CustomField(name='cf9', type=CustomFieldTypeChoices.TYPE_SELECT, choices=['Foo', 'Bar', 'Baz'])
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Multiselect filtering
|
# Multiselect filtering
|
||||||
cf = CustomField(name='cf9', type=CustomFieldTypeChoices.TYPE_MULTISELECT, choices=['A', 'B', 'C', 'X'])
|
cf = CustomField(name='cf10', type=CustomFieldTypeChoices.TYPE_MULTISELECT, choices=['A', 'B', 'C', 'X'])
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Object filtering
|
# Object filtering
|
||||||
cf = CustomField(
|
cf = CustomField(
|
||||||
name='cf10',
|
name='cf11',
|
||||||
type=CustomFieldTypeChoices.TYPE_OBJECT,
|
type=CustomFieldTypeChoices.TYPE_OBJECT,
|
||||||
object_type=ContentType.objects.get_for_model(Manufacturer)
|
object_type=ContentType.objects.get_for_model(Manufacturer)
|
||||||
)
|
)
|
||||||
@ -1136,60 +1141,55 @@ class CustomFieldModelFilterTest(TestCase):
|
|||||||
|
|
||||||
# Multi-object filtering
|
# Multi-object filtering
|
||||||
cf = CustomField(
|
cf = CustomField(
|
||||||
name='cf11',
|
name='cf12',
|
||||||
type=CustomFieldTypeChoices.TYPE_MULTIOBJECT,
|
type=CustomFieldTypeChoices.TYPE_MULTIOBJECT,
|
||||||
object_type=ContentType.objects.get_for_model(Manufacturer)
|
object_type=ContentType.objects.get_for_model(Manufacturer)
|
||||||
)
|
)
|
||||||
cf.save()
|
cf.save()
|
||||||
cf.content_types.set([obj_type])
|
cf.content_types.set([obj_type])
|
||||||
|
|
||||||
# Decimal filtering
|
|
||||||
cf = CustomField(name='cf12', type=CustomFieldTypeChoices.TYPE_DECIMAL)
|
|
||||||
cf.save()
|
|
||||||
cf.content_types.set([obj_type])
|
|
||||||
|
|
||||||
Site.objects.bulk_create([
|
Site.objects.bulk_create([
|
||||||
Site(name='Site 1', slug='site-1', custom_field_data={
|
Site(name='Site 1', slug='site-1', custom_field_data={
|
||||||
'cf1': 100,
|
'cf1': 100,
|
||||||
'cf2': True,
|
'cf2': decimal.Decimal(100.25),
|
||||||
'cf3': 'foo',
|
'cf3': True,
|
||||||
'cf4': 'foo',
|
'cf4': 'foo',
|
||||||
'cf5': '2016-06-26',
|
'cf5': 'foo',
|
||||||
'cf6': 'http://a.example.com',
|
'cf6': '2016-06-26',
|
||||||
'cf7': 'http://a.example.com',
|
'cf7': 'http://a.example.com',
|
||||||
'cf8': 'Foo',
|
'cf8': 'http://a.example.com',
|
||||||
'cf9': ['A', 'X'],
|
'cf9': 'Foo',
|
||||||
'cf10': manufacturers[0].pk,
|
'cf10': ['A', 'X'],
|
||||||
'cf11': [manufacturers[0].pk, manufacturers[3].pk],
|
'cf11': manufacturers[0].pk,
|
||||||
'cf12': decimal.Decimal(100.25),
|
'cf12': [manufacturers[0].pk, manufacturers[3].pk],
|
||||||
}),
|
}),
|
||||||
Site(name='Site 2', slug='site-2', custom_field_data={
|
Site(name='Site 2', slug='site-2', custom_field_data={
|
||||||
'cf1': 200,
|
'cf1': 200,
|
||||||
'cf2': True,
|
'cf2': decimal.Decimal(200.25),
|
||||||
'cf3': 'foobar',
|
'cf3': True,
|
||||||
'cf4': 'foobar',
|
'cf4': 'foobar',
|
||||||
'cf5': '2016-06-27',
|
'cf5': 'foobar',
|
||||||
'cf6': 'http://b.example.com',
|
'cf6': '2016-06-27',
|
||||||
'cf7': 'http://b.example.com',
|
'cf7': 'http://b.example.com',
|
||||||
'cf8': 'Bar',
|
'cf8': 'http://b.example.com',
|
||||||
'cf9': ['B', 'X'],
|
'cf9': 'Bar',
|
||||||
'cf10': manufacturers[1].pk,
|
'cf10': ['B', 'X'],
|
||||||
'cf11': [manufacturers[1].pk, manufacturers[3].pk],
|
'cf11': manufacturers[1].pk,
|
||||||
'cf12': decimal.Decimal(200.25),
|
'cf12': [manufacturers[1].pk, manufacturers[3].pk],
|
||||||
}),
|
}),
|
||||||
Site(name='Site 3', slug='site-3', custom_field_data={
|
Site(name='Site 3', slug='site-3', custom_field_data={
|
||||||
'cf1': 300,
|
'cf1': 300,
|
||||||
'cf2': False,
|
'cf2': decimal.Decimal("300.25"),
|
||||||
'cf3': 'bar',
|
'cf3': False,
|
||||||
'cf4': 'bar',
|
'cf4': 'bar',
|
||||||
'cf5': '2016-06-28',
|
'cf5': 'bar',
|
||||||
'cf6': 'http://c.example.com',
|
'cf6': '2016-06-28',
|
||||||
'cf7': 'http://c.example.com',
|
'cf7': 'http://c.example.com',
|
||||||
'cf8': 'Baz',
|
'cf8': 'http://c.example.com',
|
||||||
'cf9': ['C', 'X'],
|
'cf9': 'Baz',
|
||||||
'cf10': manufacturers[2].pk,
|
'cf10': ['C', 'X'],
|
||||||
'cf11': [manufacturers[2].pk, manufacturers[3].pk],
|
'cf11': manufacturers[2].pk,
|
||||||
'cf12': decimal.Decimal("300.25"),
|
'cf12': [manufacturers[2].pk, manufacturers[3].pk],
|
||||||
}),
|
}),
|
||||||
])
|
])
|
||||||
|
|
||||||
@ -1202,68 +1202,67 @@ class CustomFieldModelFilterTest(TestCase):
|
|||||||
self.assertEqual(self.filterset({'cf_cf1__lte': [200]}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf1__lte': [200]}, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_filter_decimal(self):
|
def test_filter_decimal(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf12__gt': [200.25]}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf2': [100.25, 200.25]}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf12': [100.25, 200.25]}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf2__n': [200.25]}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf12__n': [200.25]}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf2__gt': [200.25]}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf12__gt': [200.25]}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf2__gte': [200.25]}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf12__gte': [200.25]}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf2__lt': [200.25]}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf12__lt': [200.25]}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf2__lte': [200.25]}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf12__lte': [200.25]}, self.queryset).qs.count(), 2)
|
|
||||||
|
|
||||||
def test_filter_boolean(self):
|
def test_filter_boolean(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf2': True}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf3': True}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf2': False}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf3': False}, self.queryset).qs.count(), 1)
|
||||||
|
|
||||||
def test_filter_text_strict(self):
|
def test_filter_text_strict(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf3': ['foo']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf4': ['foo']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__n': ['foo']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf4__n': ['foo']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__ic': ['foo']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf4__ic': ['foo']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__nic': ['foo']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf4__nic': ['foo']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__isw': ['foo']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf4__isw': ['foo']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__nisw': ['foo']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf4__nisw': ['foo']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__iew': ['bar']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf4__iew': ['bar']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__niew': ['bar']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf4__niew': ['bar']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__ie': ['FOO']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf4__ie': ['FOO']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf3__nie': ['FOO']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf4__nie': ['FOO']}, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_filter_text_loose(self):
|
def test_filter_text_loose(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf4': ['foo']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf5': ['foo']}, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_filter_date(self):
|
def test_filter_date(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf5': ['2016-06-26', '2016-06-27']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf6': ['2016-06-26', '2016-06-27']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf5__n': ['2016-06-27']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf6__n': ['2016-06-27']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf5__gt': ['2016-06-27']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf6__gt': ['2016-06-27']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf5__gte': ['2016-06-27']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf6__gte': ['2016-06-27']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf5__lt': ['2016-06-27']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf6__lt': ['2016-06-27']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf5__lte': ['2016-06-27']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf6__lte': ['2016-06-27']}, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_filter_url_strict(self):
|
def test_filter_url_strict(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf6': ['http://a.example.com', 'http://b.example.com']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf7': ['http://a.example.com', 'http://b.example.com']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__n': ['http://b.example.com']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf7__n': ['http://b.example.com']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__ic': ['b']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf7__ic': ['b']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__nic': ['b']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf7__nic': ['b']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__isw': ['http://']}, self.queryset).qs.count(), 3)
|
self.assertEqual(self.filterset({'cf_cf7__isw': ['http://']}, self.queryset).qs.count(), 3)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__nisw': ['http://']}, self.queryset).qs.count(), 0)
|
self.assertEqual(self.filterset({'cf_cf7__nisw': ['http://']}, self.queryset).qs.count(), 0)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__iew': ['.com']}, self.queryset).qs.count(), 3)
|
self.assertEqual(self.filterset({'cf_cf7__iew': ['.com']}, self.queryset).qs.count(), 3)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__niew': ['.com']}, self.queryset).qs.count(), 0)
|
self.assertEqual(self.filterset({'cf_cf7__niew': ['.com']}, self.queryset).qs.count(), 0)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__ie': ['HTTP://A.EXAMPLE.COM']}, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset({'cf_cf7__ie': ['HTTP://A.EXAMPLE.COM']}, self.queryset).qs.count(), 1)
|
||||||
self.assertEqual(self.filterset({'cf_cf6__nie': ['HTTP://A.EXAMPLE.COM']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf7__nie': ['HTTP://A.EXAMPLE.COM']}, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_filter_url_loose(self):
|
def test_filter_url_loose(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf7': ['example.com']}, self.queryset).qs.count(), 3)
|
self.assertEqual(self.filterset({'cf_cf8': ['example.com']}, self.queryset).qs.count(), 3)
|
||||||
|
|
||||||
def test_filter_select(self):
|
def test_filter_select(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf8': ['Foo', 'Bar']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf9': ['Foo', 'Bar']}, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_filter_multiselect(self):
|
def test_filter_multiselect(self):
|
||||||
self.assertEqual(self.filterset({'cf_cf9': ['A', 'B']}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf10': ['A', 'B']}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf9': ['X']}, self.queryset).qs.count(), 3)
|
self.assertEqual(self.filterset({'cf_cf10': ['X']}, self.queryset).qs.count(), 3)
|
||||||
|
|
||||||
def test_filter_object(self):
|
def test_filter_object(self):
|
||||||
manufacturer_ids = Manufacturer.objects.values_list('id', flat=True)
|
manufacturer_ids = Manufacturer.objects.values_list('id', flat=True)
|
||||||
self.assertEqual(self.filterset({'cf_cf10': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf11': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_filter_multiobject(self):
|
def test_filter_multiobject(self):
|
||||||
manufacturer_ids = Manufacturer.objects.values_list('id', flat=True)
|
manufacturer_ids = Manufacturer.objects.values_list('id', flat=True)
|
||||||
self.assertEqual(self.filterset({'cf_cf11': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset({'cf_cf12': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), 2)
|
||||||
self.assertEqual(self.filterset({'cf_cf11': [manufacturer_ids[3]]}, self.queryset).qs.count(), 3)
|
self.assertEqual(self.filterset({'cf_cf12': [manufacturer_ids[3]]}, self.queryset).qs.count(), 3)
|
||||||
|
Loading…
Reference in New Issue
Block a user