-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathtest_entry.py
More file actions
408 lines (351 loc) · 18.1 KB
/
test_entry.py
File metadata and controls
408 lines (351 loc) · 18.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
import unittest
import config
import contentstack
API_KEY = config.APIKEY
DELIVERY_TOKEN = config.DELIVERYTOKEN
ENVIRONMENT = config.ENVIRONMENT
HOST = config.HOST
FAQ_UID = config.FAQ_UID # Add this in your config.py
VARIANT_UID = config.VARIANT_UID
class TestEntry(unittest.TestCase):
def setUp(self):
self.stack = contentstack.Stack(API_KEY, DELIVERY_TOKEN, ENVIRONMENT, host=HOST)
def test_run_initial_query(self):
query = self.stack.content_type('faq').query()
result = query.find()
if result is not None:
self.faq_uid = result['entries'][0]['uid']
print(f'the uid is: {self.faq_uid}')
def test_entry_by_UID(self):
entry = self.stack.content_type('faq').entry(FAQ_UID)
result = entry.fetch()
if result is not None:
self.assertEqual(FAQ_UID, result['entry']['uid'])
def test_03_entry_environment(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).environment('test')
self.assertEqual("test", entry.http_instance.headers['environment'])
def test_04_entry_locale(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).locale('en-ei')
entry.fetch()
self.assertEqual('en-ei', entry.entry_param['locale'])
def test_05_entry_version(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).version(3)
entry.fetch()
self.assertEqual(3, entry.entry_param['version'])
def test_06_entry_params(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).param('param_key', 'param_value')
entry.fetch()
self.assertEqual('param_value', entry.entry_param['param_key'])
def test_07_entry_base_only(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).only('field_UID')
entry.fetch()
self.assertEqual({'environment': 'development',
'only[BASE][]': 'field_UID'}, entry.entry_param)
def test_08_entry_base_excepts(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).excepts('field_UID')
entry.fetch()
self.assertEqual({'environment': 'development',
'except[BASE][]': 'field_UID'}, entry.entry_param)
def test_10_entry_base_include_reference_only(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).only('field1')
entry.fetch()
self.assertEqual({'environment': 'development', 'only[BASE][]': 'field1'},
entry.entry_param)
def test_11_entry_base_include_reference_excepts(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).excepts('field1')
entry.fetch()
self.assertEqual({'environment': 'development', 'except[BASE][]': 'field1'},
entry.entry_param)
def test_12_entry_include_reference_github_issue(self):
stack_for_products = contentstack.Stack(
"API_KEY", "DELIVERY_TOKEN", "ENVIRONMENT")
_entry = stack_for_products.content_type('product').entry("ENTRY_UI").include_reference(
["categories",
"brand"])
response = _entry.fetch()
def test_13_entry_support_include_fallback_unit_test(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).include_fallback()
self.assertEqual(
True, entry.entry_param.__contains__('include_fallback'))
def test_14_entry_queryable_only(self):
try:
entry = self.stack.content_type('faq').entry(FAQ_UID).only(4)
result = entry.fetch()
self.assertEqual(None, result['uid'])
except KeyError as e:
if hasattr(e, 'message'):
self.assertEqual("Invalid field UID. Provide a valid UID and try again.", e.args[0])
def test_entry_queryable_excepts(self):
try:
entry = self.stack.content_type('faq').entry(FAQ_UID).excepts(4)
result = entry.fetch()
self.assertEqual(None, result['uid'])
except KeyError as e:
if hasattr(e, 'message'):
self.assertEqual("Invalid field UID. Provide a valid UID and try again.", e.args[0])
def test_16_entry_queryable_include_content_type(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).include_content_type()
self.assertEqual({'include_content_type': 'true', 'include_global_field_schema': 'true'},
entry.entry_queryable_param)
def test_reference_content_type_uid(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).include_reference_content_type_uid()
self.assertEqual({'include_reference_content_type_uid': 'true'},
entry.entry_queryable_param)
def test_19_entry_queryable_add_param(self):
entry = self.stack.content_type('faq').entry(FAQ_UID).add_param('cms', 'contentstack')
self.assertEqual({'cms': 'contentstack'}, entry.entry_queryable_param)
def test_20_entry_include_fallback(self):
content_type = self.stack.content_type('faq')
entry = content_type.entry("878783238783").include_fallback()
result = entry.fetch()
self.assertEqual({'environment': 'development',
'include_fallback': 'true'}, entry.entry_param)
def test_21_entry_include_embedded_items(self):
content_type = self.stack.content_type('faq')
entry = content_type.entry("878783238783").include_embedded_items()
result = entry.fetch()
self.assertEqual({'environment': 'development',
'include_embedded_items[]': 'BASE'}, entry.entry_param)
def test_22_entry_include_metadata(self):
content_type = self.stack.content_type('faq')
entry = content_type.entry("878783238783").include_metadata()
self.assertEqual({'include_metadata': 'true'}, entry.entry_queryable_param)
def test_23_content_type_variants(self):
content_type = self.stack.content_type('faq')
entry = content_type.variants(VARIANT_UID).find()
self.assertIn('variants', entry['entries'][0]['publish_details'])
def test_24_entry_variants(self):
content_type = self.stack.content_type('faq')
entry = content_type.entry(FAQ_UID).variants(VARIANT_UID).fetch()
self.assertIn('variants', entry['entry']['publish_details'])
def test_25_content_type_variants_with_has_hash_variant(self):
content_type = self.stack.content_type('faq')
entry = content_type.variants([VARIANT_UID]).find()
self.assertIn('variants', entry['entries'][0]['publish_details'])
def test_25_content_type_entry_variants_with_has_hash_variant(self):
content_type = self.stack.content_type('faq').entry(FAQ_UID)
entry = content_type.variants([VARIANT_UID]).fetch()
self.assertIn('variants', entry['entry']['publish_details'])
# ========== Additional Test Cases ==========
def test_26_entry_method_chaining_locale_version(self):
"""Test entry method chaining with locale and version"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.locale('en-us')
.version(1))
entry.fetch()
self.assertEqual('en-us', entry.entry_queryable_param['locale'])
self.assertEqual(1, entry.entry_param['version'])
def test_27_entry_method_chaining_environment_locale(self):
"""Test entry method chaining with environment and locale"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.environment('test')
.locale('en-us'))
entry.fetch()
self.assertEqual('test', entry.http_instance.headers['environment'])
self.assertEqual('en-us', entry.entry_queryable_param['locale'])
def test_28_entry_only_multiple_fields(self):
"""Test entry only with multiple field calls"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.only('field1')
.only('field2'))
entry.fetch()
# Note: Multiple only calls may overwrite or append
self.assertIn('only[BASE][]', entry.entry_param)
def test_29_entry_excepts_multiple_fields(self):
"""Test entry excepts with multiple field calls"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.excepts('field1')
.excepts('field2'))
entry.fetch()
# Note: Multiple excepts calls may overwrite or append
self.assertIn('except[BASE][]', entry.entry_param)
def test_30_entry_include_fallback_with_locale(self):
"""Test entry include_fallback combined with locale"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.locale('en-gb')
.include_fallback())
entry.fetch()
self.assertEqual('en-gb', entry.entry_queryable_param['locale'])
self.assertIn('include_fallback', entry.entry_param)
def test_31_entry_include_metadata_with_version(self):
"""Test entry include_metadata combined with version"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.version(2)
.include_metadata())
entry.fetch()
self.assertEqual(2, entry.entry_param['version'])
self.assertEqual('true', entry.entry_queryable_param['include_metadata'])
def test_32_entry_include_content_type_with_locale(self):
"""Test entry include_content_type combined with locale"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.locale('en-us')
.include_content_type())
entry.fetch()
self.assertEqual('en-us', entry.entry_queryable_param['locale'])
self.assertIn('include_content_type', entry.entry_queryable_param)
def test_33_entry_include_reference_content_type_uid_with_version(self):
"""Test entry include_reference_content_type_uid combined with version"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.version(1)
.include_reference_content_type_uid())
entry.fetch()
self.assertEqual(1, entry.entry_param['version'])
self.assertIn('include_reference_content_type_uid', entry.entry_queryable_param)
def test_34_entry_add_param_multiple_times(self):
"""Test entry add_param called multiple times"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.add_param('key1', 'value1')
.add_param('key2', 'value2'))
entry.fetch()
self.assertEqual('value1', entry.entry_queryable_param['key1'])
self.assertEqual('value2', entry.entry_queryable_param['key2'])
def test_35_entry_complex_method_chaining(self):
"""Test entry with complex method chaining"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.environment('test')
.locale('en-us')
.version(1)
.include_fallback()
.include_metadata()
.include_content_type()
.add_param('custom', 'value'))
entry.fetch()
self.assertEqual('test', entry.http_instance.headers['environment'])
self.assertEqual('en-us', entry.entry_queryable_param['locale'])
self.assertEqual(1, entry.entry_param['version'])
self.assertIn('include_fallback', entry.entry_param)
self.assertIn('include_metadata', entry.entry_queryable_param)
self.assertIn('include_content_type', entry.entry_queryable_param)
self.assertEqual('value', entry.entry_queryable_param['custom'])
def test_36_entry_include_embedded_items_with_locale(self):
"""Test entry include_embedded_items combined with locale"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.locale('en-us')
.include_embedded_items())
entry.fetch()
self.assertEqual('en-us', entry.entry_queryable_param['locale'])
self.assertIn('include_embedded_items[]', entry.entry_param)
def test_37_entry_param_with_different_values(self):
"""Test entry param method with different value types"""
entry = self.stack.content_type('faq').entry(FAQ_UID)
entry.param('string_param', 'string_value')
entry.param('int_param', 123)
entry.fetch()
self.assertEqual('string_value', entry.entry_param['string_param'])
self.assertEqual('123', entry.entry_param['int_param']) # Converted to string
def test_38_entry_only_and_excepts_together(self):
"""Test entry with both only and excepts"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.only('field1')
.excepts('field2'))
entry.fetch()
self.assertIn('only[BASE][]', entry.entry_param)
self.assertIn('except[BASE][]', entry.entry_param)
def test_39_entry_include_reference_with_multiple_fields(self):
"""Test entry include_reference with multiple fields"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.include_reference(['field1', 'field2', 'field3']))
result = entry.fetch()
self.assertIsNotNone(result)
def test_40_entry_variants_with_params(self):
"""Test entry variants with params"""
content_type = self.stack.content_type('faq')
entry = content_type.entry(FAQ_UID).variants(VARIANT_UID, params={'locale': 'en-us'})
result = entry.fetch()
self.assertIn('variants', result['entry']['publish_details'])
def test_41_entry_variants_multiple_uids(self):
"""Test entry variants with multiple variant UIDs"""
content_type = self.stack.content_type('faq')
entry = content_type.entry(FAQ_UID).variants([VARIANT_UID, VARIANT_UID])
result = entry.fetch()
self.assertIn('variants', result['entry']['publish_details'])
def test_42_entry_environment_removal(self):
"""Test entry remove_environment method"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.environment('test')
.remove_environment())
self.assertNotIn('environment', entry.http_instance.headers)
def test_43_entry_version_zero(self):
"""Test entry version with zero value"""
entry = self.stack.content_type('faq').entry(FAQ_UID).version(0)
entry.fetch()
self.assertEqual(0, entry.entry_param['version'])
def test_44_entry_locale_empty_string(self):
"""Test entry locale with empty string"""
entry = self.stack.content_type('faq').entry(FAQ_UID).locale('')
entry.fetch()
self.assertEqual('', entry.entry_queryable_param['locale'])
def test_45_entry_include_reference_empty_list(self):
"""Test entry include_reference with empty list"""
entry = self.stack.content_type('faq').entry(FAQ_UID).include_reference([])
result = entry.fetch()
self.assertIsNotNone(result)
def test_46_entry_all_queryable_methods_combined(self):
"""Test entry with all EntryQueryable methods combined"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.locale('en-us')
.only('field1')
.excepts('field2')
.include_reference(['ref1', 'ref2'])
.include_content_type()
.include_reference_content_type_uid()
.add_param('custom', 'value'))
entry.fetch()
self.assertEqual('en-us', entry.entry_queryable_param['locale'])
self.assertIn('only[BASE][]', entry.entry_param)
self.assertIn('except[BASE][]', entry.entry_param)
self.assertIn('include_content_type', entry.entry_queryable_param)
self.assertIn('include_reference_content_type_uid', entry.entry_queryable_param)
self.assertEqual('value', entry.entry_queryable_param['custom'])
def test_47_entry_asset_fields_single_field(self):
"""Test entry asset_fields with a single field"""
entry = self.stack.content_type('faq').entry(FAQ_UID).asset_fields('user_defined_fields')
self.assertEqual(['user_defined_fields'], entry.entry_queryable_param['asset_fields[]'])
def test_48_entry_asset_fields_multiple_fields(self):
"""Test entry asset_fields with multiple fields in one call"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.asset_fields('user_defined_fields', 'visual_markups'))
self.assertEqual(['user_defined_fields', 'visual_markups'],
entry.entry_queryable_param['asset_fields[]'])
def test_49_entry_asset_fields_chained_calls(self):
"""Test entry asset_fields with chained calls"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.asset_fields('user_defined_fields')
.asset_fields('visual_markups'))
self.assertEqual(['user_defined_fields', 'visual_markups'],
entry.entry_queryable_param['asset_fields[]'])
def test_50_entry_asset_fields_all_supported_values(self):
"""Test entry asset_fields with all supported values"""
entry = (self.stack.content_type('faq')
.entry(FAQ_UID)
.asset_fields('user_defined_fields', 'embedded_metadata',
'ai_generated_metadata', 'visual_markups'))
self.assertEqual(
['user_defined_fields', 'embedded_metadata', 'ai_generated_metadata', 'visual_markups'],
entry.entry_queryable_param['asset_fields[]'])
def test_51_query_asset_fields(self):
"""Test query asset_fields sets entry_queryable_param"""
query = (self.stack.content_type('faq')
.query()
.asset_fields('user_defined_fields', 'visual_markups'))
self.assertEqual(['user_defined_fields', 'visual_markups'],
query.entry_queryable_param['asset_fields[]'])
if __name__ == '__main__':
unittest.main()