feat(onboarding): add first-run membership activation

This commit is contained in:
chengma
2026-07-23 17:29:16 +08:00
parent a0862dacbd
commit 7dabeb9971
15 changed files with 855 additions and 36 deletions
+31
View File
@@ -64,6 +64,35 @@ class SubscriptionTests(TempDirMixin, unittest.TestCase):
)
self.assertEqual("GET", calls[0][0][0])
self.assertNotIn("test-key", repr(result))
self.assertTrue(result.credentials_accepted)
def test_in_memory_key_override_is_used_without_persisting_it(self):
with self.make_temp_dir() as temp_dir:
config = self._config(temp_dir)
appconfig.save_cmhub_config({"api_key": ""}, path=config["cmhub_config_path"])
calls = []
def request_json(*args, **kwargs):
calls.append((args, kwargs))
return {
"product_code": "cmshopee",
"account": {"display_name": "新账号"},
"plan": {"display_name": "测试套餐"},
"status": "active",
"expires_at": "2026-08-20T23:59:59+08:00",
}
result = subscription.check_status(
config,
base_url="https://activation.example.com/api/v1",
api_key="temporary-test-key",
request_json=request_json,
)
self.assertEqual(subscription.STATUS_ACTIVE, result.state)
self.assertEqual("https://activation.example.com", calls[0][0][1])
self.assertEqual("temporary-test-key", calls[0][0][3])
self.assertEqual("", appconfig.get_cmhub_api_key(config["cmhub_config_path"]))
def test_grace_and_expired_states_are_distinct(self):
with self.make_temp_dir() as temp_dir:
@@ -125,6 +154,7 @@ class SubscriptionTests(TempDirMixin, unittest.TestCase):
result = subscription.check_status(config, request_json=invalid_key)
self.assertEqual(subscription.STATUS_KEY_INVALID, result.state)
self.assertNotIn("不应展示", result.user_message)
self.assertFalse(result.credentials_accepted)
def network_failure(*args, **kwargs):
raise ai.CMHubError("network_error", "不应展示")
@@ -132,6 +162,7 @@ class SubscriptionTests(TempDirMixin, unittest.TestCase):
result = subscription.check_status(config, request_json=network_failure)
self.assertEqual(subscription.STATUS_UNAVAILABLE, result.state)
self.assertNotIn("不应展示", result.user_message)
self.assertFalse(result.credentials_accepted)
def test_invalid_product_or_external_manage_url_is_not_trusted(self):
with self.make_temp_dir() as temp_dir: