feat: productize quota packages and recovery guidance
Some checks failed
StoryForge CI / Baseline checks (push) Has been cancelled
StoryForge CI / Backend tests (push) Has been cancelled
StoryForge CI / Web tests (push) Has been cancelled

This commit is contained in:
kris
2026-04-05 06:01:07 +08:00
parent c61c12127f
commit 2cb6d6b1aa
5 changed files with 490 additions and 69 deletions

View File

@@ -787,27 +787,92 @@ class MainAgentGovernanceTests(unittest.TestCase):
self.assertEqual(saved_registry["config"]["tone"], "sales")
self.assertEqual(saved_registry["source"], "override")
growth_preset = {
"monthly_budget_cents": 49900,
"storage_limit_bytes": 21474836480,
"analysis_quota": 160,
"copy_quota": 320,
"ai_video_quota": 12,
"real_cut_quota": 8,
"recorder_quota": 20,
}
quota_response = self.client.put(
"/v2/tenant/quota",
headers=self.ctx["member_headers"],
params={"project_id": self.ctx["project_id"]},
json={
"enabled": True,
"monthly_budget_cents": 12800,
"storage_limit_bytes": 987654321,
"analysis_quota": 21,
"copy_quota": 13,
"monthly_budget_cents": 1,
"storage_limit_bytes": 2,
"analysis_quota": 3,
"copy_quota": 4,
"ai_video_quota": 5,
"real_cut_quota": 4,
"recorder_quota": 9,
"config": {"warn_threshold": 0.8},
"real_cut_quota": 6,
"recorder_quota": 7,
"config": {"package_label": "growth", "warn_threshold": 0.8, "custom_note": "keep"},
},
)
self.assertEqual(quota_response.status_code, 200, quota_response.text)
quota_payload = quota_response.json()
self.assertEqual(quota_payload["monthly_budget_cents"], 12800)
self.assertEqual(quota_payload["analysis_quota"], 21)
self.assertEqual(quota_payload["package_label"], "growth")
self.assertEqual(quota_payload["monthly_budget_cents"], growth_preset["monthly_budget_cents"])
self.assertEqual(quota_payload["storage_limit_bytes"], growth_preset["storage_limit_bytes"])
self.assertEqual(quota_payload["analysis_quota"], growth_preset["analysis_quota"])
self.assertEqual(quota_payload["copy_quota"], growth_preset["copy_quota"])
self.assertEqual(quota_payload["ai_video_quota"], growth_preset["ai_video_quota"])
self.assertEqual(quota_payload["real_cut_quota"], growth_preset["real_cut_quota"])
self.assertEqual(quota_payload["recorder_quota"], growth_preset["recorder_quota"])
self.assertEqual(quota_payload["config"]["package_label"], "growth")
self.assertEqual(quota_payload["config"]["warn_threshold"], 0.8)
self.assertEqual(quota_payload["config"]["package_title"], "增长套餐")
self.assertTrue(quota_payload["config"]["package_is_preset"])
self.assertEqual(quota_payload["config"]["custom_note"], "keep")
quota_get_response = self.client.get(
"/v2/tenant/quota",
headers=self.ctx["member_headers"],
params={"project_id": self.ctx["project_id"]},
)
self.assertEqual(quota_get_response.status_code, 200, quota_get_response.text)
quota_get_payload = quota_get_response.json()
self.assertEqual(quota_get_payload["package_label"], "growth")
self.assertEqual(quota_get_payload["monthly_budget_cents"], growth_preset["monthly_budget_cents"])
self.assertEqual(quota_get_payload["config"]["package_label"], "growth")
self.assertEqual(quota_get_payload["config"]["warn_threshold"], 0.8)
self.assertEqual(quota_get_payload["config"]["package_title"], "增长套餐")
custom_response = self.client.put(
"/v2/tenant/quota",
headers=self.ctx["member_headers"],
params={"project_id": self.ctx["project_id"]},
json={
"enabled": False,
"monthly_budget_cents": 9100,
"storage_limit_bytes": 111,
"analysis_quota": 22,
"copy_quota": 33,
"ai_video_quota": 44,
"real_cut_quota": 55,
"recorder_quota": 66,
"config": {"package_label": "custom", "warn_threshold": 0.55, "custom_note": "manual"},
},
)
self.assertEqual(custom_response.status_code, 200, custom_response.text)
custom_payload = custom_response.json()
self.assertEqual(custom_payload["package_label"], "custom")
self.assertEqual(custom_payload["monthly_budget_cents"], 9100)
self.assertEqual(custom_payload["storage_limit_bytes"], 111)
self.assertEqual(custom_payload["analysis_quota"], 22)
self.assertEqual(custom_payload["copy_quota"], 33)
self.assertEqual(custom_payload["ai_video_quota"], 44)
self.assertEqual(custom_payload["real_cut_quota"], 55)
self.assertEqual(custom_payload["recorder_quota"], 66)
self.assertFalse(custom_payload["enabled"])
self.assertEqual(custom_payload["config"]["package_label"], "custom")
self.assertEqual(custom_payload["config"]["warn_threshold"], 0.55)
self.assertEqual(custom_payload["config"]["package_title"], "自定义套餐")
self.assertFalse(custom_payload["config"]["package_is_preset"])
self.assertEqual(custom_payload["config"]["custom_note"], "manual")
usage_response = self.client.get(
"/v2/tenant/usage",