订单需管理员审核后才开通节点,并更新登录页文案。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -295,6 +295,63 @@ class CoreFlowTest(unittest.TestCase):
|
||||
wallet_admin = self.client.post("/api/v1/auth/login", json={"wallet_address": "admin-root"})
|
||||
self.assertEqual(wallet_admin.status_code, 403, wallet_admin.text)
|
||||
|
||||
def test_order_stays_locked_until_admin_approves(self) -> None:
|
||||
registered = self.client.post(
|
||||
"/api/v1/auth/register",
|
||||
json={"wallet_address": "0xbuyer01", "username": "buyer", "password": "secret1"},
|
||||
)
|
||||
self.assertEqual(registered.status_code, 200, registered.text)
|
||||
headers = {"Authorization": f"Bearer {registered.json()['access_token']}"}
|
||||
|
||||
created = self.client.post("/api/v1/me/orders", headers=headers, json={"tx_id": "paytx1500usdt01"})
|
||||
self.assertEqual(created.status_code, 200, created.text)
|
||||
self.assertEqual(created.json()["status"], "pending")
|
||||
self.assertEqual(created.json()["amount"], "1500.00000000")
|
||||
order_id = created.json()["id"]
|
||||
|
||||
denied = self.client.post(f"/api/v1/admin/orders/{order_id}/approve", headers=headers)
|
||||
self.assertEqual(denied.status_code, 403, denied.text)
|
||||
board = self.client.get("/api/v1/me/dashboard", headers=headers)
|
||||
self.assertEqual(board.status_code, 200, board.text)
|
||||
self.assertEqual(board.json()["orders"][0]["status"], "pending")
|
||||
self.assertEqual(board.json()["nodes"], [])
|
||||
|
||||
approved = self.client.post(f"/api/v1/admin/orders/{order_id}/approve", headers=self._admin_headers())
|
||||
self.assertEqual(approved.status_code, 200, approved.text)
|
||||
self.assertEqual(approved.json()["status"], "approved")
|
||||
sn = approved.json()["sn"]
|
||||
self.assertTrue(sn)
|
||||
|
||||
board = self.client.get("/api/v1/me/dashboard", headers=headers)
|
||||
node = board.json()["nodes"][0]
|
||||
self.assertEqual(node["sn"], sn)
|
||||
self.assertTrue(node["activated"])
|
||||
self.assertTrue(node["node_token"])
|
||||
self.assertEqual(node["license_months"], 12)
|
||||
|
||||
missing = self.client.post("/api/v1/node/heartbeat", json={"sn": sn})
|
||||
self.assertEqual(missing.status_code, 403, missing.text)
|
||||
beat = self.client.post("/api/v1/node/heartbeat", json={"sn": sn, "token": node["node_token"]})
|
||||
self.assertEqual(beat.status_code, 200, beat.text)
|
||||
self.assertEqual(beat.json()["status"], "online")
|
||||
|
||||
client = self.client.get(f"/api/v1/me/nodes/{sn}/client", headers=headers)
|
||||
self.assertEqual(client.status_code, 200, client.text)
|
||||
self.assertIn(node["node_token"], client.text)
|
||||
|
||||
duplicated = self.client.post("/api/v1/me/orders", headers=headers, json={"tx_id": "paytx1500usdt01"})
|
||||
self.assertEqual(duplicated.status_code, 409, duplicated.text)
|
||||
rejected_order = self.client.post("/api/v1/me/orders", headers=headers, json={"tx_id": "paytxrejected01"})
|
||||
self.assertEqual(rejected_order.status_code, 200, rejected_order.text)
|
||||
rejected = self.client.post(
|
||||
f"/api/v1/admin/orders/{rejected_order.json()['id']}/reject",
|
||||
headers=self._admin_headers(),
|
||||
json={"note": "凭证无效"},
|
||||
)
|
||||
self.assertEqual(rejected.status_code, 200, rejected.text)
|
||||
self.assertEqual(rejected.json()["status"], "rejected")
|
||||
self.assertIsNone(rejected.json()["sn"])
|
||||
|
||||
def _auth(self, wallet: str) -> dict[str, str]:
|
||||
logged = self.client.post("/api/v1/auth/login", json={"wallet_address": wallet})
|
||||
self.assertEqual(logged.status_code, 200, logged.text)
|
||||
|
||||
Reference in New Issue
Block a user