kin: auto-commit after pipeline
This commit is contained in:
parent
12fed3e31f
commit
49ea6542b8
8 changed files with 720 additions and 35 deletions
|
|
@ -23,6 +23,8 @@ vi.mock('../../api', async (importOriginal) => {
|
|||
...actual,
|
||||
api: {
|
||||
projects: vi.fn(),
|
||||
projectLinks: vi.fn(),
|
||||
patchProject: vi.fn(),
|
||||
},
|
||||
}
|
||||
})
|
||||
|
|
@ -73,6 +75,8 @@ function makeRouter() {
|
|||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
vi.mocked(api.projectLinks).mockResolvedValue([])
|
||||
vi.mocked(api.patchProject).mockResolvedValue({} as any)
|
||||
})
|
||||
|
||||
async function mountSettings(overrides: Partial<typeof BASE_PROJECT> = {}) {
|
||||
|
|
@ -123,3 +127,76 @@ describe('SettingsView — навигатор', () => {
|
|||
expect(wrapper.text()).not.toContain('auto_complete')
|
||||
})
|
||||
})
|
||||
|
||||
// --- KIN-120: Isolation and field presence tests ---
|
||||
|
||||
async function mountSettingsMultiple(projects: Partial<typeof BASE_PROJECT>[]) {
|
||||
vi.mocked(api.projects).mockResolvedValue(projects as any[])
|
||||
const router = makeRouter()
|
||||
await router.push('/settings')
|
||||
const wrapper = mount(SettingsView, { global: { plugins: [router] } })
|
||||
await flushPromises()
|
||||
return wrapper
|
||||
}
|
||||
|
||||
describe('SettingsView — изоляция настроек проектов', () => {
|
||||
it('obsidian_vault_path proj-1 и proj-2 независимы', async () => {
|
||||
const proj1 = { ...BASE_PROJECT, id: 'proj-1', obsidian_vault_path: '/vault/proj1' }
|
||||
const proj2 = { ...BASE_PROJECT, id: 'proj-2', name: 'Second Project', obsidian_vault_path: '/vault/proj2' }
|
||||
const wrapper = await mountSettingsMultiple([proj1, proj2])
|
||||
const inputs = wrapper.findAll('input[placeholder="/path/to/obsidian/vault"]')
|
||||
expect(inputs).toHaveLength(2)
|
||||
expect((inputs[0].element as HTMLInputElement).value).toBe('/vault/proj1')
|
||||
expect((inputs[1].element as HTMLInputElement).value).toBe('/vault/proj2')
|
||||
})
|
||||
|
||||
it('test_command proj-1 не перекрывает test_command proj-2', async () => {
|
||||
const proj1 = { ...BASE_PROJECT, id: 'proj-1', test_command: 'make test' }
|
||||
const proj2 = { ...BASE_PROJECT, id: 'proj-2', name: 'Second Project', test_command: 'npm test' }
|
||||
const wrapper = await mountSettingsMultiple([proj1, proj2])
|
||||
const inputs = wrapper.findAll('input[placeholder="make test"]')
|
||||
expect(inputs).toHaveLength(2)
|
||||
expect((inputs[0].element as HTMLInputElement).value).toBe('make test')
|
||||
expect((inputs[1].element as HTMLInputElement).value).toBe('npm test')
|
||||
})
|
||||
|
||||
it('deploy_host proj-1 не перекрывает deploy_host proj-2', async () => {
|
||||
const proj1 = { ...BASE_PROJECT, id: 'proj-1', deploy_host: 'server-a' }
|
||||
const proj2 = { ...BASE_PROJECT, id: 'proj-2', name: 'Second Project', deploy_host: 'server-b' }
|
||||
const wrapper = await mountSettingsMultiple([proj1, proj2])
|
||||
const inputs = wrapper.findAll('input[placeholder="server host (e.g. vdp-prod)"]')
|
||||
expect(inputs).toHaveLength(2)
|
||||
expect((inputs[0].element as HTMLInputElement).value).toBe('server-a')
|
||||
expect((inputs[1].element as HTMLInputElement).value).toBe('server-b')
|
||||
})
|
||||
})
|
||||
|
||||
describe('SettingsView — наличие полей настроек', () => {
|
||||
it('показывает поле obsidian_vault_path', async () => {
|
||||
const wrapper = await mountSettings({ obsidian_vault_path: '/vault/test' })
|
||||
const input = wrapper.find('input[placeholder="/path/to/obsidian/vault"]')
|
||||
expect(input.exists()).toBe(true)
|
||||
expect((input.element as HTMLInputElement).value).toBe('/vault/test')
|
||||
})
|
||||
|
||||
it('показывает поле test_command с корректным значением', async () => {
|
||||
const wrapper = await mountSettings({ test_command: 'pytest tests/' })
|
||||
const input = wrapper.find('input[placeholder="make test"]')
|
||||
expect(input.exists()).toBe(true)
|
||||
expect((input.element as HTMLInputElement).value).toBe('pytest tests/')
|
||||
})
|
||||
|
||||
it('показывает поле deploy_host', async () => {
|
||||
const wrapper = await mountSettings({ deploy_host: 'my-server' })
|
||||
const input = wrapper.find('input[placeholder="server host (e.g. vdp-prod)"]')
|
||||
expect(input.exists()).toBe(true)
|
||||
expect((input.element as HTMLInputElement).value).toBe('my-server')
|
||||
})
|
||||
|
||||
it('показывает поле deploy_path', async () => {
|
||||
const wrapper = await mountSettings({ deploy_path: '/srv/app' })
|
||||
const input = wrapper.find('input[placeholder="/srv/myproject"]')
|
||||
expect(input.exists()).toBe(true)
|
||||
expect((input.element as HTMLInputElement).value).toBe('/srv/app')
|
||||
})
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue