@@ -27,7 +27,7 @@ describe('GitHubIssueOrPullRequestExternalUriOpener', () => {
2727 sandbox . restore ( ) ;
2828 } ) ;
2929
30- it ( 'creates a remote-only folder manager when no local manager is available ' , async ( ) => {
30+ it ( 'opens an unresolved issue with the default external opener ' , async ( ) => {
3131 const context = new MockExtensionContext ( ) ;
3232 const telemetry = new MockTelemetry ( ) ;
3333 const credentialStore = new CredentialStore ( telemetry , context ) ;
@@ -46,7 +46,7 @@ describe('GitHubIssueOrPullRequestExternalUriOpener', () => {
4646 assert . ok ( this . repository instanceof RemoteOnlyRepository ) ;
4747 return undefined ;
4848 } ) ;
49- sandbox . stub ( vscode . window , 'showErrorMessage ' ) . resolves ( undefined ) ;
49+ const openExternal = sandbox . stub ( vscode . env , 'openExternal ' ) . resolves ( true ) ;
5050
5151 try {
5252 await configuration . update ( OPEN_PULL_LINKS , true , vscode . ConfigurationTarget . Global ) ;
@@ -62,6 +62,51 @@ describe('GitHubIssueOrPullRequestExternalUriOpener', () => {
6262
6363 assert . strictEqual ( repositoriesManager . folderManagers . length , 0 ) ;
6464 assert . strictEqual ( resolveIssue . callCount , 1 ) ;
65+ assert . ok ( openExternal . calledOnceWith ( uri , { allowContributedOpeners : 'default' } ) ) ;
66+ } finally {
67+ cancellation ?. dispose ( ) ;
68+ registration ?. dispose ( ) ;
69+ folderRepositoryManagerResolver . dispose ( ) ;
70+ repositoriesManager . dispose ( ) ;
71+ credentialStore . dispose ( ) ;
72+ context . dispose ( ) ;
73+ }
74+ } ) ;
75+
76+ it ( 'opens an unresolved pull request with the default external opener' , async ( ) => {
77+ const context = new MockExtensionContext ( ) ;
78+ const telemetry = new MockTelemetry ( ) ;
79+ const credentialStore = new CredentialStore ( telemetry , context ) ;
80+ const repositoriesManager = new RepositoriesManager ( credentialStore , telemetry ) ;
81+ const folderRepositoryManagerResolver = new FolderRepositoryManagerResolver ( context , repositoriesManager , telemetry ) ;
82+ let opener : vscode . ExternalUriOpener | undefined ;
83+ let registration : vscode . Disposable | undefined ;
84+ let cancellation : vscode . CancellationTokenSource | undefined ;
85+ sandbox . stub ( vscode . window , 'registerExternalUriOpener' ) . callsFake ( ( _id , value ) => {
86+ opener = value ;
87+ return new vscode . Disposable ( ( ) => undefined ) ;
88+ } ) ;
89+ const resolvePullRequest = sandbox . stub ( FolderRepositoryManager . prototype , 'resolvePullRequest' ) . callsFake ( async function ( this : FolderRepositoryManager ) {
90+ assert . ok ( this . repository instanceof RemoteOnlyRepository ) ;
91+ return undefined ;
92+ } ) ;
93+ const openExternal = sandbox . stub ( vscode . env , 'openExternal' ) . resolves ( true ) ;
94+
95+ try {
96+ registration = registerGitHubIssueOrPullRequestExternalUriOpener (
97+ context ,
98+ folderRepositoryManagerResolver ,
99+ telemetry ,
100+ ) ;
101+ const uri = vscode . Uri . parse ( 'https://github.com/microsoft/vscode/pull/1' ) ;
102+ assert . ok ( opener ) ;
103+ sandbox . stub ( opener as any , 'isOpenPullLinksEnabled' ) . returns ( true ) ;
104+ cancellation = new vscode . CancellationTokenSource ( ) ;
105+ await opener . openExternalUri ( uri , { sourceUri : uri } , cancellation . token ) ;
106+
107+ assert . strictEqual ( repositoriesManager . folderManagers . length , 0 ) ;
108+ assert . strictEqual ( resolvePullRequest . callCount , 1 ) ;
109+ assert . ok ( openExternal . calledOnceWith ( uri , { allowContributedOpeners : 'default' } ) ) ;
65110 } finally {
66111 cancellation ?. dispose ( ) ;
67112 registration ?. dispose ( ) ;
0 commit comments