文件
nahaichuan/tests/test_vivid_banners.py

83 行
4.1 KiB
Python

# -*- coding: utf-8 -*-
"""
测试鲜明轮播图系统 (Test Vivid Banner Carousel System)
验证首屏 4 张轮播图的鲜明度、专业业务实体感、无AI味、CSS通透遮罩以及全端结构完整性。
"""
import os
import re
import unittest
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
BANNER_DIR = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "images", "banners")
CSS_PATH = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "css", "modern_nhc.css")
PC_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index.html")
M_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index_e.html")
class VividBannerCarouselTest(unittest.TestCase):
"""验证鲜明高质感轮播图组件"""
def test_01_banner_files_exist_and_non_empty(self):
"""1. 验证 4 张核心轮播图资源物理存在且大小合理"""
banners = ["banner_lead", "banner_craft", "banner_agent", "banner_matrix"]
for b in banners:
svg_file = os.path.join(BANNER_DIR, f"{b}.svg")
jpg_file = os.path.join(BANNER_DIR, f"{b}.jpg")
# 必须至少有一种高质感格式存在,且文件大小大于 2KB
exists = False
if os.path.exists(svg_file) and os.path.getsize(svg_file) > 2048:
exists = True
elif os.path.exists(jpg_file) and os.path.getsize(jpg_file) > 2048:
exists = True
self.assertTrue(exists, f"轮播图文件不存在或过小: {b}")
def test_02_css_gradient_mask_not_obscuring_right_visual(self):
"""2. 验证 CSS 渐变遮罩优化:右侧区域必须保持通透,严禁在 50% 处覆盖 >90% 重度白雾"""
with open(CSS_PATH, "r", encoding="utf-8") as f:
css_content = f.read()
# 检查 4 个 slide 主题
for i in range(1, 5):
theme_class = f".nhc-slide-theme-{i}"
self.assertIn(theme_class, css_content, f"CSS 中缺少主题定义: {theme_class}")
# 检查是否去除了原本在 50% 覆盖 0.92 白色的遮罩问题
# 原写法: rgba(255, 255, 255, 0.92) 50%
# 优化后右侧主体应通透,不再出现 50% 处 0.92 白
self.assertNotIn("rgba(255, 255, 255, 0.92) 50%", css_content,
"CSS 仍保留 50% 处 92% 重度白色遮罩,导致右侧鲜明视窗被严重冲淡泛白")
def test_03_banner_rich_content_and_vivid_colors(self):
"""3. 验证轮播图包含真实工业级软件要素与鲜明品牌色彩 (科技蓝 #2563EB, 辅助青 #06B6D4, 紫 #7C3AED)"""
svg_banners = {
"banner_lead": ["2563EB", "06B6D4", "QPS", "微服务"],
"banner_craft": ["2563EB", "06B6D4", "小程序", "API"],
"banner_agent": ["7C3AED", "2563EB", "RAG", "Agent"],
"banner_matrix": ["2563EB", "POS", "ERP", "SaaS"]
}
for b, expected_keywords in svg_banners.items():
svg_file = os.path.join(BANNER_DIR, f"{b}.svg")
if os.path.exists(svg_file):
with open(svg_file, "r", encoding="utf-8") as f:
content = f.read()
for kw in expected_keywords:
self.assertTrue(
kw.lower() in content.lower(),
f"轮播图 {b}.svg 缺少业务要素或鲜明特征词: {kw}"
)
def test_04_pc_and_mobile_template_integrity(self):
"""4. 验证 PC 与移动端模板幻灯片数量均为 4,包含对应的主题类名"""
for page_path in [PC_HOME_PATH, M_HOME_PATH]:
with open(page_path, "r", encoding="utf-8") as f:
html = f.read()
for i in range(1, 5):
self.assertIn(f"nhc-slide-theme-{i}", html, f"页面缺少主题类 nhc-slide-theme-{i}: {page_path}")
# 必须包含 4 个幻灯片标识
self.assertEqual(len(re.findall(r'nhc-slide-theme-\d', html)), 4, f"幻灯片数量不等于 4: {page_path}")
if __name__ == "__main__":
unittest.main()