Skip to content

Commit fbdd777

Browse files
authored
Merge pull request #694 from Mara3l/master
feat: Add tests for Localization methods
2 parents 484ec40 + f1f0159 commit fbdd777

File tree

7 files changed

+7227
-4
lines changed

7 files changed

+7227
-4
lines changed

gooddata-sdk/gooddata_sdk/catalog/workspace/service.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,7 @@ def add_metadata_locale(
922922
Args:
923923
workspace_id (str): The ID of the workspace.
924924
target_language (str): The target language for the metadata localization.
925-
translator_func (Optional[Callable]): A function to translate the source text.
925+
translator_func (Callable): A function to translate the source text.
926926
set_locale (bool): Flag to indicate if the locale settings should be updated in the workspace.
927927
928928
Returns:

gooddata-sdk/tests/catalog/fixtures/workspaces/add_metadata_locale.yaml

+2,478
Large diffs are not rendered by default.

gooddata-sdk/tests/catalog/fixtures/workspaces/clean_metadata_locale.yaml

+3,022
Large diffs are not rendered by default.

gooddata-sdk/tests/catalog/fixtures/workspaces/get_metadata_localization.yaml

+548
Large diffs are not rendered by default.

gooddata-sdk/tests/catalog/fixtures/workspaces/set_metadata_localization.yaml

+1,085
Large diffs are not rendered by default.

gooddata-sdk/tests/catalog/test_catalog_workspace.py

+80
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
from pathlib import Path
66
from typing import List
7+
from xml.etree import ElementTree as ET
78

89
import yaml
910
from gooddata_sdk import (
@@ -840,3 +841,82 @@ def test_update_workspace_setting(test_config):
840841
finally:
841842
sdk.catalog_workspace.delete_workspace_setting(test_config["workspace"], setting_id)
842843
assert len(sdk.catalog_workspace.list_workspace_settings(test_config["workspace"])) == 0
844+
845+
846+
@gd_vcr.use_cassette(str(_fixtures_dir / "get_metadata_localization.yaml"))
847+
def test_get_metadata_localization(test_config):
848+
sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"])
849+
test_workspace = test_config["workspace"]
850+
xliff = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
851+
852+
tree = ET.ElementTree(ET.fromstring(xliff))
853+
854+
# Check, if the returned xliff is valid.
855+
assert tree is not None
856+
857+
858+
@gd_vcr.use_cassette(str(_fixtures_dir / "set_metadata_localization.yaml"))
859+
def test_set_metadata_localization(test_config):
860+
sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"])
861+
test_workspace = test_config["workspace"]
862+
xliff = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
863+
864+
sdk.catalog_workspace.set_metadata_localization(workspace_id=test_workspace, encoded_xml=xliff)
865+
866+
867+
@gd_vcr.use_cassette(str(_fixtures_dir / "add_metadata_locale.yaml"))
868+
def test_add_metadata_locale(test_config):
869+
sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"])
870+
test_workspace = test_config["workspace"]
871+
872+
def translate(
873+
to_translate: str,
874+
already_translated: bool = False,
875+
old_translation: str = "",
876+
):
877+
return f"{to_translate}."
878+
879+
sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
880+
881+
xliff_before = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
882+
883+
sdk.catalog_workspace.add_metadata_locale(
884+
workspace_id=test_workspace, target_language="fr-FR", translator_func=translate, set_locale=False
885+
)
886+
887+
xliff_after = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
888+
889+
sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
890+
891+
assert xliff_before != xliff_after
892+
893+
894+
@gd_vcr.use_cassette(str(_fixtures_dir / "clean_metadata_locale.yaml"))
895+
def test_clean_metadata_locale(test_config):
896+
sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"])
897+
test_workspace = test_config["workspace"]
898+
899+
def translate(
900+
to_translate: str,
901+
already_translated: bool = False,
902+
old_translation: str = "",
903+
):
904+
return f"{to_translate}."
905+
906+
sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
907+
908+
xliff_before = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
909+
910+
sdk.catalog_workspace.add_metadata_locale(
911+
workspace_id=test_workspace, target_language="fr-FR", translator_func=translate, set_locale=False
912+
)
913+
914+
xliff_after = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
915+
916+
assert xliff_before != xliff_after
917+
918+
sdk.catalog_workspace.clean_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
919+
920+
xliff_after = sdk.catalog_workspace.get_metadata_localization(workspace_id=test_workspace, target_language="fr-FR")
921+
922+
assert xliff_before == xliff_after

tests-support/tests_support/vcrpy_utils.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,16 @@ def deserialize(self, cassette_string: str) -> dict[str, Any]:
4242
request_body = interaction["request"]["body"]
4343
response_body = interaction["response"]["body"]
4444
if request_body is not None:
45-
interaction["request"]["body"] = json.dumps(request_body)
45+
if isinstance(request_body, str) and request_body.startswith("<?xml"):
46+
interaction["request"]["body"] = request_body
47+
else:
48+
interaction["request"]["body"] = json.dumps(request_body)
4649
if response_body is not None and response_body["string"] != "":
4750
try:
48-
interaction["response"]["body"]["string"] = json.dumps(response_body["string"])
51+
if isinstance(response_body["string"], str) and response_body["string"].startswith("<?xml"):
52+
interaction["response"]["body"]["string"] = response_body["string"]
53+
else:
54+
interaction["response"]["body"]["string"] = json.dumps(response_body["string"])
4955
except TypeError:
5056
# this exception is expected while getting XLSX file content
5157
continue
@@ -56,7 +62,11 @@ def serialize(self, cassette_dict: dict[str, Any]) -> str:
5662
request_body = interaction["request"]["body"]
5763
response_body = interaction["response"]["body"]
5864
if request_body is not None:
59-
interaction["request"]["body"] = json.loads(request_body)
65+
try:
66+
interaction["request"]["body"] = json.loads(request_body)
67+
except (JSONDecodeError, UnicodeDecodeError):
68+
# The response can be in XML
69+
interaction["request"]["body"] = request_body
6070
if response_body is not None and response_body["string"] != "":
6171
try:
6272
interaction["response"]["body"]["string"] = json.loads(response_body["string"])

0 commit comments

Comments
 (0)