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
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# CHANGELOG

## _v2.1.1_

### **Date: 07-July-2025**

- Fixed sanity testcases and removed hardcoded secrets.

## _v2.1.0_

### **Date: 02-June-2025**
Expand Down
2 changes: 1 addition & 1 deletion contentstack/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
__title__ = 'contentstack-delivery-python'
__author__ = 'contentstack'
__status__ = 'debug'
__version__ = 'v2.1.0'
__version__ = 'v2.1.1'
__endpoint__ = 'cdn.contentstack.io'
__email__ = '[email protected]'
__developer_email__ = '[email protected]'
Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ twython==3.9.1
setuptools==80.3.1
contentstack-utils==1.3.0
python-dateutil==2.8.2
requests==2.32.3
requests==2.32.4
coverage==7.6.0
tox==4.5.1
virtualenv==20.26.6
Expand Down Expand Up @@ -58,6 +58,6 @@ zipp==3.20.1
distlib~=0.3.8
cachetools~=5.4.0
tomlkit~=0.13.2
urllib3==2.2.3
urllib3==2.5.0
exceptiongroup~=1.2.2
iniconfig~=2.0.0
58 changes: 19 additions & 39 deletions tests/test_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import config
import contentstack

_UID = 'blt53ca1231625bdde4'
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


class TestEntry(unittest.TestCase):
Expand All @@ -19,69 +19,54 @@ def test_run_initial_query(self):
query = self.stack.content_type('faq').query()
result = query.find()
if result is not None:
self._UID = result['entries'][0]['uid']
print(f'the uid is: {_UID}')
self.faq_uid = result['entries'][0]['uid']
print(f'the uid is: {self.faq_uid}')

def test_entry_by_UID(self):
global _UID
entry = self.stack.content_type('faq').entry(_UID)
entry = self.stack.content_type('faq').entry(FAQ_UID)
result = entry.fetch()
if result is not None:
_UID = result['entry']['uid']
self.assertEqual(_UID, result['entry']['uid'])
self.assertEqual(FAQ_UID, result['entry']['uid'])

def test_03_entry_environment(self):
global _UID
entry = self.stack.content_type('faq').entry(
_UID).environment('test')
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):
global _UID
entry = self.stack.content_type('faq').entry(_UID).locale('en-ei')
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):
global _UID
entry = self.stack.content_type('faq').entry(_UID).version(3)
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):
global _UID
entry = self.stack.content_type('faq').entry(
_UID).param('param_key', 'param_value')
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):
global _UID
entry = self.stack.content_type(
'faq').entry(_UID).only('field_UID')
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):
global _UID
entry = self.stack.content_type('faq').entry(
_UID).excepts('field_UID')
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):
global _UID
entry = self.stack.content_type('faq').entry(_UID).only('field1')
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):
global _UID
entry = self.stack.content_type(
'faq').entry(_UID).excepts('field1')
entry = self.stack.content_type('faq').entry(FAQ_UID).excepts('field1')
entry.fetch()
self.assertEqual({'environment': 'development', 'except[BASE][]': 'field1'},
entry.entry_param)
Expand All @@ -95,15 +80,13 @@ def test_12_entry_include_reference_github_issue(self):
response = _entry.fetch()

def test_13_entry_support_include_fallback_unit_test(self):
global _UID
entry = self.stack.content_type('faq').entry(
_UID).include_fallback()
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(_UID).only(4)
entry = self.stack.content_type('faq').entry(FAQ_UID).only(4)
result = entry.fetch()
self.assertEqual(None, result['uid'])
except KeyError as e:
Expand All @@ -112,28 +95,25 @@ def test_14_entry_queryable_only(self):

def test_entry_queryable_excepts(self):
try:
entry = self.stack.content_type('faq').entry(_UID).excepts(4)
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 provided", e.args[0])

def test_16_entry_queryable_include_content_type(self):
entry = self.stack.content_type('faq').entry(
_UID).include_content_type()
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(
_UID).include_reference_content_type_uid()
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(
_UID).add_param('cms', 'contentstack')
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):
Expand Down
6 changes: 3 additions & 3 deletions tests/test_live_preview.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import contentstack
from contentstack.deep_merge_lp import DeepMergeMixin

management_token = 'cs8743874323343u9'
entry_uid = 'blt8743874323343u9'
preview_token = 'abcdefgh1234567890'
management_token = config.MANAGEMENT_TOKEN
entry_uid = config.LIVE_PREVIEW_ENTRY_UID
preview_token = config.PREVIEW_TOKEN

_lp_query = {
'live_preview': '#0#0#0#0#0#0#0#0#0#',
Expand Down
13 changes: 8 additions & 5 deletions tests/test_stack.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,14 @@ def test__15_sync_pagination_with_invalid_pagination_token(self):
self.assertEqual(
'is not valid.', result['errors']['pagination_token'][0])

@unittest.skip('Work in progress')
def test_16_initialise_sync(self):
result = self.stack.sync_init()
if result is not None:
self.assertEqual(16, result['total_count'])
# Deprecated: This test was skipped due to deprecation of the sync_init feature or its API.
# If sync_init is permanently removed or unsupported, this test should remain commented or be deleted.
# If migration or replacement is planned, update this test accordingly.
# @unittest.skip('Work in progress')
# def test_16_initialise_sync(self):
# result = self.stack.sync_init()
# if result is not None:
# self.assertEqual(16, result['total_count'])

def test_17_entry_with_sync_token(self):
result = self.stack.sync_token('sync_token')
Expand Down
Loading