@@ -5,19 +5,19 @@ import { HerokuResourceExplorerProvider } from './heroku-resource-explorer-provi
5
5
import { App , Dyno , Formation , AddOn } from '@heroku-cli/schema' ;
6
6
import { randomUUID } from 'node:crypto' ;
7
7
import * as gitUtils from '../../utils/git-utils' ;
8
- import { LogStreamClient , LogStreamEvents } from './log-stream-client' ;
9
8
import { Readable , Writable } from 'node:stream' ;
9
+ import { WatchConfig } from '../../commands/git/watch-config' ;
10
10
11
11
suite ( 'HerokuResourceExplorerProvider' , ( ) => {
12
12
let provider : HerokuResourceExplorerProvider ;
13
13
let mockContext : vscode . ExtensionContext ;
14
14
let getSessionStub : sinon . SinonStub ;
15
+ let vsCodeExecCommandStub : sinon . SinonStub ;
15
16
let fetchStub : sinon . SinonStub ;
16
17
let elementTypeMap : Map < unknown , unknown > ;
17
18
let childParentMap : Map < unknown , unknown > ;
18
19
let appToResourceMap : Map < unknown , unknown > ;
19
20
let getHerokuAppNamesStub : sinon . SinonStub ;
20
- let logStreamClientStub : LogStreamClient ;
21
21
let stream : Writable ;
22
22
23
23
const mockApp = { id : 'app1' , name : 'test-app' , organization : { name : 'test-org' } } as App ;
@@ -47,12 +47,19 @@ suite('HerokuResourceExplorerProvider', () => {
47
47
}
48
48
} as any ;
49
49
50
- getSessionStub = sinon . stub ( vscode . authentication , 'getSession' ) . callsFake ( async ( providerId : string ) => {
51
- if ( providerId === 'heroku:auth:login' ) {
52
- return sessionObject ;
53
- }
54
- return undefined ;
55
- } ) ;
50
+ getSessionStub = sinon
51
+ . stub ( vscode . authentication , 'getSession' )
52
+ . withArgs ( 'heroku:auth:login' )
53
+ . resolves ( sessionObject ) ;
54
+
55
+ vsCodeExecCommandStub = sinon . stub ( vscode . commands , 'executeCommand' ) ;
56
+ vsCodeExecCommandStub . withArgs ( WatchConfig . COMMAND_ID , sinon . match . any ) . resolves (
57
+ ( function * ( ) {
58
+ yield { added : new Set ( [ mockApp . name ] ) , removed : new Set ( ) } ;
59
+ } ) ( )
60
+ ) ;
61
+
62
+ vsCodeExecCommandStub . callThrough ( ) ;
56
63
57
64
// LogStream stub
58
65
stream = new Writable ( ) ;
@@ -71,6 +78,7 @@ suite('HerokuResourceExplorerProvider', () => {
71
78
) ;
72
79
73
80
fetchStub = sinon . stub ( global , 'fetch' ) ;
81
+ fetchStub . withArgs ( 'https://api.heroku.com/apps/test-app' ) . resolves ( new Response ( JSON . stringify ( mockApp ) ) ) ;
74
82
fetchStub . withArgs ( 'https://api.heroku.com/apps/app1' ) . resolves ( new Response ( JSON . stringify ( mockApp ) ) ) ;
75
83
fetchStub . withArgs ( 'https://api.heroku.com/apps/app1/dynos' ) . resolves ( new Response ( JSON . stringify ( [ mockDyno ] ) ) ) ;
76
84
fetchStub . withArgs ( 'https://api.heroku.com/apps/app1/addons' ) . resolves ( new Response ( JSON . stringify ( [ mockAddOn ] ) ) ) ;
@@ -95,8 +103,6 @@ suite('HerokuResourceExplorerProvider', () => {
95
103
getHerokuAppNamesStub = sinon . stub ( gitUtils , 'getHerokuAppNames' ) . resolves ( [ 'app1' ] ) ;
96
104
97
105
provider = new HerokuResourceExplorerProvider ( mockContext ) ;
98
- logStreamClientStub = new LogStreamClient ( ) ;
99
- Reflect . set ( provider , 'logStreamClient' , logStreamClientStub ) ;
100
106
101
107
elementTypeMap = Reflect . get ( provider , 'elementTypeMap' ) as Map < unknown , unknown > ;
102
108
childParentMap = Reflect . get ( provider , 'childParentMap' ) as Map < unknown , unknown > ;
@@ -108,12 +114,14 @@ suite('HerokuResourceExplorerProvider', () => {
108
114
} ) ;
109
115
110
116
test ( 'getChildren should return apps when no element is provided' , async ( ) => {
117
+ await new Promise ( ( resolve ) => provider . event ( resolve ) ) ;
111
118
const children = await provider . getChildren ( ) ;
112
119
assert . strictEqual ( children . length , 1 ) ;
113
120
assert . deepStrictEqual ( children [ 0 ] , mockApp ) ;
114
121
} ) ;
115
122
116
123
test ( 'getChildren should return app categories when an app is provided' , async ( ) => {
124
+ await new Promise ( ( resolve ) => provider . event ( resolve ) ) ;
117
125
const [ app ] = await provider . getChildren ( ) ; // Populate appToResourceMap
118
126
const children = ( await provider . getChildren ( app ) ) as vscode . TreeItem [ ] ;
119
127
assert . strictEqual ( children . length , 4 ) ;
@@ -124,6 +132,7 @@ suite('HerokuResourceExplorerProvider', () => {
124
132
} ) ;
125
133
126
134
test ( 'getChildren should return formations when FORMATIONS category is provided' , async ( ) => {
135
+ await new Promise ( ( resolve ) => provider . event ( resolve ) ) ;
127
136
const [ app ] = await provider . getChildren ( ) ; // Populate appToResourceMap
128
137
const categories = ( await provider . getChildren ( app ) ) as vscode . TreeItem [ ] ;
129
138
const formationsCategory = categories . find ( ( c ) => c . label === 'FORMATIONS' ) ;
@@ -151,6 +160,7 @@ suite('HerokuResourceExplorerProvider', () => {
151
160
} ) ;
152
161
153
162
test ( 'onFormationScaledTo should update formation quantity and fire event' , async ( ) => {
163
+ await new Promise ( ( resolve ) => provider . event ( resolve ) ) ;
154
164
const [ app ] = await provider . getChildren ( ) ; // Populate appToResourceMap
155
165
const categories = ( await provider . getChildren ( app ) ) as vscode . TreeItem [ ] ; // gets the categories
156
166
@@ -167,6 +177,7 @@ suite('HerokuResourceExplorerProvider', () => {
167
177
} ) ;
168
178
169
179
test ( 'onDynoStateChanged should update dyno state and fire event' , async ( ) => {
180
+ await new Promise ( ( resolve ) => provider . event ( resolve ) ) ;
170
181
const [ app ] = await provider . getChildren ( ) ; // Populate appToResourceMap
171
182
const categories = ( await provider . getChildren ( app ) ) as vscode . TreeItem [ ] ; // gets the categories
172
183
@@ -184,6 +195,7 @@ suite('HerokuResourceExplorerProvider', () => {
184
195
} ) ;
185
196
186
197
test ( 'onDynoStateChanged should add the new dyno when startup occurs' , async ( ) => {
198
+ await new Promise ( ( resolve ) => provider . event ( resolve ) ) ;
187
199
const [ app ] = await provider . getChildren ( ) ; // Populate appToResourceMap
188
200
const categories = ( await provider . getChildren ( app ) ) as vscode . TreeItem [ ] ; // gets the categories
189
201
0 commit comments