All Downloads are FREE. Search and download functionalities are using the official Maven repository.

utils.linkResolver.test.js Maven / Gradle / Ivy

The newest version!
import moment from 'moment/moment'

import linkResolver from './linkResolver'

const state = {
    a: {
        b: {
            c: 'test',
        },
    },
}

describe('Проверка linkResolver', () => {
    it('пустой конфиг', () => {
        const res = linkResolver(state, {})

        expect(res).toBe(undefined)
    })
    it('только link', () => {
        const res = linkResolver(state, {
            link: 'a.b.c',
        })

        expect(res).toBe('test')
    })
    it('только link - кривой путь', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
        })

        expect(res).toBe(undefined)
    })
    it('только value - константа', () => {
        const res = linkResolver(state, {
            value: 1,
        })

        expect(res).toBe(1)
    })
    it('только value - js expression', () => {
        const res = linkResolver(state, {
            value: '`2+2`',
        })

        expect(res).toBe(4)
    })
    it('value и link', () => {
        const res = linkResolver(state, {
            link: 'a.b.c',
            value: '`this+"-n2o"`',
        })

        expect(res).toBe('test-n2o')
    })
    it('value (константа) и link', () => {
        const res = linkResolver(state, {
            link: 'a.b.c',
            value: '123',
        })

        expect(res).toBe('123')
    })
    it('value и link (кривой)', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: '`this.x`',
        })

        expect(res).toBe(undefined)
    })
    it('value (this) и link (кривой)', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: '`this`',
        })

        expect(res).toEqual({})
    })

    // Типизация linkResolver

    it('value с типом number', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: 5,
        })

        expect(res).toEqual(5)
    })

    it('value с типом string', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: '5',
        })

        expect(res).toEqual('5')
    })

    it('value с типом string c js выражением', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: '`1 + 3`',
        })

        expect(res).toEqual(4)
    })

    it('value с типом object', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: { key: '5' },
        })

        expect(res).toEqual({ key: '5' })
    })

    it('value с типом object c js выражением', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: { key: '`1 + 4`' },
        })

        expect(res).toEqual({ key: 5 })
    })

    it('value с типом обьект (вложение 3)', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: {
                key1: {
                    key2: {
                        key3: '5',
                    },
                },
            },
        })

        expect(res).toEqual({
            key1: {
                key2: {
                    key3: '5',
                },
            },
        })
    })

    it('value с типом обьект (вложение 3) c js выражением', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: {
                key1: {
                    key2: {
                        key3: '`1 + 4`',
                    },
                },
            },
        })

        expect(res).toEqual({
            key1: {
                key2: {
                    key3: 5,
                },
            },
        })
    })

    it('value с типом массив', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: ['4', '5', '6'],
        })

        expect(res).toEqual(['4', '5', '6'])
    })

    it('value с типом массив с js выражением', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: ['`1+3`', '`1+4`', '`1+5`'],
        })

        expect(res).toEqual([4, 5, 6])
    })

    it('value с типом коллекция', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: [{ key: '4' }, { key: '5' }],
        })

        expect(res).toEqual([{ key: '4' }, { key: '5' }])
    })

    it('value с типом коллекция с js выражением', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: [{ key: '`1+3`' }, { key: '`1+4`' }],
        })

        expect(res).toEqual([{ key: 4 }, { key: 5 }])
    })

    it('value с типом коллекция (вложенные обьекты)', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: [{ key: { key1: '4' } }, { key: { key1: '5' } }],
        })

        expect(res).toEqual([{ key: { key1: '4' } }, { key: { key1: '5' } }])
    })

    it('value с типом коллекция (вложенные обьекты) с js выражением', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: [{ key: { key1: '`1+3`' } }, { key: { key1: '`1+4`' } }],
        })

        expect(res).toEqual([{ key: { key1: 4 } }, { key: { key1: 5 } }])
    })

    it('value с типом коллекция (вложенные обьекты) с js data', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: {
                end: '`$.now({ dateFormat: \'DD.MM.YYYY\', timeFormat: \'HH\' })`',
                begin: '`$.now({ dateFormat: \'DD.MM.YYYY\', timeFormat: \'HH\' })`',
            },
        })

        expect(res).toEqual({
            begin: moment().format('DD.MM.YYYYTHH'),
            end: moment().format('DD.MM.YYYYTHH'),
        })
    })
    it('value и link (кривой), value обьект', () => {
        const res = linkResolver(state, {
            link: 'q.w.e',
            value: { key: '`this.x`' },
        })

        expect(res).toEqual({})
    })

    it('value обьект с массивом и обьектами с js выражением', () => {
        const res = linkResolver(state, {
            link: 'a.b.c',
            value: {
                key: {
                    key1: [
                        {
                            key10: '`1+2`',
                        },
                    ],
                },
                key3: {
                    key4: {
                        key5: '`(function(){ return \'hi\' })()`',
                        key6: ['`this+"-n2o"`', '`123`'],
                    },
                },
            },
        })

        expect(res).toEqual({
            key: { key1: [{ key10: 3 }] },
            key3: { key4: { key5: 'hi', key6: ['test-n2o', 123] } },
        })
    })
})




© 2015 - 2024 Weber Informatics LLC | Privacy Policy