feat(managed-ne): tag stats cards and bulk ops by tag

Add tags/remark to import template, stats/ids-by-tag APIs, per-tag overview sub-cards, and bulk proxy/connect-test dialogs filtered by tag.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-06-05 16:13:31 +08:00
parent d23b5b7cb0
commit 06a5615095
9 changed files with 492 additions and 4 deletions

View file

@ -117,9 +117,34 @@ class ManagedNeApiTests(unittest.TestCase):
self.assertEqual(r4.status_code, 200)
self.assertEqual(r4.json()["total"], 1)
r4b = self.client.get("/v1/managed-ne", params={"keyword": "pe-01"})
self.assertEqual(r4b.status_code, 200)
self.assertEqual(r4b.json()["total"], 1)
r5 = self.client.delete(f"/v1/managed-ne/{ne_id}")
self.assertEqual(r5.status_code, 200)
def test_list_keyword_case_insensitive(self):
r = self.client.post(
"/v1/managed-ne",
json={
"name": "Core-R1",
"vendor": "Cisco",
"device_type": "cisco_ios",
"ip_address": "192.168.0.11",
"username": "admin",
"password": "pass123",
},
)
self.assertEqual(r.status_code, 200, r.text)
ne_id = r.json()["id"]
for kw in ("R1", "r1", "core-r1"):
with self.subTest(keyword=kw):
listed = self.client.get("/v1/managed-ne", params={"keyword": kw})
self.assertEqual(listed.status_code, 200)
self.assertEqual(listed.json()["total"], 1, listed.text)
self.client.delete(f"/v1/managed-ne/{ne_id}")
def test_create_without_crypto_key(self):
settings.credential_secret_key = ""
r = self.client.post(