feat: introduce Vue Bootstrap interface and scoped router network status

This commit is contained in:
Codex
2026-10-05 20:23:05 +08:00
parent cf895110ee
commit 04d56d5aa2
48 changed files with 4096 additions and 145 deletions
+6 -5
View File
@@ -97,7 +97,7 @@ class WebTests(unittest.TestCase):
def test_live_quality_has_only_main_and_sub(self):
code, _, body = self.request('/', False)
self.assertEqual(code, 200)
select = re.search(r'<select id="quality">(.*?)</select>', body.decode()).group(1)
select = re.search(r'<select id="quality">(.*?)</select>', (app.ROOT/'frontend/src/components/Workspace.vue').read_text(encoding='utf8')).group(1)
self.assertEqual(re.findall(r'<option value="(.*?)">(.*?)</option>', select),
[('hd', '主码流'), ('compat', '子码流')])
@@ -106,12 +106,13 @@ class WebTests(unittest.TestCase):
self.assertEqual(code, 200)
self.assertEqual(headers['Cache-Control'], 'no-store')
self.assertNotIn(b'__ASSET_VERSION__', body)
assets = re.findall(r'(?:src|href)="(/[^"?]+\.(?:js|css)\?v=[^"]+)"', body.decode())
self.assertEqual(len(assets), 29)
version = (app.ROOT / 'VERSION').read_text().strip()
assets = re.findall(r'(?:src|href)="(/ui/assets/[^"?]+\.(?:js|css))"', body.decode())
self.assertEqual(len(assets), 2)
for asset in assets:
self.assertTrue(asset.endswith('?v=' + version))
self.assertRegex(asset,r'/ui/assets/index-[A-Za-z0-9_-]+\.(js|css)$')
self.assertEqual(self.request(asset, False)[0], 200)
for path in ['/ui/assets/../../vision.db','/ui/assets/missing.js','/ui/index.html']:
self.assertEqual(self.request(path,False)[0],404)
def test_origin_rejected(self):
self.assertEqual(self.request('/api/storage', data={}, origin='https://example.org')[0], 403)