79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
from scripts.configure_cloudflare_free import (
|
|
MANAGED_RULE_REF_PREFIX,
|
|
build_managed_cache_rules,
|
|
merge_managed_rules,
|
|
resolve_zone_id,
|
|
)
|
|
|
|
|
|
def test_cloudflare_managed_rules_apply_path_specific_edge_ttls_then_bypass_sensitive_requests():
|
|
rules = build_managed_cache_rules()
|
|
|
|
assert [rule["ref"] for rule in rules] == [
|
|
f"{MANAGED_RULE_REF_PREFIX}static",
|
|
f"{MANAGED_RULE_REF_PREFIX}pages",
|
|
f"{MANAGED_RULE_REF_PREFIX}cities",
|
|
f"{MANAGED_RULE_REF_PREFIX}city_detail",
|
|
f"{MANAGED_RULE_REF_PREFIX}scan",
|
|
f"{MANAGED_RULE_REF_PREFIX}bypass",
|
|
]
|
|
assert [
|
|
rule["action_parameters"]["edge_ttl"]["status_code_ttl"][0]["value"]
|
|
for rule in rules[:3]
|
|
] == [31536000, 600, 300]
|
|
for rule in rules[:3]:
|
|
assert rule["action_parameters"]["cache"] is True
|
|
assert rule["action_parameters"]["browser_ttl"] == {"mode": "respect_origin"}
|
|
assert rule["action_parameters"]["edge_ttl"]["mode"] == "respect_origin"
|
|
assert rule["action_parameters"]["edge_ttl"]["status_code_ttl"][1]["value"] == 0
|
|
for rule in rules[3:-1]:
|
|
assert rule["action_parameters"] == {
|
|
"cache": True,
|
|
"browser_ttl": {"mode": "respect_origin"},
|
|
}
|
|
assert rules[-1]["action_parameters"]["cache"] is False
|
|
assert 'http.host eq "api.polyweather.top"' in rules[-1]["expression"]
|
|
assert 'http.request.uri.query contains "force_refresh=true"' in rules[-1]["expression"]
|
|
|
|
|
|
def test_cloudflare_rule_merge_preserves_unmanaged_rules_and_puts_bypass_last():
|
|
existing = [
|
|
{
|
|
"ref": "existing_rule",
|
|
"description": "keep me",
|
|
"expression": 'http.host eq "example.com"',
|
|
"action": "set_cache_settings",
|
|
"action_parameters": {"cache": True},
|
|
"enabled": True,
|
|
},
|
|
{
|
|
"ref": f"{MANAGED_RULE_REF_PREFIX}old",
|
|
"description": "replace me",
|
|
"expression": "true",
|
|
"action": "set_cache_settings",
|
|
"action_parameters": {"cache": False},
|
|
"enabled": True,
|
|
},
|
|
]
|
|
|
|
merged = merge_managed_rules(existing, build_managed_cache_rules())
|
|
|
|
assert [rule["ref"] for rule in merged] == [
|
|
"existing_rule",
|
|
f"{MANAGED_RULE_REF_PREFIX}static",
|
|
f"{MANAGED_RULE_REF_PREFIX}pages",
|
|
f"{MANAGED_RULE_REF_PREFIX}cities",
|
|
f"{MANAGED_RULE_REF_PREFIX}city_detail",
|
|
f"{MANAGED_RULE_REF_PREFIX}scan",
|
|
f"{MANAGED_RULE_REF_PREFIX}bypass",
|
|
]
|
|
assert merged[-1]["action_parameters"]["cache"] is False
|
|
|
|
|
|
def test_resolve_zone_id_uses_explicit_zone_id_without_listing_zones():
|
|
class FailingApi:
|
|
def request(self, *_args, **_kwargs):
|
|
raise AssertionError("explicit zone id should not require zone list access")
|
|
|
|
assert resolve_zone_id(FailingApi(), "polyweather.top", "zone_123") == "zone_123"
|