import json from pathlib import Path import re import textwrap import unittest SCENARIO = ( Path(__file__).parents[1] / "scenario_testcases" / "ng_backups_operation.yaml" ) def extract_embedded_json(step: str, field: str) -> dict: match = re.search( rf"(?ms)^ {field}: \|-\n(?P.*?)(?=^ [a-z_]+:)", step, ) if match is None: raise AssertionError(f"missing embedded JSON field: {field}") return json.loads(textwrap.dedent(match.group("value"))) class NgBackupsOperationPaginationTest(unittest.TestCase): @classmethod def setUpClass(cls) -> None: content = SCENARIO.read_text(encoding="utf-8") cls.list_steps = re.findall( r"(?ms)^- operation_id: BackupService_ListBackups\n.*?(?=^- operation_id: |\Z)", content, ) def test_lists_only_five_backups_without_requiring_the_full_result_set(self) -> None: self.assertEqual(len(self.list_steps), 1) step = self.list_steps[0] request = extract_embedded_json(step, "request") expect = extract_embedded_json(step, "expect") save = extract_embedded_json(step, "save") self.assertEqual(request["query_params"]["pageSize"], 5) self.assertNotIn("tidbIds", request["query_params"]) self.assertEqual(request["query_params"]["states"], ["SUCCEEDED"]) self.assertEqual(request["query_params"]["triggerTypes"], ["AUTO"]) self.assertEqual(expect["cel"], "body.totalSize > 0") self.assertEqual(save["placeholder"][0]["key"], "backup_1") self.assertIn("timestamp(other.createTime)", save["placeholder"][0]["eval"]) if __name__ == "__main__": unittest.main()