@@ -129,6 +129,42 @@ test('skip enabling 2FA if the `2fa` option is false', async t => {
129129 t . true ( enable2faStub . notCalled ) ;
130130} ) ;
131131
132+ test ( 'skip enabling 2FA in trusted publishing (OIDC) contexts' , async t => {
133+ const enable2faStub = sinon . stub ( ) ;
134+
135+ /** @type {typeof np } */
136+ const npMock = await esmock ( '../source/index.js' , {
137+ del : { deleteAsync : sinon . stub ( ) } ,
138+ execa : { execa : sinon . stub ( ) . returns ( fakeExecaReturn ( ) ) } ,
139+ '../source/prerequisite-tasks.js' : sinon . stub ( ) ,
140+ '../source/git-tasks.js' : sinon . stub ( ) ,
141+ '../source/git-util.js' : {
142+ hasUpstream : sinon . stub ( ) . returns ( true ) ,
143+ pushGraceful : sinon . stub ( ) ,
144+ verifyWorkingTreeIsClean : sinon . stub ( ) ,
145+ } ,
146+ '../source/npm/enable-2fa.js' : enable2faStub ,
147+ '../source/npm/publish.js' : {
148+ getPackagePublishArguments : sinon . stub ( ) . returns ( [ ] ) ,
149+ runPublish : sinon . stub ( ) . returns ( fakeObservableReturn ( ) ) ,
150+ } ,
151+ '../source/npm/oidc.js' : {
152+ getOidcProvider : ( ) => 'github' ,
153+ } ,
154+ } ) ;
155+
156+ await t . notThrowsAsync ( npMock ( '1.0.0' , {
157+ ...defaultOptions ,
158+ availability : {
159+ isAvailable : true ,
160+ isUnknown : false ,
161+ } ,
162+ '2fa' : true ,
163+ } , npPackageResult ) ) ;
164+
165+ t . true ( enable2faStub . notCalled ) ;
166+ } ) ;
167+
132168test ( 'rollback is called when publish fails' , async t => {
133169 const deleteTagStub = sinon . stub ( ) . resolves ( ) ;
134170 const removeLastCommitStub = sinon . stub ( ) . resolves ( ) ;
0 commit comments