@elastic-suite/gally-admin-shared
Version:
Shared package for gally admin BO
520 lines (493 loc) • 11.8 kB
text/typescript
import productSortingOptions from '../mocks/static/product_sorting_options.json'
import metadata from '../mocks/static/metadata.json'
import sourceFieldOptions from '../mocks/static/source_field_options.json'
import sourceFieldOptionLabels from '../mocks/static/source_field_option_labels.json'
import {
api,
fieldBoolean,
fieldInteger,
fieldRef,
fieldString,
resource,
resourceWithRef,
} from '../mocks'
import {
IHydraResponse,
ISourceFieldOption,
ISourceFieldOptionLabel,
} from '../types'
import {
castFieldParameter,
getField,
getFieldName,
getFieldType,
getFilterParameters,
getOptionsFromApiSchema,
getOptionsFromLabelResource,
getOptionsFromOptionLabelResource,
getOptionsFromOptionResource,
getOptionsFromResource,
getReferencedResource,
getResource,
isFieldValueValid,
isHydraError,
isJSonldType,
isReferenceField,
} from './hydra'
describe('Hydra service', () => {
describe('isJSonldType', () => {
it('should check if object is a JsonldBase', () => {
expect(
isJSonldType({
'@context': 'test',
'@type': 'test',
})
).toEqual(true)
})
})
describe('isHydraError', () => {
it('should check if response is a hydra error', () => {
expect(
isHydraError({
'@type': 'hydra:Error',
})
).toEqual(true)
})
})
describe('getResource', () => {
it('Should return the resource', () => {
expect(getResource(api, 'SourceField')).toEqual(resourceWithRef)
})
})
describe('getFieldName', () => {
it('should return the field name', () => {
expect(getFieldName('code')).toEqual('code')
expect(getFieldName('metadata[]')).toEqual('metadata')
})
})
describe('getField', () => {
it('Should return the field', () => {
expect(getField(resourceWithRef, 'code')).toMatchObject(fieldString)
expect(getField(resourceWithRef, 'isFilterable')).toMatchObject(
fieldBoolean
)
expect(getField(resourceWithRef, 'weight')).toMatchObject(fieldInteger)
expect(getField(resourceWithRef, 'metadata')).toMatchObject(fieldRef)
expect(getField(resourceWithRef, 'foo')).toEqual(undefined)
})
it("Should return the field from the Gally's alias field", () => {
expect(getField(resourceWithRef, 'code.alias')).toMatchObject(fieldString)
})
})
describe('getFieldType', () => {
it('Should return the field type', () => {
expect(getFieldType(fieldString)).toEqual('text')
expect(getFieldType(fieldInteger)).toEqual('integer')
expect(getFieldType(fieldBoolean)).toEqual('boolean')
expect(
getFieldType({
...fieldString,
property: {
...fieldString.property,
range: {
'@id': 'http://www.w3.org/2001/XMLSchema#integer',
},
},
})
).toEqual('integer')
})
})
describe('isReferenceField', () => {
it('Should check if given field is a reference', () => {
expect(isReferenceField(fieldString)).toEqual(false)
expect(isReferenceField(fieldRef)).toEqual(true)
})
})
describe('getReferencedResource', () => {
it('Should return the reference resource', () => {
expect(getReferencedResource(api, fieldRef)).toEqual(resource)
})
})
describe('getOptionsFromResource', () => {
it('Should return the options', () => {
expect(getOptionsFromResource(metadata)).toEqual([
{
id: 1,
label: '/metadata/1',
value: 1,
},
{
id: 2,
label: '/metadata/2',
value: 2,
},
])
})
})
describe('getOptionsFromLabelResource', () => {
it('Should return the options', () => {
expect(
getOptionsFromLabelResource(sourceFieldOptionLabels as any)
).toEqual([
{
id: 3000,
label: 'Doré',
value: 3000,
},
{
id: 3001,
label: 'Pêche',
value: 3001,
},
{
id: 3002,
label: 'Kaki',
value: 3002,
},
{
id: 3003,
label: 'Argent',
value: 3003,
},
{
id: 3004,
label: 'Lila',
value: 3004,
},
{
id: 3005,
label: 'Pluie',
value: 3005,
},
{
id: 3006,
label: 'Menthe',
value: 3006,
},
{
id: 3007,
label: 'Lily',
value: 3007,
},
{
id: 3008,
label: 'Latte',
value: 3008,
},
{
id: 3009,
label: 'Coco',
value: 3009,
},
{
id: 3010,
label: 'Noir',
value: 3010,
},
{
id: 3011,
label: 'Gris',
value: 3011,
},
{
id: 3012,
label: 'Orange',
value: 3012,
},
])
})
})
describe('getOptionsFromOptionResource', () => {
it('should return the options using the default label', () => {
expect(
getOptionsFromOptionResource(
sourceFieldOptions as unknown as IHydraResponse<ISourceFieldOption>
)
).toEqual([
{
id: '5',
label: 'Doré',
value: '5',
},
{
id: '22',
label: 'Pêche',
value: '22',
},
{
id: '23',
label: 'Kaki',
value: '23',
},
{
id: '6',
label: 'Argent',
value: '6',
},
{
id: '24',
label: 'Lila',
value: '24',
},
{
id: '25',
label: 'Pluie',
value: '25',
},
{
id: '26',
label: 'Menthe',
value: '26',
},
{
id: '27',
label: 'Lily',
value: '27',
},
{
id: '28',
label: 'Latte',
value: '28',
},
{
id: '29',
label: 'Coco',
value: '29',
},
{
id: '30',
label: 'Noir',
value: '30',
},
{
id: '31',
label: 'Gris',
value: '31',
},
{
id: '32',
label: 'Orange',
value: '32',
},
])
})
it('should return the options using the localized catalog label', () => {
expect(
getOptionsFromOptionResource(
sourceFieldOptions as unknown as IHydraResponse<ISourceFieldOption>,
50
)
).toEqual([
{
id: '5',
label: 'Gold',
value: '5',
},
{
id: '22',
label: 'Peach',
value: '22',
},
{
id: '23',
label: 'Khaki',
value: '23',
},
{
id: '6',
label: 'Silver',
value: '6',
},
{
id: '24',
label: 'Lilac',
value: '24',
},
{
id: '25',
label: 'Rain',
value: '25',
},
{
id: '26',
label: 'Mint',
value: '26',
},
{
id: '27',
label: 'Lily',
value: '27',
},
{
id: '28',
label: 'Latte',
value: '28',
},
{
id: '29',
label: 'Cocoa',
value: '29',
},
{
id: '30',
label: 'Black',
value: '30',
},
{
id: '31',
label: 'Gray',
value: '31',
},
{
id: '32',
label: 'Orange',
value: '32',
},
])
})
})
describe('getOptionsFromOptionLabelResource', () => {
it('Should return the options', () => {
expect(
getOptionsFromOptionLabelResource(
sourceFieldOptionLabels as unknown as IHydraResponse<ISourceFieldOptionLabel>
)
).toEqual([
{
id: '5',
label: 'Doré',
value: '5',
},
{
id: '22',
label: 'Pêche',
value: '22',
},
{
id: '23',
label: 'Kaki',
value: '23',
},
{
id: '6',
label: 'Argent',
value: '6',
},
{
id: '24',
label: 'Lila',
value: '24',
},
{
id: '25',
label: 'Pluie',
value: '25',
},
{
id: '26',
label: 'Menthe',
value: '26',
},
{
id: '27',
label: 'Lily',
value: '27',
},
{
id: '28',
label: 'Latte',
value: '28',
},
{
id: '29',
label: 'Coco',
value: '29',
},
{
id: '30',
label: 'Noir',
value: '30',
},
{
id: '31',
label: 'Gris',
value: '31',
},
{
id: '32',
label: 'Orange',
value: '32',
},
])
})
})
describe('getOptionsFromApiSchema', () => {
it('Should return the options', () => {
expect(getOptionsFromApiSchema(productSortingOptions)).toEqual([
{
label: 'Position',
value: 'position',
options: undefined,
},
{
label: 'Id',
value: 'id',
options: undefined,
},
{
label: 'Stock status',
value: 'stock.status',
options: undefined,
},
{
label: 'Sku',
value: 'sku',
options: undefined,
},
{
label: 'Price',
value: 'price',
options: undefined,
},
])
})
})
describe('castFieldParameter', () => {
it('Should cast the field value', () => {
expect(castFieldParameter(fieldString, 'foo')).toEqual('foo')
expect(castFieldParameter(fieldBoolean, 'true')).toEqual(true)
expect(castFieldParameter(fieldBoolean, 'false')).toEqual(false)
expect(castFieldParameter(fieldBoolean, 'foo')).toEqual(null)
expect(castFieldParameter(fieldInteger, '42')).toEqual(42)
expect(castFieldParameter(fieldRef, '42')).toEqual(42)
expect(castFieldParameter(fieldRef, ['1', '2', '3'])).toEqual([1, 2, 3])
})
})
describe('isFieldValueValid', () => {
it('Should validate the field value', () => {
expect(isFieldValueValid(fieldString, 'foo')).toEqual(true)
expect(isFieldValueValid(fieldBoolean, true)).toEqual(true)
expect(isFieldValueValid(fieldBoolean, false)).toEqual(true)
expect(isFieldValueValid(fieldBoolean, null)).toEqual(false)
expect(isFieldValueValid(fieldInteger, 42)).toEqual(true)
expect(isFieldValueValid(fieldInteger, NaN)).toEqual(false)
expect(isFieldValueValid(fieldRef, 42)).toEqual(true)
expect(isFieldValueValid(fieldRef, [1, 2, 3])).toEqual(true)
})
})
describe('getFilterParameters', () => {
it('Should get only filter parameters', () => {
expect(
getFilterParameters(resourceWithRef, {
code: 'foo',
'metadata[]': ['1'],
foo: 'bar', // Does not exist on resourceWithRef
weight: 'baz', // Wrong type
})
).toEqual({
code: 'foo',
'metadata[]': [1],
})
})
})
})