1- import * as glob from '@actions/glob'
2- import * as exec from '@actions/exec'
1+ import { jest } from '@jest/globals'
32
4- process . env [ 'RUNNER_TEMP' ] = '/tmp'
3+ const mockGlob = jest . fn < ( ) => Promise < string [ ] > > ( )
4+ const mockCreate = jest . fn < ( patterns : string , options ?: object ) => Promise < { glob : ( ) => Promise < string [ ] > } > > ( )
5+
6+ jest . unstable_mockModule ( '@actions/glob' , ( ) => ( {
7+ create : mockCreate
8+ } ) )
9+
10+ function setupGlob ( matchedFiles : string [ ] ) : void {
11+ mockGlob . mockResolvedValue ( matchedFiles )
12+ mockCreate . mockResolvedValue ( { glob : mockGlob } )
13+ }
14+
15+ const mockExecOutput = jest . fn < ( ) => Promise < object > > ( )
16+
17+ jest . unstable_mockModule ( '@actions/exec' , ( ) => ( {
18+ getExecOutput : mockExecOutput
19+ } ) )
20+
21+ jest . unstable_mockModule ( '../../src/utils/io' , ( ) => ( {
22+ existsSync : jest . fn ( ) . mockReturnValue ( true ) ,
23+ writeContentToFileSync : jest . fn ( )
24+ } ) )
525
6- import * as github from '@actions/github'
7- import * as maven from '../../src/buildTool/maven'
8- import * as io from '../../src/utils/io'
26+ process . env [ 'RUNNER_TEMP' ] = '/tmp'
927
10- const buildTool = maven . mavenBuildTool
28+ const { mavenBuildTool } = await import ( '../../src/buildTool/maven' )
1129
1230describe ( 'publish' , ( ) => {
13- let execMock : any
1431 let createPublisherProjectMock : any
1532 let createPluginDescriptorMock : any
1633
1734 beforeEach ( ( ) => {
18- Object . defineProperty ( github , 'context' , {
19- value : {
20- repo : {
21- owner : 'foo' ,
22- repo : 'bar'
23- } ,
24- issue : {
25- number : 42
26- }
27- }
28- } )
29- createPublisherProjectMock = jest . spyOn ( buildTool , 'createPublisherProjectStructure' ) . mockReturnValue ( )
35+ createPublisherProjectMock = jest . spyOn ( mavenBuildTool , 'createPublisherProjectStructure' ) . mockReturnValue ( )
3036 createPluginDescriptorMock = jest
31- . spyOn ( buildTool , 'createPluginDescriptorFileWithCurrentVersion' )
37+ . spyOn ( mavenBuildTool , 'createPluginDescriptorFileWithCurrentVersion' )
3238 . mockReturnValue ( )
3339 } )
3440
@@ -38,78 +44,69 @@ describe('publish', () => {
3844
3945 it ( 'Publish build scan succeeds' , async ( ) => {
4046 // given
41- jest . spyOn ( io , 'existsSync' ) . mockReturnValue ( true )
42- execMock = jest
43- . spyOn ( exec , 'getExecOutput' )
47+ mockExecOutput
4448 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Java 1.0' } ) )
4549 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Maven 1.0' } ) )
4650 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Build Successful' } ) )
4751 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Build Successful' } ) )
48- jest . spyOn ( glob , 'create' ) . mockReturnValue (
49- Promise . resolve ( {
50- // @ts -ignore
51- glob ( ) {
52- return [
53- '/home/foo/.m2/build-scan-data/1.42/previous/abcdef/scan.scan' ,
54- '/home/foo/.m2/build-scan-data/1.42/previous/ghijkl/scan.scan'
55- ]
56- }
57- } )
58- )
52+ setupGlob ( [
53+ '/home/foo/.m2/build-scan-data/1.42/previous/abcdef/scan.scan' ,
54+ '/home/foo/.m2/build-scan-data/1.42/previous/ghijkl/scan.scan'
55+ ] )
5956
6057 // when
61- await buildTool . buildScanPublish ( )
58+ await mavenBuildTool . buildScanPublish ( )
6259
6360 // then
6461 expect ( createPublisherProjectMock ) . toHaveBeenCalledTimes ( 1 )
6562 expect ( createPluginDescriptorMock ) . toHaveBeenCalledTimes ( 2 )
66- expect ( execMock ) . toHaveBeenCalledTimes ( 4 )
63+ expect ( mockExecOutput ) . toHaveBeenCalledTimes ( 4 )
6764 } )
6865
69- it ( 'Publish build scan does nothing when java command fails' , async ( ) => {
66+ it ( 'Publish build scan throws an error when java command fails' , async ( ) => {
7067 // given
71- execMock = jest
72- . spyOn ( exec , 'getExecOutput' )
73- . mockReturnValueOnce ( Promise . resolve ( { stderr : 'java not found' , exitCode : 1 , stdout : '' } ) )
68+ mockExecOutput . mockReturnValueOnce ( Promise . resolve ( { stderr : 'java not found' , exitCode : 1 , stdout : '' } ) )
69+ setupGlob ( [
70+ '/home/foo/.m2/build-scan-data/1.42/previous/abcdef/scan.scan' ,
71+ '/home/foo/.m2/build-scan-data/1.42/previous/ghijkl/scan.scan'
72+ ] )
7473
7574 // when / then
76- await expect ( async ( ) => buildTool . buildScanPublish ( ) ) . rejects . toThrow ( Error )
75+ await expect ( async ( ) => mavenBuildTool . buildScanPublish ( ) ) . rejects . toThrow ( Error )
7776 } )
7877
79- it ( 'Publish build scan does nothing when maven version command fails' , async ( ) => {
78+ it ( 'Publish build scan throws an error when maven version command fails' , async ( ) => {
8079 // given
81- execMock = jest
82- . spyOn ( exec , 'getExecOutput' )
80+ mockExecOutput
8381 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Java 1.0' } ) )
8482 . mockReturnValueOnce ( Promise . resolve ( { stderr : 'mvn not found' , exitCode : 1 , stdout : '' } ) )
83+ setupGlob ( [
84+ '/home/foo/.m2/build-scan-data/1.42/previous/abcdef/scan.scan' ,
85+ '/home/foo/.m2/build-scan-data/1.42/previous/ghijkl/scan.scan'
86+ ] )
8587
8688 // when / then
87- await expect ( async ( ) => buildTool . buildScanPublish ( ) ) . rejects . toThrow ( Error )
89+ await expect ( async ( ) => mavenBuildTool . buildScanPublish ( ) ) . rejects . toThrow ( Error )
8890 } )
8991
90- it ( 'Publish build scan does nothing when maven publish command fails' , async ( ) => {
92+ it ( 'Publish build scan succeeds when maven publish command fails' , async ( ) => {
9193 // given
92- execMock = jest
93- . spyOn ( exec , 'getExecOutput' )
94+ mockExecOutput
9495 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Java 1.0' } ) )
9596 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Maven 1.0' } ) )
9697 . mockReturnValueOnce ( Promise . resolve ( { stderr : 'mvn publication failed' , exitCode : 1 , stdout : '' } ) )
9798 . mockReturnValueOnce ( Promise . resolve ( { stderr : '' , exitCode : 0 , stdout : 'Build Scan published' } ) )
98-
99- // @ts -ignore
100- jest . spyOn ( glob , 'create' ) . mockReturnValue (
101- Promise . resolve ( {
102- // @ts -ignore
103- glob ( ) {
104- return [
105- '/home/foo/.m2/build-scan-data/1.42/previous/abcdef/scan.scan' ,
106- '/home/foo/.m2/build-scan-data/1.42/previous/ghijkl/scan.scan'
107- ]
108- }
109- } )
110- )
99+ setupGlob ( [
100+ '/home/foo/.m2/build-scan-data/1.42/previous/abcdef/scan.scan' ,
101+ '/home/foo/.m2/build-scan-data/1.42/previous/ghijkl/scan.scan'
102+ ] )
111103
112104 // when / then
113- await buildTool . buildScanPublish ( )
105+ await mavenBuildTool . buildScanPublish ( )
106+
107+ // then
108+ expect ( createPublisherProjectMock ) . toHaveBeenCalledTimes ( 1 )
109+ expect ( createPluginDescriptorMock ) . toHaveBeenCalledTimes ( 2 )
110+ expect ( mockExecOutput ) . toHaveBeenCalledTimes ( 4 )
114111 } )
115112} )
0 commit comments