ASCIInator/src/components/__tests__/ToolSelector.spec.js

51 lines
1.7 KiB
JavaScript
Raw Normal View History

import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import ToolSelector from '../ToolSelector.vue'
describe('ToolSelector', () => {
it('renders four tool buttons', () => {
const wrapper = mount(ToolSelector)
expect(wrapper.findAll('button').length).toBe(4)
})
it('emits tool-config immediately with chafa as default', () => {
const wrapper = mount(ToolSelector)
const emitted = wrapper.emitted('tool-config')
expect(emitted).toBeTruthy()
expect(emitted[0][0].tool).toBe('chafa')
})
it('strips empty and false flag values before emitting', () => {
const wrapper = mount(ToolSelector)
const flags = wrapper.emitted('tool-config')[0][0].flags
const hasEmpty = Object.values(flags).some((v) => v === '' || v === false)
expect(hasEmpty).toBe(false)
})
it('switches active tool and emits updated tool-config', async () => {
const wrapper = mount(ToolSelector)
const buttons = wrapper.findAll('button')
await buttons[1].trigger('click') // jp2a
const emitted = wrapper.emitted('tool-config')
const latest = emitted[emitted.length - 1][0]
expect(latest.tool).toBe('jp2a')
})
it('preserves flags for a tool when switching away and back', async () => {
const wrapper = mount(ToolSelector)
const [chafaBtn, jp2aBtn] = wrapper.findAll('button')
// Set width on chafa via ChafaOptions input
const widthInput = wrapper.find('input[type="number"]')
await widthInput.setValue('120')
// Switch to jp2a and back
await jp2aBtn.trigger('click')
await chafaBtn.trigger('click')
const emitted = wrapper.emitted('tool-config')
const latest = emitted[emitted.length - 1][0]
expect(latest.flags.width).toBe('120')
})
})