@@ -1425,6 +1425,129 @@ test.group('Code Transformer | addValidator', (group) => {
14251425 } )
14261426} )
14271427
1428+ test . group ( 'Code Transformer | addLimiter' , ( group ) => {
1429+ group . each . setup ( async ( { context } ) => setupFakeAdonisproject ( context . fs ) )
1430+
1431+ test ( 'add limiter to a non-existing limiter file' , async ( { assert, fs } ) => {
1432+ const transformer = new CodeTransformer ( fs . baseUrl )
1433+
1434+ await transformer . addLimiter ( {
1435+ exportName : 'apiLimiter' ,
1436+ limiterFileName : 'limiter.ts' ,
1437+ contents : dedent `
1438+ export const apiLimiter = limiter.define('api', () => {
1439+ return limiter.allowRequests(10).every('1 minute')
1440+ })
1441+ ` ,
1442+ } )
1443+
1444+ const file = await fs . contents ( 'start/limiter.ts' )
1445+ assert . snapshot ( file ) . matchInline ( `
1446+ "export const apiLimiter = limiter.define('api', () => {
1447+ return limiter.allowRequests(10).every('1 minute')
1448+ })
1449+ "
1450+ ` )
1451+ } )
1452+
1453+ test ( 'add limiter to existing limiter file with other exports' , async ( { assert, fs } ) => {
1454+ const transformer = new CodeTransformer ( fs . baseUrl )
1455+ await fs . create (
1456+ 'start/limiter.ts' ,
1457+ dedent `
1458+ export const globalLimiter = limiter.define('global', () => {
1459+ return limiter.allowRequests(100).every('1 minute')
1460+ })
1461+ `
1462+ )
1463+
1464+ await transformer . addLimiter ( {
1465+ exportName : 'apiLimiter' ,
1466+ limiterFileName : 'limiter.ts' ,
1467+ contents : dedent `
1468+ export const apiLimiter = limiter.define('api', () => {
1469+ return limiter.allowRequests(10).every('1 minute')
1470+ })
1471+ ` ,
1472+ } )
1473+
1474+ const file = await fs . contents ( 'start/limiter.ts' )
1475+ assert . snapshot ( file ) . matchInline ( `
1476+ "export const globalLimiter = limiter.define('global', () => {
1477+ return limiter.allowRequests(100).every('1 minute')
1478+ })
1479+
1480+ export const apiLimiter = limiter.define('api', () => {
1481+ return limiter.allowRequests(10).every('1 minute')
1482+ })
1483+ "
1484+ ` )
1485+ } )
1486+
1487+ test ( 'skip adding limiter when it already exists' , async ( { assert, fs } ) => {
1488+ const transformer = new CodeTransformer ( fs . baseUrl )
1489+ await fs . create (
1490+ 'start/limiter.ts' ,
1491+ dedent `
1492+ export const apiLimiter = limiter.define('api', () => {
1493+ return limiter.allowRequests(5).every('1 minute')
1494+ })
1495+ `
1496+ )
1497+
1498+ await transformer . addLimiter ( {
1499+ exportName : 'apiLimiter' ,
1500+ limiterFileName : 'limiter.ts' ,
1501+ contents : dedent `
1502+ export const apiLimiter = limiter.define('api', () => {
1503+ return limiter.allowRequests(10).every('1 minute')
1504+ })
1505+ ` ,
1506+ } )
1507+
1508+ const file = await fs . contents ( 'start/limiter.ts' )
1509+ assert . snapshot ( file ) . matchInline ( `
1510+ "export const apiLimiter = limiter.define('api', () => {
1511+ return limiter.allowRequests(5).every('1 minute')
1512+ })"
1513+ ` )
1514+ } )
1515+
1516+ test ( 'use custom start directory from adonisrc.ts' , async ( { assert, fs } ) => {
1517+ await fs . create (
1518+ 'adonisrc.ts' ,
1519+ dedent `
1520+ import { defineConfig } from '@adonisjs/core/app'
1521+
1522+ export default defineConfig({
1523+ directories: {
1524+ start: 'boot',
1525+ }
1526+ })`
1527+ )
1528+
1529+ const transformer = new CodeTransformer ( fs . baseUrl )
1530+
1531+ await transformer . addLimiter ( {
1532+ exportName : 'apiLimiter' ,
1533+ limiterFileName : 'limiter.ts' ,
1534+ contents : dedent `
1535+ export const apiLimiter = limiter.define('api', () => {
1536+ return limiter.allowRequests(10).every('1 minute')
1537+ })
1538+ ` ,
1539+ } )
1540+
1541+ const file = await fs . contents ( 'boot/limiter.ts' )
1542+ assert . snapshot ( file ) . matchInline ( `
1543+ "export const apiLimiter = limiter.define('api', () => {
1544+ return limiter.allowRequests(10).every('1 minute')
1545+ })
1546+ "
1547+ ` )
1548+ } )
1549+ } )
1550+
14281551test . group ( 'Code Transformer | addModelMixins' , ( group ) => {
14291552 group . each . setup ( async ( { context } ) => setupFakeAdonisproject ( context . fs ) )
14301553
0 commit comments