diff options
| author | Joel Klinghed <the_jk@spawned.biz> | 2025-06-12 09:11:18 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@spawned.biz> | 2025-06-19 00:19:37 +0200 |
| commit | 2b54f5c51ff9a26d4077037631ed39d62ed2b3fb (patch) | |
| tree | 8544278dba24645a063472a3005a3021879a4bf1 /server/tests/common | |
| parent | baa7c85ff3db2366d67ac875fca48ad6dcabf212 (diff) | |
Initial support for translation reviews
Diffstat (limited to 'server/tests/common')
| -rw-r--r-- | server/tests/common/mod.rs | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/server/tests/common/mod.rs b/server/tests/common/mod.rs index 5a7e30d..0a9556a 100644 --- a/server/tests/common/mod.rs +++ b/server/tests/common/mod.rs @@ -91,6 +91,75 @@ async fn git_cmd(base: impl AsRef<Path>, args: &[&str]) -> Result<(), anyhow::Er run(&mut cmd, "git command").await } +const STRINGS_GRD: &str = r#"<?xml version="1.0" encoding="UTF-8"?> +<grit current_release="1" latest_public_release="0"> + <outputs> + <output filename="values/strings.xml" type="android" lang="en" /> + <output filename="values-en-rGB/strings.xml" type="android" lang="en-GB" /> + <output filename="values-sv/strings.xml" type="android" lang="sv" /> + </outputs> + <translations> + <file path="translations/strings_en_gb.xlf" lang="en-GB" /> + <file path="translations/strings_sv.xlf" lang="sv" /> + </translations> + <release allow_pseudo="false" seq="1"> + <messages fallback_to_english="true"> + <part file="extra.grdp" /> + <message desc="Description" name="MAIN_STRING"> + Main test string + </message> + </messages> + </release> +</grit>"#; +const EXTRA_GRDP: &str = r#"<?xml version="1.0" encoding="utf-8"?> +<grit-part> + <message desc="Some description" name="EXTRA_STRING"> + Extra string, gray + </message> +</grit-part>"#; +const STRINGS_EN_GB_XLF: &str = r#"<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> +<file datatype="xml" source-language="en-US" original="strings.grd" target-language="en-gb"> +<body> +<trans-unit id="759906012366268261"> + <source>Main test string</source> + <target>Main test string</target> + <note>MAIN_STRING + Description + </note> +</trans-unit> +<trans-unit id="3195503415604121324"> + <source>Extra string, gray</source> + <target>Extra string, grey</target> + <note>EXTRA_STRING + Some description + </note> +</trans-unit> +</body> +</file> +</xliff>"#; +const STRINGS_SV_XLF: &str = r#"<?xml version="1.0" encoding="UTF-8"?> +<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> +<file datatype="xml" source-language="en-US" original="strings.grd" target-language="sv"> +<body> +<trans-unit id="759906012366268261"> + <source>Main test string</source> + <target>Primära teststrängen</target> + <note>MAIN_STRING + Description + </note> +</trans-unit> +<trans-unit id="3195503415604121324"> + <source>Extra string, gray</source> + <target>Extra sträng, grå</target> + <note>EXTRA_STRING + Some description + </note> +</trans-unit> +</body> +</file> +</xliff>"#; + impl DockerComposeContext { pub fn url(&self) -> &str { self.url.as_str() @@ -235,6 +304,47 @@ impl AsyncTestContext for DockerComposeContext { .await .expect("git push"); + fs::write(mod_path.join("fake/strings.grd"), STRINGS_GRD) + .await + .expect("Write strings.grd"); + fs::write(mod_path.join("fake/extra.grdp"), EXTRA_GRDP) + .await + .expect("Write extra.grdp"); + fs::create_dir(mod_path.join("fake/translations")) + .await + .expect("mkdir translations"); + fs::write( + mod_path.join("fake/translations/strings_en_gb.xlf"), + STRINGS_EN_GB_XLF, + ) + .await + .expect("Write strings_en_gb.xlf"); + fs::write( + mod_path.join("fake/translations/strings_sv.xlf"), + STRINGS_SV_XLF, + ) + .await + .expect("Write strings_sv"); + + git_cmd( + &mod_path, + &[ + "add", + "strings.grd", + "extra.grdp", + "translations/strings_en_gb.xlf", + "translations/strings_sv.xlf", + ], + ) + .await + .expect("git add"); + git_cmd(&mod_path, &["commit", "-m", "Add strings"]) + .await + .expect("git commit"); + git_cmd(&mod_path, &["push", "origin", "HEAD:main"]) + .await + .expect("git push"); + ctx } @@ -351,3 +461,48 @@ pub async fn list_reviews( Err(anyhow::Error::msg(content)) } } + +pub async fn create_translation_review( + ctx: &mut DockerComposeContext, + client: &mut Client, + projectid: &str, +) -> Result<api_model::TranslationReview, anyhow::Error> { + let data = api_model::TranslationReviewData { + title: "Test".to_string(), + description: "Some test".to_string(), + base: None, + }; + let result = client + .post(format!("{}/api/v1/translation/{projectid}/new", ctx.url())) + .json(&data) + .send() + .await?; + if result.status().is_success() { + let review = result.json::<api_model::TranslationReview>().await?; + Ok(review) + } else { + let content = result.text().await?; + Err(anyhow::Error::msg(content)) + } +} + +pub async fn list_translation_strings( + ctx: &mut DockerComposeContext, + client: &mut Client, + translation_reviewid: u64, +) -> Result<api_model::LocalizationStrings, anyhow::Error> { + let result = client + .get(format!( + "{}/api/v1/translation/{translation_reviewid}/strings", + ctx.url() + )) + .send() + .await?; + if result.status().is_success() { + let strings = result.json::<api_model::LocalizationStrings>().await?; + Ok(strings) + } else { + let content = result.text().await?; + Err(anyhow::Error::msg(content)) + } +} |
