From bfc65555afed3106f4887682ce6adbacdb7fec85 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:56:59 +0530 Subject: [PATCH 1/2] Added unit, API, and mock tests for asset localization using query parameter --- .talismanrc | 2 ++ CHANGELOG.md | 7 +++++++ contentstack_management/__init__.py | 2 +- requirements.txt | 1 + setup.py | 7 ++++++- tests/api/assets/test_assets.py | 18 ++++++++++++++++++ tests/mock/assets/test_assets_mock.py | 14 ++++++++++++++ tests/unit/assets/test_assets_unit.py | 18 ++++++++++++++++++ 8 files changed, 67 insertions(+), 2 deletions(-) diff --git a/.talismanrc b/.talismanrc index b443cb3..a80d4de 100644 --- a/.talismanrc +++ b/.talismanrc @@ -403,4 +403,6 @@ fileignoreconfig: checksum: 0db30c5a306783b10d345d73cff3c61490d7cbc47273623df47e6849c3e97002 - filename: tests/unit/contentstack/test_totp_login.py checksum: cefad0ddc1a2db1bf59d6e04501c4381acc8b44fad1e5e2e24c06e33d827c859 +- filename: tests/mock/assets/test_assets_mock.py + checksum: 12c9091bb88c0c12712f046b29fb4a9dce3b95ecc45f4ea46bbc3fd4529742a0 version: "1.0" diff --git a/CHANGELOG.md b/CHANGELOG.md index 87c2443..910bc15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # CHANGELOG ## Content Management SDK For Python +--- +## v1.8.0 + +#### Date: 30 March 2026 + +- Added unit, API, and mock tests for asset localization using query parameter (for example `en-us` via `add_param`). + --- ## v1.7.2 diff --git a/contentstack_management/__init__.py b/contentstack_management/__init__.py index fded789..6d55586 100644 --- a/contentstack_management/__init__.py +++ b/contentstack_management/__init__.py @@ -82,7 +82,7 @@ __author__ = 'dev-ex' __status__ = 'debug' __region__ = 'na' -__version__ = '1.7.2' +__version__ = '1.8.0' __host__ = 'api.contentstack.io' __protocol__ = 'https://' __api_version__ = 'v3' diff --git a/requirements.txt b/requirements.txt index df890d9..c15ca94 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,7 @@ python-dotenv>=1.0.0,<2.0.0 setuptools>=80.0.0 requests>=2.32.4,<3.0.0 +urllib3>=2.6.3,<3.0.0 pylint>=2.0.0 bson>=0.5.9,<1.0.0 requests-toolbelt>=1.0.0,<2.0.0 diff --git a/setup.py b/setup.py index a8b749a..d6e158f 100644 --- a/setup.py +++ b/setup.py @@ -49,7 +49,12 @@ def get_author_email(package): "Programming Language :: Python :: 3.10", "Operating System :: OS Independent", ], - install_requires=["bson >= 0.5.9", "requests >= 2.5.4", "requests-toolbelt >= 0.3.1"], + install_requires=[ + "bson >= 0.5.9", + "requests >= 2.5.4", + "requests-toolbelt >= 0.3.1", + "urllib3 >= 2.6.3", + ], extras_require={ "dev": ["pytest>=7.0", "twine>=4.0.2", "dotenv>=0.0.5"], }, diff --git a/tests/api/assets/test_assets.py b/tests/api/assets/test_assets.py index 5f98a61..03a1811 100644 --- a/tests/api/assets/test_assets.py +++ b/tests/api/assets/test_assets.py @@ -30,6 +30,24 @@ def test_get_asset(self): else: self.assertEqual(response.request.method, "GET") + def test_get_all_assets_with_locale(self): + assets = self.client.stack(api_key).assets() + assets.add_param("locale", "en-us") + response = assets.find() + if response.status_code == 200: + self.assertEqual(response.status_code, 200) + else: + self.assertEqual(response.request.method, "GET") + + def test_get_asset_with_locale(self): + asset = self.client.stack(api_key).assets(asset_uid) + asset.add_param("locale", "en-us") + response = asset.fetch() + if response.status_code == 200: + self.assertEqual(response.status_code, 200) + else: + self.assertEqual(response.request.method, "GET") + def test_delete(self): response = self.client.stack(api_key).assets(asset_uid).delete() if response.status_code == 200: diff --git a/tests/mock/assets/test_assets_mock.py b/tests/mock/assets/test_assets_mock.py index 503d629..d53c3c8 100644 --- a/tests/mock/assets/test_assets_mock.py +++ b/tests/mock/assets/test_assets_mock.py @@ -34,6 +34,20 @@ def test_get_asset(self): response = self.client.stack(api_key).assets(asset_uid).fetch().json() self.assertEqual(asset_uid, response["assets"]["uid"]) + def test_get_all_assets_with_locale(self): + assets = self.client.stack(api_key).assets() + assets.add_param("locale", "en-us") + response = assets.find().json() + read_mock_asset_data = read_file("find.json") + mock_asset_data = json.loads(read_mock_asset_data) + self.assertEqual(mock_asset_data.keys(), response.keys()) + + def test_get_asset_with_locale(self): + asset = self.client.stack(api_key).assets(asset_uid) + asset.add_param("locale", "en-us") + response = asset.fetch().json() + self.assertEqual(asset_uid, response["assets"]["uid"]) + def test_delete(self): response = self.client.stack(api_key).assets(asset_uid).delete().json() self.assertEqual("Asset deleted successfully.", response['notice']) diff --git a/tests/unit/assets/test_assets_unit.py b/tests/unit/assets/test_assets_unit.py index 7f276cb..0905cb6 100644 --- a/tests/unit/assets/test_assets_unit.py +++ b/tests/unit/assets/test_assets_unit.py @@ -30,6 +30,24 @@ def test_get_asset(self): self.assertEqual(response.request.headers["Content-Type"], "application/json") self.assertEqual(response.request.body, None) + def test_find_with_locale(self): + assets = self.client.stack(api_key).assets() + assets.add_param("locale", "en-us") + response = assets.find() + self.assertEqual(response.request.url, f"{self.client.endpoint}assets?locale=en-us") + self.assertEqual(response.request.method, "GET") + self.assertEqual(response.request.headers["Content-Type"], "application/json") + self.assertEqual(response.request.body, None) + + def test_fetch_with_locale(self): + asset = self.client.stack(api_key).assets(asset_uid) + asset.add_param("locale", "en-us") + response = asset.fetch() + self.assertEqual(response.request.url, f"{self.client.endpoint}assets/{asset_uid}?locale=en-us") + self.assertEqual(response.request.method, "GET") + self.assertEqual(response.request.headers["Content-Type"], "application/json") + self.assertEqual(response.request.body, None) + def test_delete(self): response = self.client.stack(api_key).assets(asset_uid).delete() self.assertEqual(response.request.url, f"{self.client.endpoint}assets/{asset_uid}") From 428f98fead72af9d8b2f3456fdf04dcf26445c7a Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Mon, 23 Mar 2026 22:06:45 +0530 Subject: [PATCH 2/2] fixed workflows --- .github/workflows/unit-test.yml | 4 +--- requirements.txt | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index dd3a8ea..5fe02d7 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -19,9 +19,7 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt # If you have a requirements file - pip install coverage - pip install pytest - pip install coverage-badge + pip install coverage pytest coverage-badge - name: Run tests and coverage diff --git a/requirements.txt b/requirements.txt index c15ca94..3f57c17 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ python-dotenv>=1.0.0,<2.0.0 -setuptools>=80.0.0 +# <82: pkg_resources (used by coverage-badge and similar tools) was removed in setuptools 82+ +setuptools>=80.0.0,<82.0.0 requests>=2.32.4,<3.0.0 urllib3>=2.6.3,<3.0.0 pylint>=2.0.0