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