diff --git a/app/activate/__tests__/page.test.tsx b/app/activate/__tests__/page.test.tsx index 5876f7f..d7ae4c4 100644 --- a/app/activate/__tests__/page.test.tsx +++ b/app/activate/__tests__/page.test.tsx @@ -3,7 +3,7 @@ */ /** * 激活页面测试 - * 测试许可证激活和免费试用功能 + * 测试许可证激活和自助试用功能 */ import { render, screen, fireEvent, waitFor, act } from '@testing-library/react'; import ActivatePage from '../page'; @@ -60,6 +60,7 @@ describe('ActivatePage', () => { beforeEach(() => { jest.clearAllMocks(); (global.fetch as jest.Mock).mockReset(); + delete process.env.NEXT_PUBLIC_ENABLE_FREE_TRIAL_ACTIVATION; mockFetchRoutes({ '/api/license/check': createJsonResponse({ activated: false }), '*': createJsonResponse({ success: true }), @@ -71,20 +72,20 @@ describe('ActivatePage', () => { await renderPage(); expect(screen.getByText('FLNXI 素材系统')).toBeInTheDocument(); - expect(screen.getByText('请激活您的许可证')).toBeInTheDocument(); + expect(screen.getByText('请输入交付给您的许可证密钥')).toBeInTheDocument(); expect(screen.getByPlaceholderText('XXXX-XXXX-XXXX-XXXX')).toBeInTheDocument(); expect(screen.getByText('激活许可证')).toBeInTheDocument(); - expect(screen.getByText('免费试用')).toBeInTheDocument(); + expect(screen.queryByText('自助试用')).not.toBeInTheDocument(); }); - it('应该显示免费版限制说明', async () => { + it('默认不显示自助试用说明', async () => { await renderPage(); - expect(screen.getByText('免费版限制:10 个用户、100 个素材')).toBeInTheDocument(); + expect(screen.queryByText('自助试用会按当前授权服务规则生成受限许可证')).not.toBeInTheDocument(); }); it('应该显示联系信息', async () => { await renderPage(); - expect(screen.getByText('需要购买许可证?请联系我们')).toBeInTheDocument(); + expect(screen.getByText('如需许可证,请联系系统交付人员或管理员')).toBeInTheDocument(); }); }); @@ -285,24 +286,28 @@ describe('ActivatePage', () => { }); }); - describe('免费试用', () => { - it('点击免费试用按钮应该显示客户名称输入弹窗', async () => { + describe('自助试用(显式开关开启时)', () => { + beforeEach(() => { + process.env.NEXT_PUBLIC_ENABLE_FREE_TRIAL_ACTIVATION = 'true'; + }); + + it('点击自助试用按钮应该显示交付单位输入弹窗', async () => { await renderPage(); - const button = screen.getByText('免费试用'); + const button = screen.getByText('自助试用'); await act(async () => { fireEvent.click(button); }); - expect(screen.getByText('申请免费试用')).toBeInTheDocument(); - expect(screen.getByPlaceholderText('请输入您的公司或个人名称')).toBeInTheDocument(); + expect(screen.getByText('申请自助试用')).toBeInTheDocument(); + expect(screen.getByPlaceholderText('请输入单位或团队名称')).toBeInTheDocument(); expect(screen.getByText('确认申请')).toBeInTheDocument(); expect(screen.getByText('取消')).toBeInTheDocument(); }); it('未输入客户名称时确认申请按钮应该禁用', async () => { await renderPage(); - const freeTrialButton = screen.getByText('免费试用'); + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); @@ -314,13 +319,13 @@ describe('ActivatePage', () => { it('只输入客户名称未输入联系方式时确认申请按钮应该禁用', async () => { await renderPage(); - const freeTrialButton = screen.getByText('免费试用'); + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); }); - const nameInput = screen.getByPlaceholderText('请输入您的公司或个人名称'); + const nameInput = screen.getByPlaceholderText('请输入单位或团队名称'); fireEvent.change(nameInput, { target: { value: '测试公司' } }); const confirmButton = screen.getByText('确认申请'); @@ -329,13 +334,13 @@ describe('ActivatePage', () => { it('输入客户名称和联系方式后确认申请按钮应该启用', async () => { await renderPage(); - const freeTrialButton = screen.getByText('免费试用'); + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); }); - const nameInput = screen.getByPlaceholderText('请输入您的公司或个人名称'); + const nameInput = screen.getByPlaceholderText('请输入单位或团队名称'); const contactInput = screen.getByPlaceholderText('手机号/微信/邮箱'); fireEvent.change(nameInput, { target: { value: '测试公司' } }); fireEvent.change(contactInput, { target: { value: '13800138000' } }); @@ -346,23 +351,23 @@ describe('ActivatePage', () => { it('点击取消按钮应该关闭弹窗', async () => { await renderPage(); - const freeTrialButton = screen.getByText('免费试用'); + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); }); - expect(screen.getByText('申请免费试用')).toBeInTheDocument(); + expect(screen.getByText('申请自助试用')).toBeInTheDocument(); const cancelButton = screen.getByText('取消'); await act(async () => { fireEvent.click(cancelButton); }); - expect(screen.queryByText('申请免费试用')).not.toBeInTheDocument(); + expect(screen.queryByText('申请自助试用')).not.toBeInTheDocument(); }); - it('免费试用成功后应该显示成功页面', async () => { + it('自助试用成功后应该显示成功页面', async () => { mockFetchRoutes({ '/api/license/check': createJsonResponse({ activated: false }), '/api/license/activate-free': createJsonResponse({ @@ -378,14 +383,14 @@ describe('ActivatePage', () => { await renderPage(); - // 点击免费试用按钮打开弹窗 - const freeTrialButton = screen.getByText('免费试用'); + // 点击自助试用按钮打开弹窗 + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); }); // 输入客户名称和联系方式 - const nameInput = screen.getByPlaceholderText('请输入您的公司或个人名称'); + const nameInput = screen.getByPlaceholderText('请输入单位或团队名称'); const contactInput = screen.getByPlaceholderText('手机号/微信/邮箱'); fireEvent.change(nameInput, { target: { value: '测试公司' } }); fireEvent.change(contactInput, { target: { value: '13800138000' } }); @@ -408,7 +413,7 @@ describe('ActivatePage', () => { }); }); - it('免费试用失败应该显示错误信息', async () => { + it('自助试用失败应该显示错误信息', async () => { mockFetchRoutes({ '/api/license/check': createJsonResponse({ activated: false }), '/api/license/activate-free': createJsonResponse({ success: false, error: '试用已过期' }), @@ -416,14 +421,14 @@ describe('ActivatePage', () => { await renderPage(); - // 点击免费试用按钮打开弹窗 - const freeTrialButton = screen.getByText('免费试用'); + // 点击自助试用按钮打开弹窗 + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); }); // 输入客户名称和联系方式 - const nameInput = screen.getByPlaceholderText('请输入您的公司或个人名称'); + const nameInput = screen.getByPlaceholderText('请输入单位或团队名称'); const contactInput = screen.getByPlaceholderText('手机号/微信/邮箱'); fireEvent.change(nameInput, { target: { value: '测试公司' } }); fireEvent.change(contactInput, { target: { value: '13800138000' } }); @@ -447,14 +452,14 @@ describe('ActivatePage', () => { await renderPage(); - // 点击免费试用按钮打开弹窗 - const freeTrialButton = screen.getByText('免费试用'); + // 点击自助试用按钮打开弹窗 + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); }); // 输入客户名称和联系方式 - const nameInput = screen.getByPlaceholderText('请输入您的公司或个人名称'); + const nameInput = screen.getByPlaceholderText('请输入单位或团队名称'); const contactInput = screen.getByPlaceholderText('手机号/微信/邮箱'); fireEvent.change(nameInput, { target: { value: '测试公司' } }); fireEvent.change(contactInput, { target: { value: '13800138000' } }); @@ -472,7 +477,7 @@ describe('ActivatePage', () => { it('应该显示联系方式输入框', async () => { await renderPage(); - const freeTrialButton = screen.getByText('免费试用'); + const freeTrialButton = screen.getByText('自助试用'); await act(async () => { fireEvent.click(freeTrialButton); diff --git a/app/activate/page.tsx b/app/activate/page.tsx index 0036529..74919d4 100644 --- a/app/activate/page.tsx +++ b/app/activate/page.tsx @@ -5,6 +5,7 @@ import { useRouter } from 'next/navigation'; export default function ActivatePage() { const router = useRouter(); + const freeTrialActivationEnabled = process.env.NEXT_PUBLIC_ENABLE_FREE_TRIAL_ACTIVATION === 'true'; const [initialAdmin, setInitialAdmin] = useState<{ email: string; username: string; @@ -90,15 +91,25 @@ export default function ActivatePage() { } }; - // 打开免费试用弹窗 + // 打开自助试用弹窗 const openFreeTrialModal = () => { + if (!freeTrialActivationEnabled) { + setError('当前部署未开放自助试用,请使用许可证密钥或联系系统交付人员'); + return; + } setCustomerName(''); setContactInfo(''); setShowFreeTrialModal(true); }; - // 免费试用 + // 自助试用 const handleFreeTrial = async () => { + if (!freeTrialActivationEnabled) { + setError('当前部署未开放自助试用,请使用许可证密钥或联系系统交付人员'); + setShowFreeTrialModal(false); + return; + } + const trimmedName = customerName.trim(); const trimmedContact = contactInfo.trim(); @@ -238,7 +249,7 @@ export default function ActivatePage() { {/* Logo */}
请激活您的许可证
+请输入交付给您的许可证密钥
- 免费版限制:10 个用户、100 个素材 -
+ {/* 免费版说明 */} ++ 自助试用会按当前授权服务规则生成受限许可证 +
+ > + )} {/* 联系信息 */}- 需要购买许可证?请联系我们 + 如需许可证,请联系系统交付人员或管理员
- {/* 免费试用弹窗 */} - {showFreeTrialModal && ( + {/* 自助试用弹窗 */} + {freeTrialActivationEnabled && showFreeTrialModal && (