1import { RouteNode, sortRoutes } from '../Route'; 2import { generateDynamic } from '../getRoutes'; 3 4const asRouteNode = (route: string) => 5 ({ 6 children: [], 7 dynamic: generateDynamic(route), 8 loadRoute(): any { 9 return { 10 default() { 11 return null; 12 }, 13 }; 14 }, 15 route, 16 contextKey: 'INVALID_TEST_VALUE', 17 }) as RouteNode; 18 19describe(sortRoutes, () => { 20 it(`sorts index routes by priority`, () => { 21 // Index before deep dynamic 22 expect(sortRoutes(asRouteNode('index'), asRouteNode('[...a]'))).toBe(-1); 23 // Index before dynamic 24 expect(sortRoutes(asRouteNode('index'), asRouteNode('[a]'))).toBe(-1); 25 // Index before named 26 expect(sortRoutes(asRouteNode('index'), asRouteNode('a'))).toBe(-1); 27 expect(sortRoutes(asRouteNode('index'), asRouteNode('z'))).toBe(-1); 28 29 // Index tied with group 30 expect(sortRoutes(asRouteNode('index'), asRouteNode('(z)'))).toBe(2); 31 }); 32 it(`sorts group routes by priority`, () => { 33 expect(sortRoutes(asRouteNode('(zzz)'), asRouteNode('[...a]'))).toBe(-1); 34 expect(sortRoutes(asRouteNode('(zzz)'), asRouteNode('[a]'))).toBe(-1); 35 expect(sortRoutes(asRouteNode('(zzz)'), asRouteNode('a'))).toBe(-1); 36 expect(sortRoutes(asRouteNode('(zzz)'), asRouteNode('z'))).toBe(-1); 37 expect(sortRoutes(asRouteNode('(zzz)'), asRouteNode('index'))).toBe(0); 38 }); 39 it(`sorts multiple dynamic routes higher than a single deep dynamic route`, () => { 40 // dynamic before deep dynamic 41 expect(sortRoutes(asRouteNode('[a]/[b]'), asRouteNode('[...a]'))).toBe(-1); 42 expect(sortRoutes(asRouteNode('[...a]'), asRouteNode('[a]/[b]'))).toBe(1); 43 }); 44 45 it(`sorts dynamic routes by priority`, () => { 46 // dynamic before deep dynamic 47 expect(sortRoutes(asRouteNode('[a]'), asRouteNode('[...a]'))).toBe(-1); 48 // tied with two dynamic routes 49 expect(sortRoutes(asRouteNode('[a]'), asRouteNode('[b]'))).toBe(0); 50 expect(sortRoutes(asRouteNode('[a]/[b]'), asRouteNode('[b]/[a]'))).toBe(0); 51 // Lower priority 52 expect(sortRoutes(asRouteNode('[a]'), asRouteNode('index'))).toBe(1); 53 expect(sortRoutes(asRouteNode('[a]'), asRouteNode('a'))).toBe(1); 54 expect(sortRoutes(asRouteNode('[a]'), asRouteNode('(a)'))).toBe(1); 55 }); 56 it(`sorts deep dynamic routes by priority`, () => { 57 expect(sortRoutes(asRouteNode('[...a]'), asRouteNode('[...beta]'))).toBe(0); 58 expect(sortRoutes(asRouteNode('[...a]/[b]'), asRouteNode('[...beta]/[c]'))).toBe(0); 59 // Lower priority 60 expect(sortRoutes(asRouteNode('[...a]'), asRouteNode('[b]'))).toBe(1); 61 expect(sortRoutes(asRouteNode('[...a]/[a]'), asRouteNode('[b]/[c]'))).toBe(1); 62 expect(sortRoutes(asRouteNode('[...a]'), asRouteNode('index'))).toBe(1); 63 expect(sortRoutes(asRouteNode('[...a]'), asRouteNode('a'))).toBe(1); 64 expect(sortRoutes(asRouteNode('[...a]'), asRouteNode('(a)'))).toBe(1); 65 }); 66}); 67