mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 09:55:06 +03:00
* fix(studio): empty arrays become empty string in row editor * test: update test case to match the new parseValue behavior --------- Co-authored-by: Ryan Martin <rmrt1n@users.noreply.github.com> Co-authored-by: Han Qiao <sweatybridge@gmail.com> Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
151 lines
5.2 KiB
JavaScript
151 lines
5.2 KiB
JavaScript
import {
|
|
generateRowObjectFromFields,
|
|
parseValue,
|
|
} from 'components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.utils'
|
|
|
|
describe('parseValue', () => {
|
|
it('should return null when originalValue is null', () => {
|
|
const originalValue = null
|
|
const format = 'some format'
|
|
expect(parseValue(originalValue, format)).toBeNull()
|
|
})
|
|
|
|
it('should return originalValue when it is 0', () => {
|
|
const originalValue = 0
|
|
const format = 'some format'
|
|
expect(parseValue(originalValue, format)).toEqual(originalValue)
|
|
})
|
|
|
|
it('should return originalValue when it is an empty string', () => {
|
|
const originalValue = ''
|
|
const format = 'some format'
|
|
expect(parseValue(originalValue, format)).toEqual(originalValue)
|
|
})
|
|
|
|
it('should return originalValue when it is a number and format is not provided', () => {
|
|
const originalValue = 42
|
|
const format = ''
|
|
expect(parseValue(originalValue, format)).toEqual(originalValue)
|
|
})
|
|
|
|
it('should return JSON string representation when originalValue is an empty array', () => {
|
|
const originalValue = []
|
|
const format = 'some format'
|
|
const expectedValue = JSON.stringify(originalValue)
|
|
expect(parseValue(originalValue, format)).toEqual(expectedValue)
|
|
})
|
|
|
|
it('should return JSON string representation when originalValue is an empty object', () => {
|
|
const originalValue = {}
|
|
const format = 'some format'
|
|
const expectedValue = JSON.stringify(originalValue)
|
|
expect(parseValue(originalValue, format)).toEqual(expectedValue)
|
|
})
|
|
|
|
it('should return JSON string representation when originalValue is an object', () => {
|
|
const originalValue = { key: 'value' }
|
|
const format = 'some format'
|
|
expect(parseValue(originalValue, format)).toEqual(JSON.stringify(originalValue))
|
|
})
|
|
|
|
it('should handle complex nested object with titles correctly', () => {
|
|
const originalValue = {
|
|
glossary: {
|
|
title: 'parent title',
|
|
subItem: {
|
|
title: 'subItem title',
|
|
items: ['item1', 'item2'],
|
|
},
|
|
},
|
|
}
|
|
const format = 'some format'
|
|
const expectedValue = JSON.stringify(originalValue)
|
|
expect(parseValue(originalValue, format)).toEqual(expectedValue)
|
|
})
|
|
|
|
it('should handle object with all values set to 0 correctly', () => {
|
|
const originalValue = {
|
|
width: 0,
|
|
height: 0,
|
|
length: 0,
|
|
weight: 0,
|
|
}
|
|
const format = 'some format'
|
|
const expectedValue = JSON.stringify(originalValue)
|
|
expect(parseValue(originalValue, format)).toEqual(expectedValue)
|
|
})
|
|
it('should return string representation of originalValue when it is a boolean', () => {
|
|
const originalValue = true
|
|
const format = 'some format'
|
|
expect(parseValue(originalValue, format)).toEqual(originalValue.toString())
|
|
})
|
|
|
|
it('should return originalValue for other cases', () => {
|
|
const originalValue = 'some value'
|
|
const format = 'some format'
|
|
expect(parseValue(originalValue, format)).toEqual(originalValue)
|
|
})
|
|
|
|
it('should return originalValue even when an error occurs', () => {
|
|
const originalValue = 'some value'
|
|
const format = 'some format'
|
|
// Mocking an error occurring during parsing
|
|
JSON.stringify = jest.fn(() => {
|
|
throw new Error('Mocked error')
|
|
})
|
|
expect(parseValue(originalValue, format)).toEqual(originalValue)
|
|
})
|
|
})
|
|
|
|
describe('generateRowObjectFromFields', () => {
|
|
it('should not force NULL values', () => {
|
|
const sampleRowFields = [
|
|
{ id: '1', name: 'id', value: '', comment: '', defaultValue: null, format: 'int8' },
|
|
{
|
|
id: '2',
|
|
name: 'time_not_null',
|
|
value: '',
|
|
comment: '',
|
|
defaultValue: 'now()',
|
|
format: 'timestamptz',
|
|
isNullable: false, // [Joshen] technically this method doesnt even check this property
|
|
},
|
|
{
|
|
id: '3',
|
|
name: 'time_nullable',
|
|
value: '',
|
|
comment: '',
|
|
defaultValue: 'now()',
|
|
format: 'timestamptz',
|
|
isNullable: true,
|
|
},
|
|
]
|
|
const result = generateRowObjectFromFields(sampleRowFields)
|
|
expect(result).toEqual({})
|
|
})
|
|
it('should discern EMPTY values for text', () => {
|
|
const sampleRowFields = [
|
|
{ id: '1', name: 'id', value: '', comment: '', defaultValue: null, format: 'int8' },
|
|
{ id: '2', name: 'name', value: '', comment: '', defaultValue: null, format: 'text' },
|
|
]
|
|
const result = generateRowObjectFromFields(sampleRowFields)
|
|
expect(result).toEqual({ name: '' })
|
|
})
|
|
it('should discern NULL values for text', () => {
|
|
const sampleRowFields = [
|
|
{ id: '1', name: 'id', value: '', comment: '', defaultValue: null, format: 'int8' },
|
|
{ id: '2', name: 'name', value: null, comment: '', defaultValue: null, format: 'text' },
|
|
]
|
|
const result = generateRowObjectFromFields(sampleRowFields)
|
|
expect(result).toEqual({})
|
|
})
|
|
it('should discern NULL values for booleans', () => {
|
|
const sampleRowFields = [
|
|
{ id: '1', name: 'id', value: '', comment: '', defaultValue: null, format: 'int8' },
|
|
{ id: '2', name: 'bool-test', value: null, comment: '', defaultValue: null, format: 'bool' },
|
|
]
|
|
const result = generateRowObjectFromFields(sampleRowFields)
|
|
expect(result).toEqual({})
|
|
})
|
|
})
|