16 lines
1.4 KiB
TypeScript
16 lines
1.4 KiB
TypeScript
import { diyCompositionText, diyAiRenderSchema } from '../ai-render'
|
|
import type { DiySnapshot } from '../types'
|
|
|
|
const snapshot: DiySnapshot = { version:1,spu:'DIY',items:[{instanceId:'cabinet-one',code:'model',colorName:'black',offsetY:0,offsetZ:2,quarterTurn:0,supportId:'floor'}],doors:{},camera:{yaw:0,zoom:1} }
|
|
test('camera-only edits keep arrangement history; colors, placement and doors identify a different arrangement', () => {
|
|
const key=diyCompositionText(snapshot)
|
|
expect(diyCompositionText({...snapshot,camera:{yaw:1,zoom:.5}})).toBe(key)
|
|
for(const change of [{colorName:'walnut'},{offsetY:4},{quarterTurn:1}]) expect(diyCompositionText({...snapshot,items:[{...snapshot.items[0],...change}]})).not.toBe(key)
|
|
expect(diyCompositionText({...snapshot,doors:{'cabinet-one#cell':'pattern'}})).not.toBe(key)
|
|
})
|
|
test('new DTO rejects invalid modes, unsupported ratio and excessive image count', () => {
|
|
const input={requestId:'ea7ade88-9db3-412c-86ec-94e4ba222510',name:'test',catalogHash:'hash',snapshot,cameraView:{position:[0,0,12],target:[0,2,0]},mode:'white-background',prompt:'White background',userPrompt:'',imageCount:1,imageSize:'2K',aspectRatio:'1:1',referenceImageDataUrl:'data:image/png;base64,AQID'}
|
|
expect(diyAiRenderSchema.safeParse(input).success).toBe(true)
|
|
for(const change of [{mode:'eight-view'},{aspectRatio:'2:1'},{imageCount:9}])expect(diyAiRenderSchema.safeParse({...input,...change}).success).toBe(false)
|
|
})
|