Skip to content

Commit 6ea5e27

Browse files
committed
refactor(core): use globalState abstraction
1 parent 9cdb8c4 commit 6ea5e27

File tree

8 files changed

+52
-79
lines changed

8 files changed

+52
-79
lines changed

packages/amazonq/test/unit/amazonq/onboardingPage/walkthrough.test.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@
55

66
import assert from 'assert'
77
import { showAmazonQWalkthroughOnce } from 'aws-core-vscode/amazonq'
8-
import { FakeMemento } from 'aws-core-vscode/test'
98
import sinon from 'sinon'
109

1110
describe('showAmazonQWalkthroughOnce', function () {
1211
it('only shows once', async function () {
13-
const state = new FakeMemento()
1412
const showWalkthroughStub = sinon.stub()
1513
assert.deepStrictEqual(showWalkthroughStub.callCount, 0)
16-
await showAmazonQWalkthroughOnce(state, showWalkthroughStub)
14+
await showAmazonQWalkthroughOnce(showWalkthroughStub)
1715
// Show walkthrough since our state indicates we haven't shown before
1816
assert.deepStrictEqual(showWalkthroughStub.callCount, 1)
1917

20-
await showAmazonQWalkthroughOnce(state, showWalkthroughStub)
18+
await showAmazonQWalkthroughOnce(showWalkthroughStub)
2119
// On the second call we do not show again since we've shown before.
2220
assert.deepStrictEqual(showWalkthroughStub.callCount, 1)
2321
})

packages/amazonq/test/unit/codewhisperer/commands/onAcceptance.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
AuthUtil,
1818
} from 'aws-core-vscode/codewhisperer'
1919
import { resetCodeWhispererGlobalVariables, createMockTextEditor } from 'aws-core-vscode/test'
20-
import { assertTelemetryCurried, FakeExtensionContext } from 'aws-core-vscode/test'
20+
import { assertTelemetryCurried } from 'aws-core-vscode/test'
2121
import { globals } from 'aws-core-vscode/shared'
2222
import { extensionVersion } from 'aws-core-vscode/shared'
2323

packages/amazonq/test/unit/codewhisperer/commands/onInlineAcceptance.test.ts

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import * as vscode from 'vscode'
88
import * as sinon from 'sinon'
99
import { resetCodeWhispererGlobalVariables, createMockTextEditor } from 'aws-core-vscode/test'
1010
import { assertTelemetryCurried } from 'aws-core-vscode/test'
11-
import { FakeMemento } from 'aws-core-vscode/test'
1211
import {
1312
onInlineAcceptance,
1413
RecommendationHandler,
@@ -36,23 +35,19 @@ describe('onInlineAcceptance', function () {
3635
it('Should dispose inline completion provider', async function () {
3736
const mockEditor = createMockTextEditor()
3837
const spy = sinon.spy(RecommendationHandler.instance, 'disposeInlineCompletion')
39-
const globalState = new FakeMemento()
40-
await onInlineAcceptance(
41-
{
42-
editor: mockEditor,
43-
range: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
44-
effectiveRange: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
45-
acceptIndex: 0,
46-
recommendation: "print('Hello World!')",
47-
requestId: '',
48-
sessionId: '',
49-
triggerType: 'OnDemand',
50-
completionType: 'Line',
51-
language: 'python',
52-
references: undefined,
53-
},
54-
globalState
55-
)
38+
await onInlineAcceptance({
39+
editor: mockEditor,
40+
range: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
41+
effectiveRange: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
42+
acceptIndex: 0,
43+
recommendation: "print('Hello World!')",
44+
requestId: '',
45+
sessionId: '',
46+
triggerType: 'OnDemand',
47+
completionType: 'Line',
48+
language: 'python',
49+
references: undefined,
50+
})
5651
assert.ok(spy.calledWith())
5752
})
5853

@@ -76,23 +71,19 @@ describe('onInlineAcceptance', function () {
7671
session.triggerType = 'OnDemand'
7772
session.setCompletionType(0, session.recommendations[0])
7873
const assertTelemetry = assertTelemetryCurried('codewhisperer_userDecision')
79-
const globalState = new FakeMemento()
80-
await onInlineAcceptance(
81-
{
82-
editor: mockEditor,
83-
range: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
84-
effectiveRange: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
85-
acceptIndex: 0,
86-
recommendation: "print('Hello World!')",
87-
requestId: '',
88-
sessionId: '',
89-
triggerType: 'OnDemand',
90-
completionType: 'Line',
91-
language: 'python',
92-
references: undefined,
93-
},
94-
globalState
95-
)
74+
await onInlineAcceptance({
75+
editor: mockEditor,
76+
range: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
77+
effectiveRange: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
78+
acceptIndex: 0,
79+
recommendation: "print('Hello World!')",
80+
requestId: '',
81+
sessionId: '',
82+
triggerType: 'OnDemand',
83+
completionType: 'Line',
84+
language: 'python',
85+
references: undefined,
86+
})
9687
assertTelemetry({
9788
codewhispererRequestId: 'test',
9889
codewhispererSessionId: 'test',

packages/amazonq/test/unit/codewhisperer/service/recommendationHandler.test.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import {
2222
import {
2323
assertTelemetryCurried,
2424
stub,
25-
FakeMemento,
2625
createMockTextEditor,
2726
resetCodeWhispererGlobalVariables,
2827
} from 'aws-core-vscode/test'
@@ -41,7 +40,6 @@ describe('recommendationHandler', function () {
4140
})
4241

4342
describe('getRecommendations', async function () {
44-
const fakeMemeto = new FakeMemento()
4543
const mockClient = stub(DefaultCodeWhispererClient)
4644
const mockEditor = createMockTextEditor()
4745
const testStartUrl = 'testStartUrl'
@@ -63,8 +61,7 @@ describe('recommendationHandler', function () {
6361
it('should assign correct recommendations given input', async function () {
6462
assert.strictEqual(CodeWhispererCodeCoverageTracker.instances.size, 0)
6563
assert.strictEqual(
66-
CodeWhispererCodeCoverageTracker.getTracker(mockEditor.document.languageId, fakeMemeto)
67-
?.serviceInvocationCount,
64+
CodeWhispererCodeCoverageTracker.getTracker(mockEditor.document.languageId)?.serviceInvocationCount,
6865
0
6966
)
7067

@@ -86,8 +83,7 @@ describe('recommendationHandler', function () {
8683
const expected: RecommendationsList = [{ content: "print('Hello World!')" }, { content: '' }]
8784
assert.deepStrictEqual(actual, expected)
8885
assert.strictEqual(
89-
CodeWhispererCodeCoverageTracker.getTracker(mockEditor.document.languageId, fakeMemeto)
90-
?.serviceInvocationCount,
86+
CodeWhispererCodeCoverageTracker.getTracker(mockEditor.document.languageId)?.serviceInvocationCount,
9187
1
9288
)
9389
})

packages/amazonq/test/unit/codewhisperer/tracker/codewhispererCodeCoverageTracker.test.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
} from 'aws-core-vscode/codewhisperer'
1717
import { createMockDocument, createMockTextEditor, resetCodeWhispererGlobalVariables } from 'aws-core-vscode/test'
1818
import { globals, extensionVersion } from 'aws-core-vscode/shared'
19-
import { assertTelemetryCurried, FakeMemento } from 'aws-core-vscode/test'
19+
import { assertTelemetryCurried } from 'aws-core-vscode/test'
2020

2121
describe('codewhispererCodecoverageTracker', function () {
2222
const language = 'python'
@@ -64,7 +64,6 @@ describe('codewhispererCodecoverageTracker', function () {
6464
})
6565

6666
describe('test isActive', function () {
67-
const fakeMemeto = new FakeMemento()
6867
let tracker: CodeWhispererCodeCoverageTracker | undefined
6968

7069
afterEach(async function () {
@@ -77,7 +76,7 @@ describe('codewhispererCodecoverageTracker', function () {
7776
sinon.stub(TelemetryHelper.instance, 'isTelemetryEnabled').returns(true)
7877
sinon.stub(AuthUtil.instance, 'isConnected').returns(false)
7978

80-
tracker = CodeWhispererCodeCoverageTracker.getTracker('python', fakeMemeto)
79+
tracker = CodeWhispererCodeCoverageTracker.getTracker('python')
8180
if (!tracker) {
8281
assert.fail()
8382
}
@@ -89,7 +88,7 @@ describe('codewhispererCodecoverageTracker', function () {
8988
sinon.stub(TelemetryHelper.instance, 'isTelemetryEnabled').returns(false)
9089
sinon.stub(AuthUtil.instance, 'isConnected').returns(false)
9190

92-
tracker = CodeWhispererCodeCoverageTracker.getTracker('java', fakeMemeto)
91+
tracker = CodeWhispererCodeCoverageTracker.getTracker('java')
9392
if (!tracker) {
9493
assert.fail()
9594
}
@@ -101,7 +100,7 @@ describe('codewhispererCodecoverageTracker', function () {
101100
sinon.stub(TelemetryHelper.instance, 'isTelemetryEnabled').returns(true)
102101
sinon.stub(AuthUtil.instance, 'isConnected').returns(true)
103102

104-
tracker = CodeWhispererCodeCoverageTracker.getTracker('javascript', fakeMemeto)
103+
tracker = CodeWhispererCodeCoverageTracker.getTracker('javascript')
105104
if (!tracker) {
106105
assert.fail()
107106
}

packages/core/src/shared/extensionUtilities.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ export function commandsPrefix(): string {
4646
return isAmazonQ() ? 'Amazon Q' : getIdeProperties().company
4747
}
4848

49-
export const mostRecentVersionKey: string = 'globalsMostRecentVersion'
50-
5149
export enum IDE {
5250
vscode,
5351
cloud9,
@@ -172,8 +170,8 @@ export function isCn(): boolean {
172170
* @param context VS Code Extension Context
173171
* @param currVersion Current version to compare stored most recent version against (useful for tests)
174172
*/
175-
export function isDifferentVersion(context: vscode.ExtensionContext, currVersion: string = extensionVersion): boolean {
176-
const mostRecentVersion = context.globalState.get<string>(mostRecentVersionKey)
173+
export function isDifferentVersion(currVersion: string = extensionVersion): boolean {
174+
const mostRecentVersion = globals.globalState.tryGet('globalsMostRecentVersion', String)
177175
if (mostRecentVersion && mostRecentVersion === currVersion) {
178176
return false
179177
}
@@ -187,8 +185,8 @@ export function isDifferentVersion(context: vscode.ExtensionContext, currVersion
187185
*
188186
* @param context VS Code Extension Context
189187
*/
190-
export function setMostRecentVersion(context: vscode.ExtensionContext): void {
191-
context.globalState.update(mostRecentVersionKey, extensionVersion).then(undefined, (e) => {
188+
export function setMostRecentVersion(): void {
189+
globals.globalState.update('globalsMostRecentVersion', extensionVersion).then(undefined, (e) => {
192190
getLogger().error('globalState.update() failed: %s', (e as Error).message)
193191
})
194192
}
@@ -240,8 +238,8 @@ export function showWelcomeMessage(context: vscode.ExtensionContext): void {
240238
return
241239
}
242240
try {
243-
if (isDifferentVersion(context)) {
244-
setMostRecentVersion(context)
241+
if (isDifferentVersion()) {
242+
setMostRecentVersion()
245243
if (!isCloud9()) {
246244
void promptQuickstart()
247245
}

packages/core/src/shared/globalState.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ type globalKey =
4242
| 'CODEWHISPERER_PERSISTED_CUSTOMIZATIONS'
4343
| 'CODEWHISPERER_SELECTED_CUSTOMIZATION'
4444
| 'CODEWHISPERER_USER_GROUP'
45+
| 'globalsMostRecentVersion'
4546
| 'gumby.wasQCodeTransformationUsed'
4647
| 'isExtensionFirstUse'
4748
| 'lastExtensionVersion'

packages/core/src/test/shared/extensionUtilities.test.ts

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,7 @@ import * as path from 'path'
1111
import * as sinon from 'sinon'
1212
import { DefaultEc2MetadataClient } from '../../shared/clients/ec2MetadataClient'
1313
import * as vscode from 'vscode'
14-
import {
15-
UserActivity,
16-
getComputeRegion,
17-
initializeComputeRegion,
18-
mostRecentVersionKey,
19-
} from '../../shared/extensionUtilities'
14+
import { UserActivity, getComputeRegion, initializeComputeRegion } from '../../shared/extensionUtilities'
2015
import { isDifferentVersion, setMostRecentVersion } from '../../shared/extensionUtilities'
2116
import * as filesystemUtilities from '../../shared/filesystemUtilities'
2217
import { FakeExtensionContext } from '../fakeExtensionContext'
@@ -28,10 +23,11 @@ import { createQuickStartWebview } from '../../shared/extensionStartup'
2823

2924
describe('extensionUtilities', function () {
3025
describe('createQuickStartWebview', async function () {
31-
const context = await FakeExtensionContext.create()
26+
let context: FakeExtensionContext
3227
let tempDir: string | undefined
3328

3429
beforeEach(async function () {
30+
context = await FakeExtensionContext.create()
3531
tempDir = await filesystemUtilities.makeTemporaryToolkitFolder()
3632
context.extensionPath = tempDir
3733
})
@@ -76,34 +72,28 @@ describe('extensionUtilities', function () {
7672
describe('isDifferentVersion', function () {
7773
it('returns false if the version exists and matches the existing version exactly', async function () {
7874
const goodVersion = '1.2.3'
79-
const extContext = await FakeExtensionContext.create()
80-
await extContext.globalState.update(mostRecentVersionKey, goodVersion)
75+
await globals.globalState.update('globalsMostRecentVersion', goodVersion)
8176

82-
assert.strictEqual(isDifferentVersion(extContext, goodVersion), false)
77+
assert.strictEqual(isDifferentVersion(goodVersion), false)
8378
})
8479

8580
it("returns true if a most recent version isn't set", async () => {
86-
const extContext = await FakeExtensionContext.create()
87-
88-
assert.ok(isDifferentVersion(extContext))
81+
assert.ok(isDifferentVersion())
8982
})
9083

9184
it("returns true if a most recent version doesn't match the current version", async () => {
9285
const oldVersion = '1.2.3'
9386
const newVersion = '4.5.6'
94-
const extContext = await FakeExtensionContext.create()
95-
await extContext.globalState.update(mostRecentVersionKey, oldVersion)
87+
await globals.globalState.update('globalsMostRecentVersion', oldVersion)
9688

97-
assert.ok(isDifferentVersion(extContext, newVersion))
89+
assert.ok(isDifferentVersion(newVersion))
9890
})
9991
})
10092

10193
describe('setMostRecentVersion', function () {
10294
it('sets the most recent version', async function () {
103-
const extContext = await FakeExtensionContext.create()
104-
setMostRecentVersion(extContext)
105-
106-
assert.strictEqual(extContext.globalState.get<string>(mostRecentVersionKey), extensionVersion)
95+
setMostRecentVersion()
96+
assert.strictEqual(globals.globalState.get('globalsMostRecentVersion'), extensionVersion)
10797
})
10898
})
10999
})

0 commit comments

Comments
 (0)