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

components.core.Page.test.js Maven / Gradle / Ivy

The newest version!
import React from 'react'
import ReactDOM from 'react-dom'
import renderer from 'react-test-renderer'
import { Provider } from 'react-redux'
import configureMockStore from 'redux-mock-store'
import { withContext } from 'recompose'
import PropTypes from 'prop-types'
import { BrowserRouter } from 'react-router-dom'
import sinon from 'sinon'

import FactoryProvider from '../../core/factory/FactoryProvider'

import DefaultBreadcrumb from './Breadcrumb/DefaultBreadcrumb'
import { PageContainer } from './Page'

const defaultProps = {
    getMetadata: () => {},
}

const testDataToProps = {
    props: {},
    newProps: {},
}

const testMetadata = {
    id: 'pageId',
    page: {
        title: 'title',
    },
    routes: {
        list: [
            {
                path: '/test',
                exact: true,
            },
        ],
    },
    breadcrumb: [
        {
            label: 'Первая',
            path: '/',
        },
        {
            label: '`\'Вторая: \' + id`',
            modelLink: 'pages[\'testSimplePageJson\'].metadata',
        },
    ],
    widgets: {
        Page_Wireframe: {
            src: 'WireframeWidget',
            name: 'name',
            toolbar: {
                topLeft: [
                    {
                        buttons: [
                            {
                                id: 'testButton',
                                title: 'test',
                            },
                        ],
                    },
                ],
            },
            wireframe: {
                className: '',
                title: 'Виджет первой страницы',
                height: 300,
            },
        },
    },
}

const setup = (propOverrides) => {
    const props = {
        ...defaultProps,
        ...propOverrides,
    }

    const wrapper = mount()

    return {
        wrapper,
        props,
    }
}

describe.skip('Тесты Page', () => {
    it('Установка Page', () => {
        const { wrapper } = setup()

        expect(wrapper).toBeTruthy()
    })

    it('Проверка вызова getMetadata при установке компонента', () => {
        const getMetadata = sinon.spy()

        setup({ getMetadata })
        expect(getMetadata.calledOnce).toEqual(true)
        expect(getMetadata.calledWithMatch()).toEqual(true)
    })

    it('Проверка вызова reset и getMetadate если метадата поменялась', () => {
        const getMetadata = sinon.spy()
        const reset = sinon.spy()

        const stubFn = sinon
            .stub(PageContainer.prototype, 'shouldGetPageMetadata')
            .returns(true)
        const { wrapper } = setup({ metadata: 'test', pageId: 'pageId' })

        wrapper.setProps({ metadata: 'test2', reset, getMetadata })
        expect(reset.calledOnce).toEqual(true)
        expect(reset.calledWithMatch('pageId')).toEqual(true)
        expect(getMetadata.calledOnce).toEqual(true)
        stubFn.restore()
    })

    it('Проверка вызова routeMap если pageUrl поменялся и getMetadata если есть error', () => {
        const routeMap = sinon.spy()
        const getMetadata = sinon.spy()

        const stubFn = sinon
            .stub(PageContainer.prototype, 'shouldGetPageMetadata')
            .returns(false)
        const { wrapper } = setup({ metadata: 'test', pageId: 'pageId' })

        wrapper.setProps({
            metadata: 'test',
            pageUrl: 'newPageUrl',
            routeMap,
            getMetadata,
            error: true,
        })
        expect(routeMap.calledOnce).toEqual(true)
        expect(routeMap.calledWithMatch()).toEqual(true)
        expect(getMetadata.calledWithMatch()).toEqual(true)
        stubFn.restore()
    })

    it('shouldGetPageMetadata возвращает true при смене route если route есть в метаданных', () => {
        const spyFn = sinon.spy(PageContainer.prototype, 'shouldGetPageMetadata')
        const { wrapper } = setup({ metadata: 'test', pageId: 'pageId' })

        wrapper.setProps({
            reset: () => null,
            metadata: {
                routes: {
                    list: [
                        {
                            path: '/test',
                            exact: true,
                            isOtherPage: true,
                        },
                    ],
                },
            },
            location: {
                pathname: '/test',
            },
        })

        expect(spyFn.calledOnce).toEqual(true)
        expect(spyFn.returnValues[0]).toEqual(true)
        spyFn.restore()
    })

    it('shouldGetPageMetadata возвращает false если silent = true', () => {
        const spyFn = sinon.spy(PageContainer.prototype, 'shouldGetPageMetadata')
        const { wrapper } = setup({ metadata: 'test', pageId: 'pageId' })

        wrapper.setProps({
            reset: () => null,
            metadata: {
                routes: {
                    list: [
                        {
                            path: '/test',
                            exact: true,
                            isOtherPage: true,
                        },
                    ],
                },
            },
            location: { state: { silent: true } },
        })

        expect(spyFn.calledOnce).toEqual(true)
        expect(spyFn.returnValues[0]).toEqual(false)
        spyFn.restore()
    })

    it('shouldGetPageMetadata возвращает true если route есть в метаданных но нет isOtherPage', () => {
        const spyFn = sinon.spy(PageContainer.prototype, 'shouldGetPageMetadata')
        const { wrapper } = setup({ metadata: 'test', pageId: 'pageId' })

        wrapper.setProps({
            reset: () => null,
            metadata: {
                routes: {
                    list: [
                        {
                            path: '/test',
                            exact: true,
                        },
                    ],
                },
            },
            location: { pathname: '/test' },
        })

        expect(spyFn.calledOnce).toEqual(true)
        expect(spyFn.returnValues[0]).toEqual(false)
        spyFn.restore()
    })
    it('Вызов reset при unmount компонента', () => {
        const reset = sinon.spy()
        const component = shallow(
             null} />,
        )

        component.unmount()
        expect(reset.calledOnce).toEqual(true)
        expect(reset.calledWithMatch('pageId')).toEqual(true)
    })
})




© 2015 - 2024 Weber Informatics LLC | Privacy Policy