@@ -4,14 +4,25 @@ import * as childProcess from 'child_process'
44import * as core from '@actions/core'
55import * as pluginManager from '../src/pluginManager/index.js'
66import * as npmPluginLoader from '../src/pluginManager/pluginNpmLoader.js'
7- import type { Plugin } from '../src/pluginManager/types.js'
7+ import * as scansContextProvider from '../src/scansContextProvider.js'
8+ import type { Plugin , NpmPluginRequest } from '../src/pluginManager/types.js'
89
910vi . mock ( 'child_process' , { spy : true } )
1011vi . mock ( '@actions/core' , { spy : true } )
1112vi . mock ( '../src/pluginManager/pluginNpmLoader.js' , { spy : true } )
13+ vi . mock ( '../src/scansContextProvider.js' , { spy : true } )
1214
1315const ALLOWED = '@github/accessibility-scanner-alt-text-plugin'
1416
17+ function mockNpmPlugins ( npmPlugins : NpmPluginRequest [ ] ) {
18+ vi . spyOn ( scansContextProvider , 'getScansContext' ) . mockReturnValue ( {
19+ scansToPerform : npmPlugins . map ( plugin => plugin . name ) ,
20+ npmPlugins,
21+ shouldPerformAxeScan : false ,
22+ shouldRunPlugins : true ,
23+ } )
24+ }
25+
1526describe ( 'npmPluginLoader' , ( ) => {
1627 beforeEach ( ( ) => {
1728 vi . restoreAllMocks ( )
@@ -62,14 +73,16 @@ describe('loadNpmPlugins', () => {
6273
6374 it ( 'loads a plugin from a first-party package' , async ( ) => {
6475 vi . spyOn ( npmPluginLoader , 'loadPluginViaNpm' ) . mockResolvedValue ( { name : 'alt-text-scan' , default : vi . fn ( ) } )
65- await pluginManager . loadNpmPlugins ( [ { name : 'alt-text-scan' , package : ALLOWED } ] )
76+ mockNpmPlugins ( [ { name : 'alt-text-scan' , package : ALLOWED } ] )
77+ await pluginManager . loadNpmPlugins ( )
6678 expect ( pluginManager . getPlugins ( ) . map ( plugin => plugin . name ) ) . toContain ( 'alt-text-scan' )
6779 } )
6880
6981 it ( 'skips and warns when a package is not first-party' , async ( ) => {
7082 const loadSpy = vi . spyOn ( npmPluginLoader , 'loadPluginViaNpm' ) . mockResolvedValue ( undefined )
7183 const warnSpy = vi . spyOn ( core , 'warning' ) . mockImplementation ( ( ) => { } )
72- await pluginManager . loadNpmPlugins ( [ { name : 'evil' , package : 'evil-pkg' } ] )
84+ mockNpmPlugins ( [ { name : 'evil' , package : 'evil-pkg' } ] )
85+ await pluginManager . loadNpmPlugins ( )
7386 expect ( loadSpy ) . not . toHaveBeenCalled ( )
7487 expect ( warnSpy ) . toHaveBeenCalled ( )
7588 expect ( pluginManager . getPlugins ( ) . length ) . toBe ( 0 )
@@ -78,23 +91,26 @@ describe('loadNpmPlugins', () => {
7891 it ( 'skips a package that does not export a valid plugin' , async ( ) => {
7992 vi . spyOn ( npmPluginLoader , 'loadPluginViaNpm' ) . mockResolvedValue ( { name : 'bad' } as unknown as Plugin )
8093 const warnSpy = vi . spyOn ( core , 'warning' ) . mockImplementation ( ( ) => { } )
81- await pluginManager . loadNpmPlugins ( [ { name : 'bad' , package : ALLOWED } ] )
94+ mockNpmPlugins ( [ { name : 'bad' , package : ALLOWED } ] )
95+ await pluginManager . loadNpmPlugins ( )
8296 expect ( warnSpy ) . toHaveBeenCalled ( )
8397 expect ( pluginManager . getPlugins ( ) . length ) . toBe ( 0 )
8498 } )
8599
86100 it ( 'skips an NPM plugin whose exported name does not match the requested name' , async ( ) => {
87101 vi . spyOn ( npmPluginLoader , 'loadPluginViaNpm' ) . mockResolvedValue ( { name : 'actual-name' , default : vi . fn ( ) } )
88102 const warnSpy = vi . spyOn ( core , 'warning' ) . mockImplementation ( ( ) => { } )
89- await pluginManager . loadNpmPlugins ( [ { name : 'requested-name' , package : ALLOWED } ] )
103+ mockNpmPlugins ( [ { name : 'requested-name' , package : ALLOWED } ] )
104+ await pluginManager . loadNpmPlugins ( )
90105 expect ( warnSpy ) . toHaveBeenCalled ( )
91106 expect ( pluginManager . getPlugins ( ) . length ) . toBe ( 0 )
92107 } )
93108
94109 it ( 'skips an NPM plugin whose name collides with an already-loaded plugin' , async ( ) => {
95110 pluginManager . getPlugins ( ) . push ( { name : 'dup' , default : vi . fn ( ) } )
96111 vi . spyOn ( npmPluginLoader , 'loadPluginViaNpm' ) . mockResolvedValue ( { name : 'dup' , default : vi . fn ( ) } )
97- await pluginManager . loadNpmPlugins ( [ { name : 'dup' , package : ALLOWED } ] )
112+ mockNpmPlugins ( [ { name : 'dup' , package : ALLOWED } ] )
113+ await pluginManager . loadNpmPlugins ( )
98114 expect ( pluginManager . getPlugins ( ) . filter ( plugin => plugin . name === 'dup' ) . length ) . toBe ( 1 )
99115 } )
100116} )
0 commit comments