test(10-02): add failing EmptyState tests (RED)

- 7 it() blocks covering prop rendering, slot rendering, and size variants
- Tests stub AppIcon via global.stubs to avoid ordering dependency
- All 7 tests fail with module-not-found (EmptyState.vue not yet created)
This commit is contained in:
curo1305
2026-06-15 20:10:15 +02:00
parent d3d3f711eb
commit 96f4b5f80e
@@ -0,0 +1,80 @@
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import EmptyState from '../EmptyState.vue'
describe('EmptyState', () => {
it('renders headline text from the headline prop', () => {
const w = mount(EmptyState, {
props: { headline: 'Nothing here' },
global: { stubs: { AppIcon: true } },
})
expect(w.text()).toContain('Nothing here')
})
it('renders subtext when provided; omits when empty', () => {
const w = mount(EmptyState, {
props: { headline: 'Title', subtext: 'hello' },
global: { stubs: { AppIcon: true } },
})
expect(w.text()).toContain('hello')
const w2 = mount(EmptyState, {
props: { headline: 'Title' },
global: { stubs: { AppIcon: true } },
})
const paragraphs = w2.findAll('p')
expect(paragraphs.length).toBe(1)
})
it('renders AppIcon when icon prop is set; renders no icon when null', () => {
const w = mount(EmptyState, {
props: { headline: 'Title', icon: 'folder' },
global: { stubs: { AppIcon: true } },
})
expect(w.findComponent({ name: 'AppIcon' }).exists()).toBe(true)
const w2 = mount(EmptyState, {
props: { headline: 'Title', icon: null },
global: { stubs: { AppIcon: true } },
})
expect(w2.findComponent({ name: 'AppIcon' }).exists()).toBe(false)
})
it('renders nothing in the CTA area when #cta slot is empty', () => {
const w = mount(EmptyState, {
props: { headline: 'Title' },
global: { stubs: { AppIcon: true } },
})
expect(w.find('button').exists()).toBe(false)
expect(w.find('a').exists()).toBe(false)
})
it('renders the #cta slot content when provided', () => {
const w = mount(EmptyState, {
props: { headline: 'Title' },
slots: { cta: '<button data-test="cta-btn">Upload</button>' },
global: { stubs: { AppIcon: true } },
})
expect(w.find('[data-test="cta-btn"]').exists()).toBe(true)
})
it("size='sm' applies the sidebar micro layout (flex container with gap-2)", () => {
const w = mount(EmptyState, {
props: { headline: 'No folders yet', size: 'sm' },
global: { stubs: { AppIcon: true } },
})
const root = w.element
expect(root.classList.contains('flex')).toBe(true)
expect(root.classList.contains('gap-2')).toBe(true)
})
it('default size (md) applies the centered layout (text-center py-10)', () => {
const w = mount(EmptyState, {
props: { headline: 'Nothing here' },
global: { stubs: { AppIcon: true } },
})
const root = w.element
expect(root.classList.contains('text-center')).toBe(true)
expect(root.classList.contains('py-10')).toBe(true)
})
})