@@ -1385,3 +1385,204 @@ describe('createPages api', () => {
1385
1385
expect ( res . status ) . toEqual ( 200 ) ;
1386
1386
} ) ;
1387
1387
} ) ;
1388
+
1389
+ describe ( 'createPages - exactPath' , ( ) => {
1390
+ it ( 'creates a simple static page' , async ( ) => {
1391
+ const TestPage = ( ) => null ;
1392
+ createPages ( async ( { createPage } ) => [
1393
+ createPage ( {
1394
+ render : 'static' ,
1395
+ path : '/test' ,
1396
+ exactPath : true ,
1397
+ component : TestPage ,
1398
+ } ) ,
1399
+ ] ) ;
1400
+ const { getRouteConfig, handleRoute } = injectedFunctions ( ) ;
1401
+ expect ( await getRouteConfig ( ) ) . toEqual ( [
1402
+ {
1403
+ elements : {
1404
+ 'page:/test' : { isStatic : true } ,
1405
+ } ,
1406
+ rootElement : { isStatic : true } ,
1407
+ routeElement : { isStatic : true } ,
1408
+ noSsr : false ,
1409
+ path : [ { name : 'test' , type : 'literal' } ] ,
1410
+ } ,
1411
+ ] ) ;
1412
+ const route = await handleRoute ( '/test' , {
1413
+ query : '?skip=[]' ,
1414
+ } ) ;
1415
+ expect ( route ) . toBeDefined ( ) ;
1416
+ expect ( route . rootElement ) . toBeDefined ( ) ;
1417
+ expect ( route . routeElement ) . toBeDefined ( ) ;
1418
+ expect ( Object . keys ( route . elements ) ) . toEqual ( [ 'page:/test' ] ) ;
1419
+ } ) ;
1420
+
1421
+ it ( 'creates a simple dynamic page' , async ( ) => {
1422
+ const TestPage = ( ) => null ;
1423
+ createPages ( async ( { createPage } ) => [
1424
+ createPage ( {
1425
+ render : 'dynamic' ,
1426
+ path : '/test' ,
1427
+ exactPath : true ,
1428
+ component : TestPage ,
1429
+ } ) ,
1430
+ ] ) ;
1431
+ const { getRouteConfig, handleRoute } = injectedFunctions ( ) ;
1432
+ expect ( await getRouteConfig ( ) ) . toEqual ( [
1433
+ {
1434
+ elements : {
1435
+ 'page:/test' : { isStatic : false } ,
1436
+ } ,
1437
+ rootElement : { isStatic : true } ,
1438
+ routeElement : { isStatic : true } ,
1439
+ noSsr : false ,
1440
+ path : [ { name : 'test' , type : 'literal' } ] ,
1441
+ } ,
1442
+ ] ) ;
1443
+ const route = await handleRoute ( '/test' , {
1444
+ query : '?skip=[]' ,
1445
+ } ) ;
1446
+ expect ( route ) . toBeDefined ( ) ;
1447
+ expect ( route . rootElement ) . toBeDefined ( ) ;
1448
+ expect ( route . routeElement ) . toBeDefined ( ) ;
1449
+ expect ( Object . keys ( route . elements ) ) . toEqual ( [ 'page:/test' ] ) ;
1450
+ } ) ;
1451
+
1452
+ it ( 'works with a slug path' , async ( ) => {
1453
+ const TestPage = vi . fn ( ) ;
1454
+ createPages ( async ( { createPage } ) => [
1455
+ createPage ( {
1456
+ render : 'static' ,
1457
+ path : '/test/[slug]' ,
1458
+ exactPath : true ,
1459
+ component : TestPage ,
1460
+ } ) ,
1461
+ ] ) ;
1462
+ const { getRouteConfig, handleRoute } = injectedFunctions ( ) ;
1463
+ expect ( await getRouteConfig ( ) ) . toEqual ( [
1464
+ {
1465
+ elements : {
1466
+ 'page:/test/[slug]' : { isStatic : true } ,
1467
+ } ,
1468
+ rootElement : { isStatic : true } ,
1469
+ routeElement : { isStatic : true } ,
1470
+ noSsr : false ,
1471
+ path : [
1472
+ { name : 'test' , type : 'literal' } ,
1473
+ { name : '[slug]' , type : 'literal' } ,
1474
+ ] ,
1475
+ } ,
1476
+ ] ) ;
1477
+ const route = await handleRoute ( '/test/[slug]' , {
1478
+ query : '?skip=[]' ,
1479
+ } ) ;
1480
+ expect ( route ) . toBeDefined ( ) ;
1481
+ expect ( route . rootElement ) . toBeDefined ( ) ;
1482
+ expect ( route . routeElement ) . toBeDefined ( ) ;
1483
+ expect ( Object . keys ( route . elements ) ) . toEqual ( [ 'page:/test/[slug]' ] ) ;
1484
+ } ) ;
1485
+
1486
+ it ( 'works with a wildcard path' , async ( ) => {
1487
+ const TestPage = vi . fn ( ) ;
1488
+ createPages ( async ( { createPage } ) => [
1489
+ createPage ( {
1490
+ render : 'static' ,
1491
+ path : '/test/[...wildcard]' ,
1492
+ exactPath : true ,
1493
+ component : TestPage ,
1494
+ } ) ,
1495
+ ] ) ;
1496
+ const { getRouteConfig, handleRoute } = injectedFunctions ( ) ;
1497
+ expect ( await getRouteConfig ( ) ) . toEqual ( [
1498
+ {
1499
+ elements : {
1500
+ 'page:/test/[...wildcard]' : { isStatic : true } ,
1501
+ } ,
1502
+ rootElement : { isStatic : true } ,
1503
+ routeElement : { isStatic : true } ,
1504
+ noSsr : false ,
1505
+ path : [
1506
+ { name : 'test' , type : 'literal' } ,
1507
+ { name : '[...wildcard]' , type : 'literal' } ,
1508
+ ] ,
1509
+ } ,
1510
+ ] ) ;
1511
+ const route = await handleRoute ( '/test/[...wildcard]' , {
1512
+ query : '?skip=[]' ,
1513
+ } ) ;
1514
+ expect ( route ) . toBeDefined ( ) ;
1515
+ expect ( route . rootElement ) . toBeDefined ( ) ;
1516
+ expect ( route . routeElement ) . toBeDefined ( ) ;
1517
+ expect ( Object . keys ( route . elements ) ) . toEqual ( [ 'page:/test/[...wildcard]' ] ) ;
1518
+ } ) ;
1519
+
1520
+ it ( 'works with wildcard and slug path' , async ( ) => {
1521
+ const TestPage = vi . fn ( ) ;
1522
+ createPages ( async ( { createPage } ) => [
1523
+ createPage ( {
1524
+ render : 'static' ,
1525
+ path : '/test/[...wildcard]/[slug]' ,
1526
+ exactPath : true ,
1527
+ component : TestPage ,
1528
+ } ) ,
1529
+ ] ) ;
1530
+ const { getRouteConfig, handleRoute } = injectedFunctions ( ) ;
1531
+ expect ( await getRouteConfig ( ) ) . toEqual ( [
1532
+ {
1533
+ elements : {
1534
+ 'page:/test/[...wildcard]/[slug]' : { isStatic : true } ,
1535
+ } ,
1536
+ rootElement : { isStatic : true } ,
1537
+ routeElement : { isStatic : true } ,
1538
+ noSsr : false ,
1539
+ path : [
1540
+ { name : 'test' , type : 'literal' } ,
1541
+ { name : '[...wildcard]' , type : 'literal' } ,
1542
+ { name : '[slug]' , type : 'literal' } ,
1543
+ ] ,
1544
+ } ,
1545
+ ] ) ;
1546
+ const route = await handleRoute ( '/test/[...wildcard]/[slug]' , {
1547
+ query : '?skip=[]' ,
1548
+ } ) ;
1549
+ expect ( route ) . toBeDefined ( ) ;
1550
+ expect ( route . rootElement ) . toBeDefined ( ) ;
1551
+ expect ( route . routeElement ) . toBeDefined ( ) ;
1552
+ expect ( Object . keys ( route . elements ) ) . toEqual ( [
1553
+ 'page:/test/[...wildcard]/[slug]' ,
1554
+ ] ) ;
1555
+ } ) ;
1556
+
1557
+ it ( 'does not work with slug match' , async ( ) => {
1558
+ const TestPage = vi . fn ( ) ;
1559
+ createPages ( async ( { createPage } ) => [
1560
+ createPage ( {
1561
+ render : 'static' ,
1562
+ path : '/test/[slug]' ,
1563
+ exactPath : true ,
1564
+ component : TestPage ,
1565
+ } ) ,
1566
+ ] ) ;
1567
+ const { getRouteConfig, handleRoute } = injectedFunctions ( ) ;
1568
+ expect ( await getRouteConfig ( ) ) . toEqual ( [
1569
+ {
1570
+ elements : {
1571
+ 'page:/test/[slug]' : { isStatic : true } ,
1572
+ } ,
1573
+ rootElement : { isStatic : true } ,
1574
+ routeElement : { isStatic : true } ,
1575
+ noSsr : false ,
1576
+ path : [
1577
+ { name : 'test' , type : 'literal' } ,
1578
+ { name : '[slug]' , type : 'literal' } ,
1579
+ ] ,
1580
+ } ,
1581
+ ] ) ;
1582
+ await expect ( async ( ) => {
1583
+ return handleRoute ( '/test/foo' , {
1584
+ query : '?skip=[]' ,
1585
+ } ) ;
1586
+ } ) . rejects . toThrowError ( ) ;
1587
+ } ) ;
1588
+ } ) ;
0 commit comments