Skip to content

Commit 2ff6c68

Browse files
committed
[LIB-819] - Add support for creating objects through DataEndpoint
1 parent 9a7c280 commit 2ff6c68

File tree

2 files changed

+81
-61
lines changed

2 files changed

+81
-61
lines changed

syncano/models/data_views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,6 @@ def _get_response_template_name(self, response_template):
127127
'Invalid response_template. Must be template\'s name or ResponseTemplate object.'
128128
)
129129
return name
130+
131+
def add_object(self, **kwargs):
132+
return Object(instance_name=self.instance_name, class_name=self.class_name, **kwargs).save()

tests/integration_test_data_endpoint.py

Lines changed: 78 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -7,76 +7,93 @@
77

88
class DataEndpointTest(InstanceMixin, IntegrationTest):
99

10-
schema = [
11-
{
12-
'name': 'title',
13-
'type': 'string',
14-
'order_index': True,
15-
'filter_index': True
16-
}
17-
]
10+
@classmethod
11+
def setUpClass(cls):
12+
super(DataEndpointTest, cls).setUpClass()
1813

19-
template_content = '''
20-
{% if action == 'list' %}
21-
{% set objects = response.objects %}
22-
{% elif action == 'retrieve' %}
23-
{% set objects = [response] %}
24-
{% else %}
25-
{% set objects = [] %}
26-
{% endif %}
27-
{% if objects %}
28-
<table{% if table_classes %} class="{{ table_classes }}"{% endif %}>
14+
schema = [
15+
{
16+
'name': 'title',
17+
'type': 'string',
18+
'order_index': True,
19+
'filter_index': True
20+
}
21+
]
2922

30-
<tr{% if tr_header_classes %} class="{{ tr_header_classes }}"{% endif %}>
31-
{% for key in objects[0] if key not in fields_to_skip %}
32-
<th{% if th_header_classes %} class="{{ th_header_classes }}"{% endif %}>{{ key }}</th>
33-
{% endfor %}
34-
</tr>
35-
{% for object in objects %}
36-
<tr{% if tr_row_classes %} class="{{ tr_row_classes }}"{% endif %}>
37-
{% for key, value in object.iteritems() if key not in fields_to_skip %}
38-
<td{% if td_row_classes %} class="{{ td_row_classes }}"{% endif %}>{{ value }}</td>
39-
{% endfor %}
23+
template_content = '''
24+
{% if action == 'list' %}
25+
{% set objects = response.objects %}
26+
{% elif action == 'retrieve' %}
27+
{% set objects = [response] %}
28+
{% else %}
29+
{% set objects = [] %}
30+
{% endif %}
31+
{% if objects %}
32+
<table{% if table_classes %} class="{{ table_classes }}"{% endif %}>
33+
34+
<tr{% if tr_header_classes %} class="{{ tr_header_classes }}"{% endif %}>
35+
{% for key in objects[0] if key not in fields_to_skip %}
36+
<th{% if th_header_classes %} class="{{ th_header_classes }}"{% endif %}>{{ key }}</th>
37+
{% endfor %}
4038
</tr>
41-
{% endfor %}
42-
</table>
43-
{% endif %}
44-
'''
39+
{% for object in objects %}
40+
<tr{% if tr_row_classes %} class="{{ tr_row_classes }}"{% endif %}>
41+
{% for key, value in object.iteritems() if key not in fields_to_skip %}
42+
<td{% if td_row_classes %} class="{{ td_row_classes }}"{% endif %}>{{ value }}</td>
43+
{% endfor %}
44+
</tr>
45+
{% endfor %}
46+
</table>
47+
{% endif %}
48+
'''
4549

46-
template_context = {
47-
"tr_header_classes": "",
48-
"th_header_classes": "",
49-
"tr_row_classes": "",
50-
"table_classes": "",
51-
"td_row_classes": "",
52-
"fields_to_skip": [
53-
"id",
54-
"channel",
55-
"channel_room",
56-
"group",
57-
"links",
58-
"group_permissions",
59-
"owner_permissions",
60-
"other_permissions",
61-
"owner",
62-
"revision",
63-
"updated_at",
64-
"created_at"
65-
]
66-
}
50+
template_context = {
51+
"tr_header_classes": "",
52+
"th_header_classes": "",
53+
"tr_row_classes": "",
54+
"table_classes": "",
55+
"td_row_classes": "",
56+
"fields_to_skip": [
57+
"id",
58+
"channel",
59+
"channel_room",
60+
"group",
61+
"links",
62+
"group_permissions",
63+
"owner_permissions",
64+
"other_permissions",
65+
"owner",
66+
"revision",
67+
"updated_at",
68+
"created_at"
69+
]
70+
}
6771

68-
def test_template_response(self):
69-
Class(name='test_class', schema=self.schema).save()
70-
Object(class_name='test_class', title='test_title').save()
71-
template = ResponseTemplate(
72+
cls.klass = Class(name='test_class', schema=schema).save()
73+
cls.template = ResponseTemplate(
7274
name='test_template',
73-
content=self.template_content,
75+
content=template_content,
7476
content_type='text/html',
75-
context=self.template_context
77+
context=template_context
7678
).save()
77-
data_endpoint = DataEndpoint(name='test_endpoint', class_name='test_class').save()
79+
cls.data_endpoint = DataEndpoint(name='test_endpoint', class_name='test_class').save()
7880

79-
response = list(data_endpoint.get(response_template=template))
81+
def setUp(self):
82+
for obj in self.instance.classes.get(name='test_class').objects.all():
83+
obj.delete()
84+
85+
def test_template_response(self):
86+
Object(class_name=self.klass.name, title='test_title').save()
87+
response = list(self.data_endpoint.get(response_template=self.template))
8088
self.assertEqual(len(response), 1, 'Data endpoint should return 1 element if queried with response_template.')
8189
data = re.sub('[\s+]', '', response[0])
8290
self.assertEqual(data, '<table><tr><th>title</th></tr><tr><td>test_title</td></tr></table>')
91+
92+
def test_create_object(self):
93+
objects_count = len(list(self.data_endpoint.get()))
94+
self.assertEqual(objects_count, 0)
95+
self.data_endpoint.add_object(title='another title')
96+
objects_count = len(list(self.data_endpoint.get()))
97+
self.assertEqual(objects_count, 1, 'New object should have been created.')
98+
obj = next(self.data_endpoint.get())
99+
self.assertEqual(obj['title'], 'another title', 'Created object should have proper title.')

0 commit comments

Comments
 (0)