Skip to content

Commit e338120

Browse files
committed
fix: adjust stubs to use new paginator
1 parent e618d4c commit e338120

File tree

3 files changed

+26
-23
lines changed

3 files changed

+26
-23
lines changed

packages/core/src/awsService/apprunner/explorer/apprunnerNode.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ import * as nls from 'vscode-nls'
1111
import { AppRunnerClient, AppRunnerServiceSummary } from '../../../shared/clients/apprunner'
1212
import { AppRunner } from 'aws-sdk'
1313
import { PollingSet } from '../../../shared/utilities/pollingSet'
14-
import { ListServicesRequest, ServiceSummary } from '@aws-sdk/client-apprunner'
15-
import { hasProps } from '../../../shared/utilities/tsUtils'
14+
import { ListServicesRequest } from '@aws-sdk/client-apprunner'
1615

1716
const localize = nls.loadMessageBundle()
1817

@@ -22,7 +21,7 @@ export class AppRunnerNode extends AWSTreeNodeBase {
2221

2322
public constructor(
2423
public override readonly regionCode: string,
25-
public readonly client: AppRunnerClient
24+
public client: AppRunnerClient
2625
) {
2726
super('App Runner', vscode.TreeItemCollapsibleState.Collapsed)
2827
this.contextValue = 'awsAppRunnerNode'
@@ -46,11 +45,8 @@ export class AppRunnerNode extends AWSTreeNodeBase {
4645

4746
private async getServiceSummaries(request: ListServicesRequest = {}): Promise<AppRunnerServiceSummary[]> {
4847
// TODO: avoid resolving all services at once.
49-
return await this.client.paginateServices(request).flatten().filter(isService).promise()
50-
51-
function isService(s: ServiceSummary): s is AppRunnerServiceSummary {
52-
return hasProps(s, 'ServiceName', 'ServiceArn', 'Status', 'ServiceId')
53-
}
48+
const serviceCollection = this.client.paginateServices(request)
49+
return await serviceCollection.flatten().promise()
5450
}
5551

5652
public async updateChildren(): Promise<void> {

packages/core/src/shared/clients/apprunner.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ import {
3333
UpdateServiceResponse,
3434
} from '@aws-sdk/client-apprunner'
3535
import { ClientWrapper } from './clientWrapper'
36-
import { RequiredProps } from '../utilities/tsUtils'
36+
import { hasProps, RequiredProps } from '../utilities/tsUtils'
37+
import { AsyncCollection } from '../utilities/asyncCollection'
3738

3839
export type AppRunnerService = RequiredProps<Service, 'ServiceName' | 'ServiceArn' | 'Status' | 'ServiceId'>
3940
export type AppRunnerServiceSummary = RequiredProps<
@@ -43,7 +44,6 @@ export type AppRunnerServiceSummary = RequiredProps<
4344

4445
// Note: Many of the requests return a type of Service, but Service <: ServiceSummary.
4546
type WithServiceSummary<T> = Omit<T, 'Service'> & { Service: AppRunnerServiceSummary }
46-
4747
export class AppRunnerClient extends ClientWrapper<AppRunnerClientSDK> {
4848
public constructor(regionCode: string) {
4949
super(regionCode, AppRunnerClientSDK)
@@ -57,8 +57,14 @@ export class AppRunnerClient extends ClientWrapper<AppRunnerClientSDK> {
5757
return await this.makeRequest(ListServicesCommand, request)
5858
}
5959

60-
public paginateServices(request: ListServicesRequest) {
61-
return this.makePaginatedRequest(paginateListServices, request, (page) => page.ServiceSummaryList)
60+
public paginateServices(request: ListServicesRequest): AsyncCollection<AppRunnerServiceSummary[]> {
61+
return this.makePaginatedRequest(paginateListServices, request, (page) => page.ServiceSummaryList).map(
62+
(summaries) => summaries.filter(isServiceSummary)
63+
)
64+
65+
function isServiceSummary(s: ServiceSummary): s is AppRunnerServiceSummary {
66+
return hasProps(s, 'ServiceName', 'ServiceArn', 'Status', 'ServiceId')
67+
}
6268
}
6369

6470
public async pauseService(request: PauseServiceRequest): Promise<WithServiceSummary<PauseServiceResponse>> {

packages/core/src/test/awsService/apprunner/explorer/apprunnerNode.test.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,26 @@
66
import assert from 'assert'
77
import * as FakeTimers from '@sinonjs/fake-timers'
88
import * as sinon from 'sinon'
9-
import { AppRunner } from 'aws-sdk'
109
import { AppRunnerNode } from '../../../../awsService/apprunner/explorer/apprunnerNode'
1110
import { AppRunnerServiceNode } from '../../../../awsService/apprunner/explorer/apprunnerServiceNode'
12-
import { AppRunnerClient } from '../../../../shared/clients/apprunner'
11+
import { AppRunnerClient, AppRunnerServiceSummary } from '../../../../shared/clients/apprunner'
1312
import { PlaceholderNode } from '../../../../shared/treeview/nodes/placeholderNode'
1413
import { AWSTreeNodeBase } from '../../../../shared/treeview/nodes/awsTreeNodeBase'
1514
import { installFakeClock } from '../../../testUtil'
15+
import { intoCollection } from '../../../../shared/utilities/collectionUtils'
1616

1717
describe('AppRunnerNode', function () {
1818
let mockApprunnerClient: AppRunnerClient
1919
let node: AppRunnerNode
2020
let clock: FakeTimers.InstalledClock
2121
let refreshStub: sinon.SinonStub<[], void>
2222

23-
const exampleSummaries: AppRunner.ServiceSummaryList = [
23+
const exampleSummaries: AppRunnerServiceSummary[] = [
2424
{
2525
ServiceName: 'test1',
2626
Status: 'RUNNING',
2727
ServiceArn: 'test-arn1',
28+
ServiceId: 'Amazon',
2829
},
2930
]
3031

@@ -35,7 +36,7 @@ describe('AppRunnerNode', function () {
3536

3637
beforeEach(function () {
3738
mockApprunnerClient = {
38-
listServices: sinon.stub().resolves({ ServiceSummaryList: exampleSummaries }),
39+
paginateServices: sinon.stub().returns(intoCollection([exampleSummaries])),
3940
listOperations: sinon.stub().resolves({ OperationSummaryList: [] }),
4041
} as any as AppRunnerClient
4142
node = new AppRunnerNode('', mockApprunnerClient)
@@ -56,17 +57,17 @@ describe('AppRunnerNode', function () {
5657
const childNode = (await node.getChildren())[0] as AppRunnerServiceNode
5758

5859
const updatedSummary = { ...exampleSummaries[0], Status: 'PAUSED' }
59-
const serviceStub = sinon.stub().resolves({ ServiceSummaryList: [updatedSummary] })
60-
mockApprunnerClient.listServices = serviceStub
60+
const serviceStub = sinon.stub().returns(intoCollection([[updatedSummary]]))
61+
mockApprunnerClient.paginateServices = serviceStub
6162

6263
await node.getChildren()
6364
assert.strictEqual(childNode.info.Status, 'PAUSED')
6465
})
6566

6667
it('deletes AppRunnerServiceNodes', async function () {
6768
await node.getChildren()
68-
const serviceStub = sinon.stub().resolves({ ServiceSummaryList: [] })
69-
mockApprunnerClient.listServices = serviceStub
69+
const serviceStub = sinon.stub().returns(intoCollection([[]]))
70+
mockApprunnerClient.paginateServices = serviceStub
7071

7172
assert.ok((await node.getChildren())[0] instanceof PlaceholderNode)
7273
})
@@ -77,10 +78,10 @@ describe('AppRunnerNode', function () {
7778
const serviceStub = sinon
7879
.stub()
7980
.onFirstCall()
80-
.resolves({ ServiceSummaryList: [transientService] })
81+
.returns(intoCollection([[transientService]]))
8182
.onSecondCall()
82-
.resolves({ ServiceSummaryList: [pausedService] })
83-
mockApprunnerClient.listServices = serviceStub
83+
.returns(intoCollection([[pausedService]]))
84+
mockApprunnerClient.paginateServices = serviceStub
8485
const opStub = sinon.stub().resolves({
8586
OperationSummaryList: [{ Id: 'test-id', Type: 'PAUSE_SERVICE' }],
8687
})

0 commit comments

Comments
 (0)