UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

147 lines (133 loc) 3.13 kB
import { describe, expect, it } from 'vitest' import type { PathConfigMap } from '@react-navigation/core' import { getPathFromState, type State } from './getPathFromState' describe('hash support', () => { it('appends hash to the path', () => { const state = { index: 0, key: 'key', routes: [ { name: 'index', path: '/', params: { '#': 'hash1', }, }, ], stale: true, type: 'stack', } const config = { screens: { index: '', _sitemap: '_sitemap', }, } expect(getPathFromState(state, config)).toBe('/#hash1') }) it('works with nested state, existing router and path params', () => { const state = { index: 1, key: 'key', routeNames: ['index', '[test]', '_sitemap', '+not-found'], routes: [ { key: 'key', name: 'index', params: undefined, path: '/', }, { key: 'key', name: '[test]', params: { test: 'hello-world', query: 'true', '#': 'a', }, path: undefined, }, ], stale: false, type: 'stack', } const config = { screens: { '[test]': ':test', index: '', _sitemap: '_sitemap', }, } expect(getPathFromState(state, config)).toBe('/hello-world?query=true#a') }) }) // TODO it.skip(`handles url search params params`, () => { const state = { routes: [ { name: 'index', params: { test: 'true', hello: 'world', array: ['1', '2'], }, path: '/?test=true&hello=world&array=1&array=2', }, ], } const config = { screens: { index: '', _sitemap: '_sitemap', }, } expect(getPathFromState(state, config)).toBe('/?test=true&hello=world&array=1&array=2') }) it(`handles uninitialized state on nested navigation with route params`, () => { const config = { screens: { index: '', '[folderSlugL1]': { path: ':folderSlugL1', screens: { '[folderSlugL2]': { path: ':folderSlugL2', screens: { '[folderSlugL3]': { path: ':folderSlugL3', screens: { page: 'page', }, }, }, }, }, }, }, } satisfies { screens: PathConfigMap<any> } const state = { routes: [ { name: '[folderSlugL1]', params: { folderSlugL1: 'foo', screen: '[folderSlugL2]', params: { folderSlugL1: 'foo', folderSlugL2: 'bar', screen: '[folderSlugL3]', params: { folderSlugL1: 'foo', folderSlugL2: 'bar', folderSlugL3: 'baz', screen: 'page', }, }, }, }, ], } satisfies State expect(getPathFromState(state, config)).toBe('/foo/bar/baz/page') })