feat: initial release v0.3.0
This commit is contained in:
101
tests/unit/image-generation/slot-state.test.ts
Normal file
101
tests/unit/image-generation/slot-state.test.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import {
|
||||
countGeneratedImageSlots,
|
||||
resolveDisplayImageSlots,
|
||||
resolveGroupedImageSlotPhase,
|
||||
resolveImageSlotPhase,
|
||||
shouldShowImageSlotGrid,
|
||||
} from '@/lib/image-generation/slot-state'
|
||||
|
||||
describe('image slot state', () => {
|
||||
it('counts only slots with image urls', () => {
|
||||
expect(countGeneratedImageSlots([
|
||||
{ imageUrl: 'a.png' },
|
||||
{ imageUrl: null },
|
||||
{ imageUrl: 'b.png' },
|
||||
])).toBe(2)
|
||||
})
|
||||
|
||||
it('distinguishes generate and regenerate phases', () => {
|
||||
expect(resolveImageSlotPhase({ imageUrl: null }, true)).toBe('generating')
|
||||
expect(resolveImageSlotPhase({ imageUrl: 'a.png' }, true)).toBe('regenerating')
|
||||
expect(resolveImageSlotPhase({ imageUrl: null }, false)).toBe('idle-empty')
|
||||
expect(resolveImageSlotPhase({ imageUrl: 'a.png' }, false)).toBe('idle-filled')
|
||||
})
|
||||
|
||||
it('keeps completed filled slots idle while the group still has empty pending slots', () => {
|
||||
expect(resolveGroupedImageSlotPhase(
|
||||
{ imageUrl: 'a.png' },
|
||||
{ isGroupRunning: true, isSlotRunning: false, hasPendingEmptySlots: true },
|
||||
)).toBe('idle-filled')
|
||||
|
||||
expect(resolveGroupedImageSlotPhase(
|
||||
{ imageUrl: null },
|
||||
{ isGroupRunning: true, isSlotRunning: true, hasPendingEmptySlots: true },
|
||||
)).toBe('generating')
|
||||
})
|
||||
|
||||
it('hides legacy empty slots when the location is idle', () => {
|
||||
const displaySlots = resolveDisplayImageSlots([
|
||||
{ imageUrl: 'a.png' },
|
||||
{ imageUrl: null },
|
||||
{ imageUrl: null },
|
||||
], {
|
||||
hasRunningTask: false,
|
||||
requestedCount: 1,
|
||||
})
|
||||
|
||||
expect(displaySlots).toHaveLength(1)
|
||||
expect(displaySlots[0]?.imageUrl).toBe('a.png')
|
||||
})
|
||||
|
||||
it('shows only one slot while running a single-image location generation', () => {
|
||||
const displaySlots = resolveDisplayImageSlots([
|
||||
{ imageUrl: null },
|
||||
{ imageUrl: null },
|
||||
{ imageUrl: null },
|
||||
], {
|
||||
hasRunningTask: true,
|
||||
requestedCount: 1,
|
||||
})
|
||||
|
||||
expect(displaySlots).toHaveLength(1)
|
||||
})
|
||||
|
||||
it('shows requested placeholders while running a multi-image location generation', () => {
|
||||
const displaySlots = resolveDisplayImageSlots([
|
||||
{ imageUrl: 'a.png' },
|
||||
{ imageUrl: null },
|
||||
{ imageUrl: null },
|
||||
{ imageUrl: null },
|
||||
], {
|
||||
hasRunningTask: true,
|
||||
requestedCount: 4,
|
||||
})
|
||||
|
||||
expect(displaySlots).toHaveLength(4)
|
||||
})
|
||||
|
||||
it('shows slot grid only after generation is active or meaningful', () => {
|
||||
expect(shouldShowImageSlotGrid({
|
||||
totalSlotCount: 3,
|
||||
generatedCount: 0,
|
||||
hasRunningTask: false,
|
||||
hasAnyError: false,
|
||||
})).toBe(false)
|
||||
|
||||
expect(shouldShowImageSlotGrid({
|
||||
totalSlotCount: 3,
|
||||
generatedCount: 0,
|
||||
hasRunningTask: true,
|
||||
hasAnyError: false,
|
||||
})).toBe(true)
|
||||
|
||||
expect(shouldShowImageSlotGrid({
|
||||
totalSlotCount: 3,
|
||||
generatedCount: 1,
|
||||
hasRunningTask: false,
|
||||
hasAnyError: false,
|
||||
})).toBe(true)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user