mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-05-24 06:35:10 +00:00
## Summary Adds tests for metadata parsers ## Changes - **What**: - add test file generation script - identified & fixed bug in webp exif parsing over-reading - identified & fix bug in mp3/ogg parser where it would read from a fixed position instead of relative, causing incorrect reads throwing RangeError - added catch in latent + json parsing to resolve errors ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-11307-test-add-metadata-parser-coverage-3446d73d36508108ac36dddcec0a54d4) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action <action@github.com>
92 lines
2.5 KiB
TypeScript
92 lines
2.5 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest'
|
|
|
|
import {
|
|
mockFileReaderAbort,
|
|
mockFileReaderError,
|
|
mockFileReaderResult
|
|
} from './__fixtures__/helpers'
|
|
import { getDataFromJSON } from './json'
|
|
|
|
function jsonFile(content: object): File {
|
|
return new File([JSON.stringify(content)], 'test.json', {
|
|
type: 'application/json'
|
|
})
|
|
}
|
|
|
|
describe('getDataFromJSON', () => {
|
|
it('detects API-format workflows by class_type on every value', async () => {
|
|
const apiData = {
|
|
'1': { class_type: 'KSampler', inputs: {} },
|
|
'2': { class_type: 'EmptyLatentImage', inputs: {} }
|
|
}
|
|
|
|
const result = await getDataFromJSON(jsonFile(apiData))
|
|
|
|
expect(result).toEqual({ prompt: apiData })
|
|
})
|
|
|
|
it('treats objects without universal class_type as a workflow', async () => {
|
|
const workflow = { nodes: [], links: [], version: 1 }
|
|
|
|
const result = await getDataFromJSON(jsonFile(workflow))
|
|
|
|
expect(result).toEqual({ workflow })
|
|
})
|
|
|
|
it('extracts templates when the root object has a templates key', async () => {
|
|
const templates = [{ name: 'basic' }]
|
|
|
|
const result = await getDataFromJSON(jsonFile({ templates }))
|
|
|
|
expect(result).toEqual({ templates })
|
|
})
|
|
|
|
it('returns undefined for non-JSON content', async () => {
|
|
const file = new File(['not valid json'], 'bad.json', {
|
|
type: 'application/json'
|
|
})
|
|
|
|
const result = await getDataFromJSON(file)
|
|
|
|
expect(result).toBeUndefined()
|
|
})
|
|
|
|
describe('FileReader failure modes', () => {
|
|
afterEach(() => {
|
|
vi.restoreAllMocks()
|
|
})
|
|
|
|
it('resolves undefined when the FileReader fires error', async () => {
|
|
mockFileReaderError('readAsText')
|
|
|
|
const result = await getDataFromJSON(jsonFile({ nodes: [] }))
|
|
|
|
expect(result).toBeUndefined()
|
|
})
|
|
|
|
it('resolves undefined when the FileReader fires abort', async () => {
|
|
mockFileReaderAbort('readAsText')
|
|
|
|
const result = await getDataFromJSON(jsonFile({ nodes: [] }))
|
|
|
|
expect(result).toBeUndefined()
|
|
})
|
|
|
|
it('resolves undefined when reader.result is not a string', async () => {
|
|
mockFileReaderResult('readAsText', new ArrayBuffer(8))
|
|
|
|
const result = await getDataFromJSON(jsonFile({ nodes: [] }))
|
|
|
|
expect(result).toBeUndefined()
|
|
})
|
|
|
|
it('resolves undefined when reader.result is null', async () => {
|
|
mockFileReaderResult('readAsText', null)
|
|
|
|
const result = await getDataFromJSON(jsonFile({ nodes: [] }))
|
|
|
|
expect(result).toBeUndefined()
|
|
})
|
|
})
|
|
})
|