import {describe, test, expect} from 'vitest'
import {converters2Layers} from "../../schema/schemaUtils";


describe('schemaUtils', async () => {
  const nestedObject = {
    foo: 'a',
    bar: 1,
    arr: [1, {foo: [{bar: 'baz'}]}],
    baz: {
      foo: {
        bar: 1,
        arr2: [
          1, 2, {bar2: 'baz'}
        ]
      }
    },
  };

  const properties = [
    { key: 'foo', value: 'a' },
    { key: 'bar', value: 1 },
    { key: 'arr--0', value: 1 },
    { key: 'arr--1--foo--0--bar', value: 'baz' },
    { key: 'baz--foo--bar', value: 1 },
    { key: 'baz--foo--arr2--0', value: 1 },
    { key: 'baz--foo--arr2--1', value: 2 },
    { key: 'baz--foo--arr2--2--bar2', value: 'baz' }
  ]


  test.concurrent('Nested object to properties', () => {
    expect(converters2Layers.objectToProperties(nestedObject)).toEqual(properties)
  })

  test.concurrent('Properties to nested object', () => {
    expect(converters2Layers.objectToProperties(nestedObject)).toEqual(properties)
  })


  test.concurrent('Duplex: object -> properties -> object', () => {
    const toProps = converters2Layers.objectToProperties(nestedObject)
    const parsedBack = converters2Layers.propertiesToObject(toProps)

    expect(nestedObject).toEqual(parsedBack)
    expect(JSON.stringify(nestedObject)).toBe(JSON.stringify(parsedBack))
  })

})
