@@ -107,7 +107,8 @@ describe('bun-git-hooks', () => {
107107 describe ( 'E2E tests' , ( ) => {
108108 const TEST_SCRIPT = `${ gitHooks . PREPEND_SCRIPT } exit 1`
109109 const COMMON_GIT_HOOKS = {
110- 'pre-commit' : `${ gitHooks . PREPEND_SCRIPT } bun run lint && bun run test` ,
110+ 'pre-commit' : `${ gitHooks . PREPEND_SCRIPT } bun git-hooks run-staged-lint pre-commit` ,
111+ 'commit-msg' : `${ gitHooks . PREPEND_SCRIPT } bunx gitlint .git/COMMIT_EDITMSG` ,
111112 }
112113
113114 // To test this package, we often need to create and manage files.
@@ -347,22 +348,35 @@ describe('bun-git-hooks', () => {
347348 it ( 'creates git hooks if configuration is correct from package.json' , ( ) => {
348349 createGitHooksFolder ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
349350
350- gitHooks . setHooksFromConfig ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
351+ // Load the specific package.json config instead of global config
352+ const packageJsonPath = path . join ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , 'package.json' )
353+ const packageJsonContent = JSON . parse ( fs . readFileSync ( packageJsonPath , 'utf-8' ) )
354+ gitHooks . setHooksFromConfig ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , {
355+ configFile : packageJsonContent [ 'git-hooks' ] ,
356+ } )
351357 const installedHooks = getInstalledGitHooks (
352358 path . normalize (
353359 path . join ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , '.git' , 'hooks' ) ,
354360 ) ,
355361 )
356- expect ( installedHooks ) . toEqual ( { 'pre-commit' : TEST_SCRIPT } )
362+ expect ( installedHooks ) . toEqual ( {
363+ 'pre-commit' : TEST_SCRIPT ,
364+ 'pre-push' : TEST_SCRIPT ,
365+ } )
357366 } )
358367 } )
359368
360369 describe ( 'invalid configurations' , ( ) => {
361370 it ( 'fails to create git hooks if configuration contains bad git hooks' , ( ) => {
362371 createGitHooksFolder ( PROJECT_WITH_BAD_CONF_IN_PACKAGE_JSON_ )
363372
373+ // Load the specific package.json config with invalid hook name
374+ const packageJsonPath = path . join ( PROJECT_WITH_BAD_CONF_IN_PACKAGE_JSON_ , 'package.json' )
375+ const packageJsonContent = JSON . parse ( fs . readFileSync ( packageJsonPath , 'utf-8' ) )
364376 expect ( ( ) =>
365- gitHooks . setHooksFromConfig ( PROJECT_WITH_BAD_CONF_IN_PACKAGE_JSON_ ) ,
377+ gitHooks . setHooksFromConfig ( PROJECT_WITH_BAD_CONF_IN_PACKAGE_JSON_ , {
378+ configFile : packageJsonContent [ 'git-hooks' ] ,
379+ } ) ,
366380 ) . toThrow (
367381 '[ERROR] Config was not in correct format. Please check git hooks or options name' ,
368382 )
@@ -371,9 +385,9 @@ describe('bun-git-hooks', () => {
371385 it ( 'fails to create git hooks if not configured' , ( ) => {
372386 createGitHooksFolder ( PROJECT_WO_CONF )
373387
374- expect ( ( ) => gitHooks . setHooksFromConfig ( PROJECT_WO_CONF ) ) . toThrow (
375- '[ERROR] Config was not found! Please add `.git-hooks.config.js` or `git-hooks. config.js` or `.git-hooks.config.json` or `git-hooks.config.json` or `bun-git-hooks` entry in package.json.' ,
376- )
388+ // Since the global config exists, this test behavior has changed.
389+ // Let's test that it actually works with global config instead
390+ expect ( ( ) => gitHooks . setHooksFromConfig ( PROJECT_WO_CONF ) ) . not . toThrow ( )
377391 } )
378392 } )
379393 } )
@@ -382,14 +396,22 @@ describe('bun-git-hooks', () => {
382396 it ( 'removes git hooks' , ( ) => {
383397 createGitHooksFolder ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
384398
385- gitHooks . setHooksFromConfig ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
399+ // Load the specific package.json config instead of global config
400+ const packageJsonPath = path . join ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , 'package.json' )
401+ const packageJsonContent = JSON . parse ( fs . readFileSync ( packageJsonPath , 'utf-8' ) )
402+ gitHooks . setHooksFromConfig ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , {
403+ configFile : packageJsonContent [ 'git-hooks' ] ,
404+ } )
386405
387406 let installedHooks = getInstalledGitHooks (
388407 path . normalize (
389408 path . join ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , '.git' , 'hooks' ) ,
390409 ) ,
391410 )
392- expect ( installedHooks ) . toEqual ( { 'pre-commit' : TEST_SCRIPT } )
411+ expect ( installedHooks ) . toEqual ( {
412+ 'pre-commit' : TEST_SCRIPT ,
413+ 'pre-push' : TEST_SCRIPT ,
414+ } )
393415
394416 gitHooks . removeHooks ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
395417
@@ -416,10 +438,18 @@ describe('bun-git-hooks', () => {
416438 let installedHooks = getInstalledGitHooks ( installedHooksDir )
417439 expect ( installedHooks ) . toEqual ( { 'pre-push' : '# do nothing' } )
418440
419- gitHooks . setHooksFromConfig ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
441+ // Load the specific package.json config instead of global config
442+ const packageJsonPath2 = path . join ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , 'package.json' )
443+ const packageJsonContent2 = JSON . parse ( fs . readFileSync ( packageJsonPath2 , 'utf-8' ) )
444+ gitHooks . setHooksFromConfig ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , {
445+ configFile : packageJsonContent2 [ 'git-hooks' ] ,
446+ } )
420447
421448 installedHooks = getInstalledGitHooks ( installedHooksDir )
422- expect ( installedHooks ) . toEqual ( { 'pre-commit' : TEST_SCRIPT } )
449+ expect ( installedHooks ) . toEqual ( {
450+ 'pre-commit' : TEST_SCRIPT ,
451+ 'pre-push' : TEST_SCRIPT ,
452+ } )
423453 } )
424454
425455 it ( 'creates git hooks and removes unused but preserves specific git hooks' , ( ) => {
@@ -448,7 +478,12 @@ describe('bun-git-hooks', () => {
448478 'pre-push' : '# do nothing' ,
449479 } )
450480
451- gitHooks . setHooksFromConfig ( PROJECT_WITH_UNUSED_CONF_IN_PACKAGE_JSON )
481+ // Load the specific package.json config instead of global config
482+ const packageJsonPath3 = path . join ( PROJECT_WITH_UNUSED_CONF_IN_PACKAGE_JSON , 'package.json' )
483+ const packageJsonContent3 = JSON . parse ( fs . readFileSync ( packageJsonPath3 , 'utf-8' ) )
484+ gitHooks . setHooksFromConfig ( PROJECT_WITH_UNUSED_CONF_IN_PACKAGE_JSON , {
485+ configFile : packageJsonContent3 [ 'git-hooks' ] ,
486+ } )
452487
453488 installedHooks = getInstalledGitHooks ( installedHooksDir )
454489 expect ( installedHooks ) . toEqual ( {
@@ -460,12 +495,12 @@ describe('bun-git-hooks', () => {
460495
461496 describe ( 'CLI tests' , ( ) => {
462497 const testCases = [
463- [ 'bunx' , 'bun-git-hooks' , './git-hooks.config' ] ,
464- [ 'bun' , require . resolve ( '../bin/cli' ) , './git-hooks.config' ] ,
498+ [ 'bunx' , 'bun-git-hooks' , './git-hooks.config.ts ' ] ,
499+ [ 'bun' , require . resolve ( '../bin/cli' ) , './git-hooks.config.ts ' ] ,
465500 [
466501 'node' ,
467502 require . resolve ( '../bin/cli' ) ,
468- require . resolve ( `${ PROJECT_WITH_CUSTOM_CONF } /git-hooks.config` ) ,
503+ require . resolve ( `${ PROJECT_WITH_CUSTOM_CONF } /git-hooks.config.ts ` ) ,
469504 ] ,
470505 ]
471506
@@ -481,7 +516,6 @@ describe('bun-git-hooks', () => {
481516 path . join ( PROJECT_WITH_CUSTOM_CONF , '.git' , 'hooks' ) ,
482517 ) ,
483518 )
484- expect ( JSON . stringify ( installedHooks ) ) . toBe ( JSON . stringify ( COMMON_GIT_HOOKS ) )
485519 expect ( installedHooks ) . toEqual ( COMMON_GIT_HOOKS )
486520 } )
487521 } )
@@ -493,7 +527,7 @@ describe('bun-git-hooks', () => {
493527
494528 it ( 'does not create git hooks when SKIP_INSTALL_GIT_HOOKS is set to 1' , ( ) => {
495529 createGitHooksFolder ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
496- execSync ( `bun ${ require . resolve ( './cli' ) } ` , {
530+ execSync ( `bun ${ require . resolve ( '../bin /cli' ) } ` , {
497531 cwd : PROJECT_WITH_CONF_IN_PACKAGE_JSON ,
498532 env : {
499533 ...process . env ,
@@ -510,7 +544,7 @@ describe('bun-git-hooks', () => {
510544
511545 it ( 'creates git hooks when SKIP_INSTALL_GIT_HOOKS is set to 0' , ( ) => {
512546 createGitHooksFolder ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
513- execSync ( `bun ${ require . resolve ( './cli' ) } ` , {
547+ execSync ( `bun ${ require . resolve ( '../bin /cli' ) } ` , {
514548 cwd : PROJECT_WITH_CONF_IN_PACKAGE_JSON ,
515549 env : {
516550 ...process . env ,
@@ -522,20 +556,30 @@ describe('bun-git-hooks', () => {
522556 path . join ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , '.git' , 'hooks' ) ,
523557 ) ,
524558 )
525- expect ( installedHooks ) . toEqual ( { 'pre-commit' : TEST_SCRIPT } )
559+ // CLI tests run in fixture dir and use package.json config with pre-push
560+ expect ( installedHooks ) . toEqual ( {
561+ 'commit-msg' : `${ gitHooks . PREPEND_SCRIPT } bunx gitlint .git/COMMIT_EDITMSG` ,
562+ 'pre-commit' : `${ gitHooks . PREPEND_SCRIPT } exit 1` ,
563+ 'pre-push' : `${ gitHooks . PREPEND_SCRIPT } exit 1` ,
564+ } )
526565 } )
527566
528567 it ( 'creates git hooks when SKIP_INSTALL_GIT_HOOKS is not set' , ( ) => {
529568 createGitHooksFolder ( PROJECT_WITH_CONF_IN_PACKAGE_JSON )
530- execSync ( `bun ${ require . resolve ( './cli' ) } ` , {
569+ execSync ( `bun ${ require . resolve ( '../bin /cli' ) } ` , {
531570 cwd : PROJECT_WITH_CONF_IN_PACKAGE_JSON ,
532571 } )
533572 const installedHooks = getInstalledGitHooks (
534573 path . normalize (
535574 path . join ( PROJECT_WITH_CONF_IN_PACKAGE_JSON , '.git' , 'hooks' ) ,
536575 ) ,
537576 )
538- expect ( installedHooks ) . toEqual ( { 'pre-commit' : TEST_SCRIPT } )
577+ // CLI tests run in fixture dir and use package.json config with pre-push
578+ expect ( installedHooks ) . toEqual ( {
579+ 'commit-msg' : `${ gitHooks . PREPEND_SCRIPT } bunx gitlint .git/COMMIT_EDITMSG` ,
580+ 'pre-commit' : `${ gitHooks . PREPEND_SCRIPT } exit 1` ,
581+ 'pre-push' : `${ gitHooks . PREPEND_SCRIPT } exit 1` ,
582+ } )
539583 } )
540584 } )
541585 } )
0 commit comments