Skip to content

Commit aa58698

Browse files
authored
refactor(stepFunctions): use globalState abstraction aws#5323
1 parent e2a90ce commit aa58698

File tree

9 files changed

+39
-71
lines changed

9 files changed

+39
-71
lines changed

packages/core/src/shared/globalState.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ type samInitStateKey =
1515
| 'SAM_INIT_IMAGE_BOOLEAN_KEY'
1616
| 'SAM_INIT_ARCH_KEY'
1717

18+
type stepFunctionsKey = 'SCRIPT_LAST_DOWNLOADED_URL' | 'CSS_LAST_DOWNLOADED_URL'
19+
1820
type globalKey =
1921
| samInitStateKey
22+
| stepFunctionsKey
2023
| 'aws.downloadPath'
2124
| 'aws.lastTouchedS3Folder'
2225
| 'aws.lastUploadedToS3Folder'

packages/core/src/stepFunctions/activation.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export async function activate(
6262
*/
6363
export const previewStateMachineCommand = Commands.declare(
6464
'aws.previewStateMachine',
65-
(globalState: vscode.Memento, manager: AslVisualizationManager) => async (arg?: vscode.TextEditor | vscode.Uri) => {
65+
(manager: AslVisualizationManager) => async (arg?: vscode.TextEditor | vscode.Uri) => {
6666
try {
6767
arg ??= vscode.window.activeTextEditor
6868
const input = arg instanceof vscode.Uri ? arg : arg?.document
@@ -71,7 +71,7 @@ export const previewStateMachineCommand = Commands.declare(
7171
throw new ToolkitError('No active text editor or document found')
7272
}
7373

74-
return await manager.visualizeStateMachine(globalState, input)
74+
return await manager.visualizeStateMachine(input)
7575
} finally {
7676
// TODO: Consider making the metric reflect the success/failure of the above call
7777
telemetry.stepfunctions_previewstatemachine.emit()
@@ -88,8 +88,8 @@ async function registerStepFunctionCommands(
8888
const cdkVisualizationManager = new AslVisualizationCDKManager(extensionContext)
8989

9090
extensionContext.subscriptions.push(
91-
previewStateMachineCommand.register(extensionContext.globalState, visualizationManager),
92-
renderCdkStateMachineGraph.register(extensionContext.globalState, cdkVisualizationManager),
91+
previewStateMachineCommand.register(visualizationManager),
92+
renderCdkStateMachineGraph.register(cdkVisualizationManager),
9393
Commands.register('aws.stepfunctions.createStateMachineFromTemplate', async () => {
9494
try {
9595
await createStateMachineFromTemplate(extensionContext)

packages/core/src/stepFunctions/commands/visualizeStateMachine/abstractAslVisualizationManager.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ export abstract class AbstractAslVisualizationManager<T extends AslVisualization
1919

2020
public constructor(private readonly extensionContext: vscode.ExtensionContext) {}
2121

22-
public abstract visualizeStateMachine(
23-
globalState: vscode.Memento,
24-
uri: vscode.Uri
25-
): Promise<vscode.WebviewPanel | undefined>
22+
public abstract visualizeStateMachine(uri: vscode.Uri): Promise<vscode.WebviewPanel | undefined>
2623

2724
protected pushToExtensionContextSubscriptions(visualizationDisposable: vscode.Disposable): void {
2825
this.extensionContext.subscriptions.push(visualizationDisposable)
@@ -57,9 +54,9 @@ export abstract class AbstractAslVisualizationManager<T extends AslVisualization
5754
return this.managedVisualizations.get(key)
5855
}
5956

60-
protected async updateCache(globalState: vscode.Memento, logger: Logger): Promise<void> {
57+
protected async updateCache(logger: Logger): Promise<void> {
6158
try {
62-
await this.cache.updateCache(globalState)
59+
await this.cache.updateCache()
6360
} catch (err) {
6461
// So we can't update the cache, but can we use an existing on disk version.
6562
logger.warn('Updating State Machine Graph Visualisation assets failed, checking for fallback local cache.')

packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationCDKManager.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ export class AslVisualizationCDKManager extends AbstractAslVisualizationManager<
1616
super(extensionContext)
1717
}
1818

19-
public async visualizeStateMachine(
20-
globalState: vscode.Memento,
21-
uri: vscode.Uri
22-
): Promise<vscode.WebviewPanel | undefined> {
19+
public async visualizeStateMachine(uri: vscode.Uri): Promise<vscode.WebviewPanel | undefined> {
2320
const logger = getLogger()
2421
const existingVisualization = this.getExistingVisualization(this.getKey(uri))
2522

@@ -34,7 +31,7 @@ export class AslVisualizationCDKManager extends AbstractAslVisualizationManager<
3431
const templateUri = vscode.Uri.joinPath(cdkOutPath, `${appName}.template.json`)
3532

3633
try {
37-
await this.cache.updateCache(globalState)
34+
await this.cache.updateCache()
3835

3936
const textDocument = await vscode.workspace.openTextDocument(templateUri.with({ fragment: '' }))
4037
const newVisualization = new AslVisualizationCDK(textDocument, templateUri.fsPath, resourceName)

packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationManager.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export class AslVisualizationManager extends AbstractAslVisualizationManager {
1717
}
1818

1919
public async visualizeStateMachine(
20-
globalState: vscode.Memento,
2120
target: vscode.TextDocument | vscode.Uri
2221
): Promise<vscode.WebviewPanel | undefined> {
2322
const logger: Logger = getLogger()
@@ -33,7 +32,7 @@ export class AslVisualizationManager extends AbstractAslVisualizationManager {
3332

3433
// Existing visualization does not exist, construct new visualization
3534
try {
36-
await this.updateCache(globalState, logger)
35+
await this.updateCache(logger)
3736
const newVisualization = new AslVisualization(document)
3837
this.handleNewVisualization(document.uri.fsPath, newVisualization)
3938

packages/core/src/stepFunctions/commands/visualizeStateMachine/renderStateMachineGraphCDK.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ function isLocationResource(obj: unknown): obj is { location: vscode.Uri } {
2323
*/
2424
export const renderCdkStateMachineGraph = Commands.declare(
2525
'aws.cdk.renderStateMachineGraph',
26-
(memento: vscode.Memento, manager: AslVisualizationCDKManager) => async (input?: unknown) => {
26+
(manager: AslVisualizationCDKManager) => async (input?: unknown) => {
2727
const resource = isTreeNode(input) ? unboxTreeNode(input, isLocationResource) : undefined
2828
const resourceUri = resource?.location ?? (await new PreviewStateMachineCDKWizard().run())?.resource.location
2929

3030
if (!resourceUri) {
3131
return
3232
}
3333

34-
await manager.visualizeStateMachine(memento, resourceUri)
34+
await manager.visualizeStateMachine(resourceUri)
3535
}
3636
)

packages/core/src/stepFunctions/utils.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ const scriptsLastDownloadedUrl = 'SCRIPT_LAST_DOWNLOADED_URL'
3131
const cssLastDownloadedUrl = 'CSS_LAST_DOWNLOADED_URL'
3232

3333
export interface UpdateCachedScriptOptions {
34-
globalState: vscode.Memento
35-
lastDownloadedURLKey: string
34+
lastDownloadedURLKey: 'SCRIPT_LAST_DOWNLOADED_URL' | 'CSS_LAST_DOWNLOADED_URL'
3635
currentURL: string
3736
filePath: string
3837
}
@@ -73,9 +72,8 @@ export class StateMachineGraphCache {
7372
this.fileExists = fileExistsCustom ?? fileExists
7473
}
7574

76-
public async updateCache(globalState: vscode.Memento): Promise<void> {
75+
public async updateCache(): Promise<void> {
7776
const scriptUpdate = this.updateCachedFile({
78-
globalState: globalState,
7977
lastDownloadedURLKey: scriptsLastDownloadedUrl,
8078
currentURL: visualizationScriptUrl,
8179
filePath: this.jsFilePath,
@@ -87,7 +85,6 @@ export class StateMachineGraphCache {
8785
})
8886

8987
const cssUpdate = this.updateCachedFile({
90-
globalState: globalState,
9188
lastDownloadedURLKey: cssLastDownloadedUrl,
9289
currentURL: visualizationCssUrl,
9390
filePath: this.cssFilePath,
@@ -102,7 +99,7 @@ export class StateMachineGraphCache {
10299
}
103100

104101
public async updateCachedFile(options: UpdateCachedScriptOptions) {
105-
const downloadedUrl = options.globalState.get<string>(options.lastDownloadedURLKey)
102+
const downloadedUrl = globals.globalState.tryGet<string>(options.lastDownloadedURLKey, String)
106103
const cachedFileExists = await this.fileExists(options.filePath)
107104

108105
// if current url is different than url that was previously used to download the assets
@@ -113,7 +110,7 @@ export class StateMachineGraphCache {
113110
await this.writeToLocalStorage(options.filePath, response)
114111

115112
// save the url of the downloaded and cached assets
116-
void options.globalState.update(options.lastDownloadedURLKey, options.currentURL)
113+
await globals.globalState.update(options.lastDownloadedURLKey, options.currentURL)
117114
}
118115
}
119116

packages/core/src/test/stepFunctions/commands/visualizeStateMachine.test.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ describe('StepFunctions VisualizeStateMachine', async function () {
9090
const doc = await getDoc1()
9191
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 0)
9292

93-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc)
93+
await aslVisualizationManager.visualizeStateMachine(doc)
9494
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 1)
9595

9696
const managedVisualizations = aslVisualizationManager.getManagedVisualizations()
@@ -101,10 +101,10 @@ describe('StepFunctions VisualizeStateMachine', async function () {
101101
const doc = await getDoc1()
102102
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 0)
103103

104-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc)
104+
await aslVisualizationManager.visualizeStateMachine(doc)
105105
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 1)
106106

107-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc)
107+
await aslVisualizationManager.visualizeStateMachine(doc)
108108
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 1)
109109

110110
const managedVisualizations = aslVisualizationManager.getManagedVisualizations()
@@ -117,10 +117,10 @@ describe('StepFunctions VisualizeStateMachine', async function () {
117117

118118
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 0)
119119

120-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc1)
120+
await aslVisualizationManager.visualizeStateMachine(doc1)
121121
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 1)
122122

123-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc2)
123+
await aslVisualizationManager.visualizeStateMachine(doc2)
124124
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 2)
125125

126126
const managedVisualizations = aslVisualizationManager.getManagedVisualizations()
@@ -134,16 +134,16 @@ describe('StepFunctions VisualizeStateMachine', async function () {
134134

135135
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 0)
136136

137-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc1)
137+
await aslVisualizationManager.visualizeStateMachine(doc1)
138138
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 1)
139139

140-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc2)
140+
await aslVisualizationManager.visualizeStateMachine(doc2)
141141
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 2)
142142

143-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc1)
143+
await aslVisualizationManager.visualizeStateMachine(doc1)
144144
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 2)
145145

146-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc2)
146+
await aslVisualizationManager.visualizeStateMachine(doc2)
147147
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 2)
148148

149149
const managedVisualizations = aslVisualizationManager.getManagedVisualizations()
@@ -154,7 +154,7 @@ describe('StepFunctions VisualizeStateMachine', async function () {
154154
it('Test AslVisualizationManager managedVisualizations set removes visualization on visualization dispose, single vis', async function () {
155155
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 0)
156156

157-
let panel = await aslVisualizationManager.visualizeStateMachine(globals.globalState, await getDoc1())
157+
let panel = await aslVisualizationManager.visualizeStateMachine(await getDoc1())
158158
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 1)
159159

160160
// Dispose of visualization panel
@@ -171,10 +171,10 @@ describe('StepFunctions VisualizeStateMachine', async function () {
171171

172172
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 0)
173173

174-
let panel = await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc1)
174+
let panel = await aslVisualizationManager.visualizeStateMachine(doc1)
175175
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 1)
176176

177-
await aslVisualizationManager.visualizeStateMachine(globals.globalState, doc2)
177+
await aslVisualizationManager.visualizeStateMachine(doc2)
178178
assert.strictEqual(aslVisualizationManager.getManagedVisualizations().size, 2)
179179

180180
// Dispose of first visualization panel

packages/core/src/test/stepFunctions/utils.test.ts

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ import * as sinon from 'sinon'
1010
import * as vscode from 'vscode'
1111
import { makeTemporaryToolkitFolder } from '../../shared/filesystemUtilities'
1212
import { isDocumentValid, isStepFunctionsRole, StateMachineGraphCache } from '../../stepFunctions/utils'
13+
import globals from '../../shared/extensionGlobals'
1314

1415
const requestBody = 'request body string'
1516
const assetUrl = 'https://something'
1617
const filePath = '/some/path'
17-
const storageKey = 'KEY'
18+
const storageKey = 'SCRIPT_LAST_DOWNLOADED_URL'
1819
let tempFolder = ''
1920

2021
describe('StateMachineGraphCache', function () {
@@ -28,12 +29,6 @@ describe('StateMachineGraphCache', function () {
2829

2930
describe('updateCachedFile', function () {
3031
it('downloads a file when it is not in cache and stores it', async function () {
31-
const globalStorage = {
32-
keys: () => [],
33-
update: sinon.spy(),
34-
get: sinon.stub().returns(undefined),
35-
}
36-
3732
const getFileData = sinon.stub().resolves(requestBody)
3833
const fileExists = sinon.stub().onFirstCall().resolves(false).onSecondCall().resolves(true)
3934

@@ -49,23 +44,17 @@ describe('StateMachineGraphCache', function () {
4944
})
5045

5146
await cache.updateCachedFile({
52-
globalState: globalStorage,
5347
lastDownloadedURLKey: storageKey,
5448
currentURL: assetUrl,
5549
filePath: filePath,
5650
})
5751

58-
assert.ok(globalStorage.update.calledWith(storageKey, assetUrl))
52+
assert.deepStrictEqual(globals.globalState.get(storageKey), assetUrl)
5953
assert.ok(writeFile.calledWith(filePath, requestBody))
6054
})
6155

6256
it('downloads and stores a file when cached file exists but url has been updated', async function () {
63-
const globalStorage = {
64-
keys: () => [],
65-
update: sinon.spy(),
66-
get: sinon.stub().returns('https://old-url'),
67-
}
68-
57+
await globals.globalState.update(storageKey, 'https://old-url')
6958
const getFileData = sinon.stub().resolves(requestBody)
7059
const fileExists = sinon.stub().onFirstCall().resolves(true).onSecondCall().resolves(true)
7160

@@ -81,23 +70,17 @@ describe('StateMachineGraphCache', function () {
8170
})
8271

8372
await cache.updateCachedFile({
84-
globalState: globalStorage,
8573
lastDownloadedURLKey: storageKey,
8674
currentURL: assetUrl,
8775
filePath: filePath,
8876
})
8977

90-
assert.ok(globalStorage.update.calledWith(storageKey, assetUrl))
78+
assert.deepStrictEqual(globals.globalState.get(storageKey), assetUrl)
9179
assert.ok(writeFile.calledWith(filePath, requestBody))
9280
})
9381

9482
it('it does not store data when file exists and url for it is same', async function () {
95-
const globalStorage = {
96-
keys: () => [],
97-
update: sinon.spy(),
98-
get: sinon.stub().returns(assetUrl),
99-
}
100-
83+
await globals.globalState.update(storageKey, assetUrl)
10184
const getFileData = sinon.stub().resolves(requestBody)
10285
const fileExists = sinon.stub().onFirstCall().resolves(true).onSecondCall().resolves(true)
10386

@@ -113,13 +96,12 @@ describe('StateMachineGraphCache', function () {
11396
})
11497

11598
await cache.updateCachedFile({
116-
globalState: globalStorage,
11799
lastDownloadedURLKey: storageKey,
118100
currentURL: assetUrl,
119101
filePath: filePath,
120102
})
121103

122-
assert.ok(globalStorage.update.notCalled)
104+
assert.deepStrictEqual(globals.globalState.get(storageKey), assetUrl)
123105
assert.ok(writeFile.notCalled)
124106
})
125107
it('it passes if both files required exist', async function () {
@@ -160,12 +142,6 @@ describe('StateMachineGraphCache', function () {
160142
})
161143

162144
it('creates assets directory when it does not exist', async function () {
163-
const globalStorage = {
164-
keys: () => [],
165-
update: sinon.spy(),
166-
get: sinon.stub().returns(undefined),
167-
}
168-
169145
const getFileData = sinon.stub().resolves(requestBody)
170146
const fileExists = sinon.stub().onFirstCall().resolves(false).onSecondCall().resolves(false)
171147

@@ -185,13 +161,12 @@ describe('StateMachineGraphCache', function () {
185161
})
186162

187163
await cache.updateCachedFile({
188-
globalState: globalStorage,
189164
lastDownloadedURLKey: storageKey,
190165
currentURL: assetUrl,
191166
filePath: filePath,
192167
})
193168

194-
assert.ok(globalStorage.update.calledWith(storageKey, assetUrl))
169+
assert.deepStrictEqual(globals.globalState.get(storageKey), assetUrl)
195170
assert.ok(writeFile.calledWith(filePath, requestBody))
196171
assert.ok(makeDir.calledWith(dirPath))
197172
})

0 commit comments

Comments
 (0)