Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions syncano/models/data_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,6 @@ def _get_response_template_name(self, response_template):
'Invalid response_template. Must be template\'s name or ResponseTemplate object.'
)
return name

def add_object(self, **kwargs):
return Object(instance_name=self.instance_name, class_name=self.class_name, **kwargs).save()
139 changes: 78 additions & 61 deletions tests/integration_test_data_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,76 +7,93 @@

class DataEndpointTest(InstanceMixin, IntegrationTest):

schema = [
{
'name': 'title',
'type': 'string',
'order_index': True,
'filter_index': True
}
]
@classmethod
def setUpClass(cls):
super(DataEndpointTest, cls).setUpClass()

template_content = '''
{% if action == 'list' %}
{% set objects = response.objects %}
{% elif action == 'retrieve' %}
{% set objects = [response] %}
{% else %}
{% set objects = [] %}
{% endif %}
{% if objects %}
<table{% if table_classes %} class="{{ table_classes }}"{% endif %}>
schema = [
{
'name': 'title',
'type': 'string',
'order_index': True,
'filter_index': True
}
]

<tr{% if tr_header_classes %} class="{{ tr_header_classes }}"{% endif %}>
{% for key in objects[0] if key not in fields_to_skip %}
<th{% if th_header_classes %} class="{{ th_header_classes }}"{% endif %}>{{ key }}</th>
{% endfor %}
</tr>
{% for object in objects %}
<tr{% if tr_row_classes %} class="{{ tr_row_classes }}"{% endif %}>
{% for key, value in object.iteritems() if key not in fields_to_skip %}
<td{% if td_row_classes %} class="{{ td_row_classes }}"{% endif %}>{{ value }}</td>
{% endfor %}
template_content = '''
{% if action == 'list' %}
{% set objects = response.objects %}
{% elif action == 'retrieve' %}
{% set objects = [response] %}
{% else %}
{% set objects = [] %}
{% endif %}
{% if objects %}
<table{% if table_classes %} class="{{ table_classes }}"{% endif %}>

<tr{% if tr_header_classes %} class="{{ tr_header_classes }}"{% endif %}>
{% for key in objects[0] if key not in fields_to_skip %}
<th{% if th_header_classes %} class="{{ th_header_classes }}"{% endif %}>{{ key }}</th>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endif %}
'''
{% for object in objects %}
<tr{% if tr_row_classes %} class="{{ tr_row_classes }}"{% endif %}>
{% for key, value in object.iteritems() if key not in fields_to_skip %}
<td{% if td_row_classes %} class="{{ td_row_classes }}"{% endif %}>{{ value }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endif %}
'''

template_context = {
"tr_header_classes": "",
"th_header_classes": "",
"tr_row_classes": "",
"table_classes": "",
"td_row_classes": "",
"fields_to_skip": [
"id",
"channel",
"channel_room",
"group",
"links",
"group_permissions",
"owner_permissions",
"other_permissions",
"owner",
"revision",
"updated_at",
"created_at"
]
}
template_context = {
"tr_header_classes": "",
"th_header_classes": "",
"tr_row_classes": "",
"table_classes": "",
"td_row_classes": "",
"fields_to_skip": [
"id",
"channel",
"channel_room",
"group",
"links",
"group_permissions",
"owner_permissions",
"other_permissions",
"owner",
"revision",
"updated_at",
"created_at"
]
}

def test_template_response(self):
Class(name='test_class', schema=self.schema).save()
Object(class_name='test_class', title='test_title').save()
template = ResponseTemplate(
cls.klass = Class(name='test_class', schema=schema).save()
cls.template = ResponseTemplate(
name='test_template',
content=self.template_content,
content=template_content,
content_type='text/html',
context=self.template_context
context=template_context
).save()
data_endpoint = DataEndpoint(name='test_endpoint', class_name='test_class').save()
cls.data_endpoint = DataEndpoint(name='test_endpoint', class_name='test_class').save()

response = list(data_endpoint.get(response_template=template))
def setUp(self):
for obj in self.instance.classes.get(name='test_class').objects.all():
obj.delete()

def test_template_response(self):
Object(class_name=self.klass.name, title='test_title').save()
response = list(self.data_endpoint.get(response_template=self.template))
self.assertEqual(len(response), 1, 'Data endpoint should return 1 element if queried with response_template.')
data = re.sub('[\s+]', '', response[0])
self.assertEqual(data, '<table><tr><th>title</th></tr><tr><td>test_title</td></tr></table>')

def test_create_object(self):
objects_count = len(list(self.data_endpoint.get()))
self.assertEqual(objects_count, 0)
self.data_endpoint.add_object(title='another title')
objects_count = len(list(self.data_endpoint.get()))
self.assertEqual(objects_count, 1, 'New object should have been created.')
obj = next(self.data_endpoint.get())
self.assertEqual(obj['title'], 'another title', 'Created object should have proper title.')