@@ -2,6 +2,7 @@ import { GenerateCommit } from './generate-commit';
22import { ProviderEnum } from '@/interfaces' ;
33import { makeProvidersFake } from '@/tests/fakes/providers' ;
44import {
5+ DEFAULT_ENV ,
56 makeAppUtilsFake ,
67 makeEnvUtilsFake ,
78 makeInputUtilsFake ,
@@ -39,20 +40,21 @@ describe('GenerateCommit', () => {
3940
4041 it ( 'should create an instance of GenerateCommit' , ( ) => {
4142 const { sut } = makeSut ( ) ;
42-
4343 expect ( sut ) . toBeInstanceOf ( GenerateCommit ) ;
4444 } ) ;
4545
4646 it ( 'should log an error and exit if provider is not set' , async ( ) => {
47- const { sut, appUtils } = makeSut ( ) ;
47+ const { sut, appUtils, processUtils } = makeSut ( ) ;
4848
49- const exitSpy = vi . spyOn ( process , 'exit' ) . mockImplementation ( ( number ) => {
50- throw new Error ( 'process.exit: ' + number ) ;
49+ const exitSpy = vi . spyOn ( process , 'exit' ) . mockImplementation ( ( ) => {
50+ throw new Error ( 'process.exit called' ) ;
5151 } ) ;
5252 const loggerMessageSpy = vi . spyOn ( appUtils . logger , 'message' ) ;
5353 const loggerErrorSpy = vi . spyOn ( appUtils . logger , 'error' ) ;
5454
55- await expect ( sut . execute ( ) ) . rejects . toThrow ( ) ;
55+ vi . spyOn ( processUtils , 'exec' ) . mockResolvedValue ( 'diff' ) ;
56+
57+ await expect ( sut . execute ( ) ) . rejects . toThrow ( 'process.exit called' ) ;
5658
5759 expect ( loggerErrorSpy ) . toHaveBeenCalledWith ( 'AI provider not set.' ) ;
5860
@@ -67,17 +69,18 @@ describe('GenerateCommit', () => {
6769 const { sut, appUtils, envUtils, processUtils } = makeSut ( ) ;
6870
6971 const loggerMessageSpy = vi . spyOn ( appUtils . logger , 'error' ) ;
70- const exitSpy = vi . spyOn ( process , 'exit' ) . mockImplementation ( ( number ) => {
71- throw new Error ( 'process.exit: ' + number ) ;
72+ const exitSpy = vi . spyOn ( process , 'exit' ) . mockImplementation ( ( ) => {
73+ throw new Error ( 'process.exit called' ) ;
7274 } ) ;
7375
7476 vi . spyOn ( envUtils , 'variables' ) . mockReturnValueOnce ( {
77+ ...DEFAULT_ENV ,
7578 PROVIDER : ProviderEnum . OpenAI ,
7679 } ) ;
7780
7881 vi . spyOn ( processUtils , 'exec' ) . mockResolvedValueOnce ( '' ) ;
7982
80- await expect ( sut . execute ( ) ) . rejects . toThrow ( ) ;
83+ await expect ( sut . execute ( ) ) . rejects . toThrow ( 'process.exit called' ) ;
8184 expect ( loggerMessageSpy ) . toHaveBeenCalledWith ( 'No changes to commit.' ) ;
8285 expect ( exitSpy ) . toHaveBeenCalledWith ( 0 ) ;
8386 } ) ;
@@ -89,63 +92,65 @@ describe('GenerateCommit', () => {
8992 . spyOn ( process , 'exit' )
9093 . mockImplementation ( ( number ) => number as never ) ;
9194
92- const variablesSpy = vi . spyOn ( envUtils , 'variables' ) . mockReturnValueOnce ( {
95+ vi . spyOn ( envUtils , 'variables' ) . mockReturnValueOnce ( {
96+ ...DEFAULT_ENV ,
9397 PROVIDER : ProviderEnum . OpenAI ,
9498 } ) ;
9599
96- const generateCommitMessagesSpy = vi
97- . spyOn ( providers [ ProviderEnum . OpenAI ] , 'generateCommitMessages' )
98- . mockResolvedValueOnce ( [ 'commit message' ] ) ;
100+ vi . spyOn (
101+ providers [ ProviderEnum . OpenAI ] ,
102+ 'generateCommitMessages' ,
103+ ) . mockResolvedValueOnce ( [ 'commit message' ] ) ;
99104
100- const execSpy = vi
101- . spyOn ( processUtils , 'exec' )
102- . mockResolvedValueOnce ( 'some changes' ) ;
105+ vi . spyOn ( processUtils , 'exec' ) . mockResolvedValue ( 'some changes' ) ;
103106
104- const promptSpy = vi
105- . spyOn ( inputUtils , 'prompt' )
106- . mockResolvedValueOnce ( 'commit message' ) ;
107+ vi . spyOn ( inputUtils , 'prompt' ) . mockResolvedValueOnce ( 'commit message' ) ;
107108
108109 await expect ( sut . execute ( ) ) . resolves . not . toThrow ( ) ;
109110
110- expect ( variablesSpy ) . toHaveBeenCalled ( ) ;
111-
112- expect ( generateCommitMessagesSpy ) . toHaveBeenCalledWith ( {
113- diff : 'some changes' ,
114- } ) ;
111+ expect (
112+ providers [ ProviderEnum . OpenAI ] . generateCommitMessages ,
113+ ) . toHaveBeenCalledOnce ( ) ;
115114
116- expect ( execSpy ) . toHaveBeenCalledWith ( `git commit -m "commit message"` , {
117- showStdout : true ,
118- } ) ;
115+ expect ( processUtils . exec ) . toHaveBeenCalledWith (
116+ `git commit -m "commit message"` ,
117+ {
118+ showStdout : true ,
119+ } ,
120+ ) ;
119121
120- expect ( promptSpy ) . toHaveBeenCalled ( ) ;
121122 expect ( exitSpy ) . toHaveBeenCalledWith ( 0 ) ;
122123 } ) ;
123124
124125 it ( 'should call execute again if user chooses to regenerate' , async ( ) => {
125126 const { sut, envUtils, processUtils, inputUtils, providers } = makeSut ( ) ;
126127
127- const exitSpy = vi . spyOn ( process , 'exit' ) . mockImplementation ( ( ) => {
128+ vi . spyOn ( process , 'exit' ) . mockImplementation ( ( ) => {
128129 throw new Error ( 'process.exit called' ) ;
129130 } ) ;
130131
131- vi . spyOn ( envUtils , 'variables' ) . mockReturnValue ( {
132- PROVIDER : ProviderEnum . OpenAI ,
133- } ) ;
132+ vi . spyOn ( envUtils , 'variables' )
133+ . mockReturnValueOnce ( {
134+ ...DEFAULT_ENV ,
135+ PROVIDER : ProviderEnum . OpenAI ,
136+ } )
137+ . mockImplementationOnce ( ( ) => {
138+ throw new Error ( 'end process' ) ;
139+ } ) ;
134140
135141 vi . spyOn (
136142 providers [ ProviderEnum . OpenAI ] ,
137143 'generateCommitMessages' ,
138144 ) . mockResolvedValueOnce ( [ 'commit 1' , 'commit 2' ] ) ;
139145
140- vi . spyOn ( processUtils , 'exec' ) . mockResolvedValueOnce ( 'some changes' ) ;
146+ vi . spyOn ( processUtils , 'exec' ) . mockResolvedValue ( 'some changes' ) ;
141147
142148 vi . spyOn ( inputUtils , 'prompt' ) . mockResolvedValueOnce ( '↻ regenerate' ) ;
143149
144150 const executeSpy = vi . spyOn ( sut , 'execute' ) ;
145151
146- await expect ( sut . execute ( ) ) . rejects . toThrow ( 'process.exit called ' ) ;
152+ await expect ( sut . execute ( ) ) . rejects . toThrow ( 'end process ' ) ;
147153
148154 expect ( executeSpy ) . toHaveBeenCalledTimes ( 2 ) ;
149- expect ( exitSpy ) . toHaveBeenCalledWith ( 0 ) ;
150155 } ) ;
151156} ) ;
0 commit comments