1import { resolveHref } from '../href'; 2 3describe(resolveHref, () => { 4 it(`passes strings back without resolution`, () => { 5 [ 6 '/foobar', 7 '/foo/[bar]', 8 '/foo/[...bar]', 9 '/(somn)/foobar', 10 '/(somn)/other/(remove)/foobar', 11 'Tot4lly Wr0n9', 12 ].forEach((href) => { 13 expect(resolveHref(href)).toBe(href); 14 }); 15 }); 16 17 it(`adds dynamic query parameters`, () => { 18 expect(resolveHref({ pathname: '/[some]', params: { some: 'value' } })).toBe('/value'); 19 expect( 20 resolveHref({ 21 pathname: '/[some]/cool/[thing]', 22 params: { some: 'value' }, 23 }) 24 ).toBe('/value/cool/[thing]'); 25 expect( 26 resolveHref({ 27 pathname: '/[some]/cool/[thing]', 28 params: { some: 'alpha', thing: 'beta' }, 29 }) 30 ).toBe('/alpha/cool/beta'); 31 }); 32 it(`allows nullish query parameters`, () => { 33 expect(resolveHref({ pathname: '/alpha', params: { beta: null } })).toBe('/alpha'); 34 expect( 35 resolveHref({ 36 pathname: '/alpha', 37 params: { beta: undefined, three: '1' }, 38 }) 39 ).toBe('/alpha?three=1'); 40 }); 41 it(`adds query parameters`, () => { 42 expect(resolveHref({ pathname: '/alpha', params: { beta: 'value' } })).toBe( 43 '/alpha?beta=value' 44 ); 45 expect( 46 resolveHref({ 47 pathname: '/alpha', 48 params: { beta: 'value', gamma: 'another' }, 49 }) 50 ).toBe('/alpha?beta=value&gamma=another'); 51 expect( 52 resolveHref({ 53 pathname: '/alpha', 54 params: {}, 55 }) 56 ).toBe('/alpha'); 57 expect( 58 resolveHref({ 59 pathname: '/alpha/[beta]', 60 params: { beta: 'some', gamma: 'another' }, 61 }) 62 ).toBe('/alpha/some?gamma=another'); 63 }); 64 it('encodes query parameters', () => { 65 expect(resolveHref({ pathname: '/fake/path', params: { value: '++test++' } })).toBe( 66 '/fake/path?value=%2B%2Btest%2B%2B' 67 ); 68 }); 69}); 70