Skip to content

Commit 5552976

Browse files
committed
add tests for new refresh button
1 parent cc98301 commit 5552976

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

packages/core/src/shared/ui/common/regionSubmenu.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export class RegionSubmenu<T> extends Prompter<RegionSubmenuResponse<T>> {
5252
super()
5353
}
5454

55-
private refresh(prompter: QuickPickPrompter<T | typeof switchRegion>): void {
55+
public refresh(prompter: QuickPickPrompter<T | typeof switchRegion>): void {
5656
// This method cannot be async due to onClick() specifications. Thus we are forced to use .then, .catch as workaround.
5757
const activeBefore = prompter.quickPick.activeItems
5858
prompter

packages/core/src/test/shared/ui/prompters/regionSubmenu.test.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

66
import assert from 'assert'
7+
import * as sinon from 'sinon'
78
import { RegionSubmenu } from '../../../../shared/ui/common/regionSubmenu'
89
import { DataQuickPickItem, QuickPickPrompter } from '../../../../shared/ui/pickerPrompter'
910
import { createQuickPickPrompterTester } from '../../../shared/ui/testUtils'
@@ -12,7 +13,7 @@ describe('regionSubmenu', function () {
1213
let submenuPrompter: RegionSubmenu<string>
1314

1415
const region1Data = ['option1a', 'option2a', 'option3a']
15-
const region2Data = ['option1b', 'option2b', 'option3b']
16+
let region2Data = ['option1b', 'option2b', 'option3b']
1617

1718
before(async function () {
1819
const mockDataProvider = function (regionCode: string) {
@@ -64,4 +65,34 @@ describe('regionSubmenu', function () {
6465
data: 'option2b',
6566
})
6667
})
68+
69+
it('only has a refresh button', function () {
70+
const activeButtons = submenuPrompter.activePrompter!.quickPick.buttons
71+
assert.strictEqual(activeButtons.length, 1)
72+
})
73+
74+
it('refresh button calls refresh once onClick', function () {
75+
const refreshButton = submenuPrompter.activePrompter!.quickPick.buttons[0]
76+
const refreshStub = sinon.stub(RegionSubmenu.prototype, 'refresh')
77+
refreshButton.onClick!()
78+
sinon.assert.calledOnce(refreshStub)
79+
sinon.restore()
80+
})
81+
82+
it('refresh reloads items', async function () {
83+
const itemsBeforeLabels = submenuPrompter.activePrompter!.quickPick.items.map((i) => i.label)
84+
region2Data = ['option1c', 'option2c', 'option3c']
85+
86+
// Note that onDidChangeBusy event fires with busy=false when we load new items in.
87+
// Since regionSubmenu retroactively adds the default items, they won't be there yet.
88+
// So we don't check for them in test to avoid looking at implementation level details.
89+
submenuPrompter.activePrompter!.onDidChangeBusy((b: boolean) => {
90+
if (!b) {
91+
const itemsAfterLabels = submenuPrompter.activePrompter!.quickPick.items.map((i) => i.label)
92+
region2Data.forEach((item) => assert(itemsAfterLabels.includes(item)))
93+
assert.notStrictEqual(itemsBeforeLabels, itemsAfterLabels)
94+
}
95+
})
96+
submenuPrompter.refresh(submenuPrompter.activePrompter! as QuickPickPrompter<any>)
97+
})
6798
})

0 commit comments

Comments
 (0)