summaryrefslogtreecommitdiff
path: root/server/tests/common
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@spawned.biz>2025-06-12 09:11:18 +0200
committerJoel Klinghed <the_jk@spawned.biz>2025-06-19 00:19:37 +0200
commit2b54f5c51ff9a26d4077037631ed39d62ed2b3fb (patch)
tree8544278dba24645a063472a3005a3021879a4bf1 /server/tests/common
parentbaa7c85ff3db2366d67ac875fca48ad6dcabf212 (diff)
Initial support for translation reviews
Diffstat (limited to 'server/tests/common')
-rw-r--r--server/tests/common/mod.rs155
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))
+ }
+}