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