feat: 强化打包配置与服务安全

This commit is contained in:
shen
2026-07-18 13:30:56 +08:00
parent d1f070b251
commit a48909f3bc
26 changed files with 779 additions and 203 deletions
@@ -0,0 +1,96 @@
import { describe, expect, it, vi } from 'vitest'
import { flushPromises, mount } from '@vue/test-utils'
import { createMemoryHistory, createRouter } from 'vue-router'
import BuildView from '../views/BuildView.vue'
const createTestRouter = () => createRouter({
history: createMemoryHistory(),
routes: [{ path: '/build', component: BuildView }],
})
const mountBuildView = async () => {
const router = createTestRouter()
await router.push('/build')
await router.isReady()
global.fetch = vi.fn((url) => {
const responses = {
'/api/apps': {
'1': { name: '测试阅读', server: '测试环境' },
'2': { name: '正式阅读', server: '正式环境' },
'3': { name: '测试词典', server: '测试环境' },
},
'/api/schemes': { '1': { name: 'readoor31' } },
'/api/branches': ['main'],
'/api/tasks': [],
}
return Promise.resolve({ ok: true, json: () => Promise.resolve(responses[url] || {}) })
})
const wrapper = mount(BuildView, {
global: {
plugins: [router],
provide: { getToken: () => '' },
},
})
await flushPromises()
return wrapper
}
describe('BuildView server environment filter', () => {
it('filters Apps by the selected server environment', async () => {
const wrapper = await mountBuildView()
const selects = wrapper.findAll('select')
const serverSelect = selects[0]
const appSelect = selects[1]
expect(appSelect.attributes('disabled')).toBeDefined()
await serverSelect.setValue('测试环境')
expect(appSelect.text()).toContain('测试阅读')
expect(appSelect.text()).toContain('测试词典')
expect(appSelect.text()).not.toContain('正式阅读')
})
it('clears the selected App when switching environments', async () => {
const wrapper = await mountBuildView()
const selects = wrapper.findAll('select')
const serverSelect = selects[0]
const appSelect = selects[1]
await serverSelect.setValue('测试环境')
await appSelect.setValue('1')
expect(wrapper.vm.form.app_id).toBe('1')
await serverSelect.setValue('正式环境')
expect(wrapper.vm.form.app_id).toBe('')
expect(appSelect.text()).toContain('正式阅读')
expect(appSelect.text()).not.toContain('测试阅读')
})
it('only offers configured build types and special App Schemes', async () => {
const wrapper = await mountBuildView()
await wrapper.setData({
apps: {
'1': {
name: '英汉大词典',
server: '测试环境',
certificates: { App_Store: { name: 'com.dictionary.app' } },
allowed_scheme_names: ['readoorDict'],
},
},
schemes: {
'1': { name: 'readoor31' },
'2': { name: 'readoorDict' },
},
})
const selects = wrapper.findAll('select')
await selects[0].setValue('测试环境')
await selects[1].setValue('1')
expect(selects[2].text()).toContain('App_Store')
expect(selects[2].text()).not.toContain('Ad_Hoc')
expect(selects[3].text()).toContain('readoorDict')
expect(selects[3].text()).not.toContain('readoor31')
})
})