Selaa lähdekoodia

test: close connector boundary contract gaps

马小龙 2 päivää sitten
vanhempi
commit
4ef7f6a78b
1 muutettua tiedostoa jossa 18 lisäystä ja 0 poistoa
  1. 18 0
      tests/test_enterprise_connector_metadata_frontend_contract.py

+ 18 - 0
tests/test_enterprise_connector_metadata_frontend_contract.py

@@ -95,9 +95,18 @@ def test_connector_prop_validators_execute_strict_database_and_rest_contracts():
         r"const\s+CONNECTOR_ID_PATTERN\s*=\s*(/[^\n;]+/)", source
     )
     assert pattern_match, "connector ID regex declaration is missing"
+    assert pattern_match.group(1) == "/^[a-z][a-z0-9_-]{2,63}$/"
 
     connector_validator = _validator_expression(connector_ids)
     mode_validator = _validator_expression(mode)
+    mode_values_match = re.fullmatch(
+        r"value\s*=>\s*\[\s*(.*?)\s*\]\.includes\(value\)", mode_validator
+    )
+    assert mode_values_match, "mode validator must be an explicit allowlist"
+    assert re.findall(r"['\"]([^'\"]+)['\"]", mode_values_match.group(1)) == [
+        "database",
+        "rest-catalog",
+    ]
     assert re.search(r"\btype\s*:\s*Array\b", connector_ids)
     assert re.search(r"\brequired\s*:\s*true\b", connector_ids)
     assert re.search(r"\btype\s*:\s*String\b", mode)
@@ -118,12 +127,16 @@ def test_connector_prop_validators_execute_strict_database_and_rest_contracts():
             nonString: connectorIdsValidator(['oracle', 7]),
             tooShort: connectorIdsValidator(['ab']),
             uppercase: connectorIdsValidator(['Oracle']),
+            dot: connectorIdsValidator(['oracle.prod']),
+            unsafeCharacter: connectorIdsValidator(['oracle%prod']),
+            maxLength: connectorIdsValidator(['a' + 'b'.repeat(63)]),
             tooLong: connectorIdsValidator(['a'.repeat(65)])
           }},
           modes: {{
             database: modeValidator('database'),
             restCatalog: modeValidator('rest-catalog'),
             metadata: modeValidator('metadata'),
+            thirdMode: modeValidator('catalog-v2'),
             empty: modeValidator(''),
             typo: modeValidator('rest_catalog')
           }}
@@ -136,12 +149,16 @@ def test_connector_prop_validators_execute_strict_database_and_rest_contracts():
         "nonString": False,
         "tooShort": False,
         "uppercase": False,
+        "dot": False,
+        "unsafeCharacter": False,
+        "maxLength": True,
         "tooLong": False,
     }
     assert results["modes"] == {
         "database": True,
         "restCatalog": True,
         "metadata": False,
+        "thirdMode": False,
         "empty": False,
         "typo": False,
     }
@@ -323,6 +340,7 @@ def test_operations_await_refresh_and_rest_configuration_is_mode_gated():
 def test_database_wrapper_is_database_only_and_keeps_scope_warning():
     source = DATABASE_PAGE.read_text(encoding="utf-8")
 
+    assert re.search(r"<h1\b[^>]*>\s*企业连接器\s*</h1>", source)
     assert "rest-catalog" not in source
     assert "当前开放范围仅限数据库访问。文件目录、对象存储、API 与消息系统等来源将在后续版本扩展开发。" in source
     assert re.search(