Skip to content

Commit 58f1cf9

Browse files
committed
Refactor sessionState tests
1 parent 34b539e commit 58f1cf9

File tree

3 files changed

+70
-44
lines changed

3 files changed

+70
-44
lines changed

packages/core/src/test/amazonq/session/testSetup.ts

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import sinon from 'sinon'
77
import { createBasicTestConfig, createMockSessionStateConfig, TestSessionMocks } from '../utils'
8+
import { SessionStateConfig } from '../../../amazonq'
89

910
export function createSessionTestSetup() {
1011
const conversationId = 'conversation-id'
@@ -20,7 +21,7 @@ export function createSessionTestSetup() {
2021
}
2122
}
2223

23-
export async function beforeEachFunc(
24+
export async function createTestConfig(
2425
testMocks: TestSessionMocks,
2526
conversationId: string,
2627
uploadId: string,
@@ -33,3 +34,41 @@ export async function beforeEachFunc(
3334
const testConfig = createMockSessionStateConfig(basicConfig, testMocks)
3435
return testConfig
3536
}
37+
38+
export interface TestContext {
39+
conversationId: string
40+
uploadId: string
41+
tabId: string
42+
currentCodeGenerationId: string
43+
testConfig: SessionStateConfig
44+
testMocks: Record<string, any>
45+
}
46+
47+
export function createTestContext(): TestContext {
48+
const { conversationId, uploadId, tabId, currentCodeGenerationId } = createSessionTestSetup()
49+
50+
return {
51+
conversationId,
52+
uploadId,
53+
tabId,
54+
currentCodeGenerationId,
55+
testConfig: {} as SessionStateConfig,
56+
testMocks: {},
57+
}
58+
}
59+
60+
export function setupTestHooks(context: TestContext) {
61+
beforeEach(async () => {
62+
context.testMocks = {}
63+
context.testConfig = await createTestConfig(
64+
context.testMocks,
65+
context.conversationId,
66+
context.uploadId,
67+
context.currentCodeGenerationId
68+
)
69+
})
70+
71+
afterEach(() => {
72+
sinon.restore()
73+
})
74+
}

packages/core/src/test/amazonqDoc/session/sessionState.test.ts

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,23 @@
66
import * as vscode from 'vscode'
77
import assert from 'assert'
88
import sinon from 'sinon'
9-
import { DocPrepareCodeGenState, SessionStateConfig } from '../../../amazonqDoc'
9+
import { DocPrepareCodeGenState } from '../../../amazonqDoc'
1010
import { createMockSessionStateAction } from '../../amazonq/utils'
1111

12-
import { TestSessionMocks } from '../../amazonq/utils'
13-
import { beforeEachFunc, createSessionTestSetup } from '../../amazonq/session/testSetup'
14-
15-
let testMocks: TestSessionMocks
12+
import { createTestContext, setupTestHooks } from '../../amazonq/session/testSetup'
1613

1714
describe('sessionStateDoc', () => {
18-
const { conversationId, uploadId, tabId, currentCodeGenerationId } = createSessionTestSetup()
19-
let testConfig: SessionStateConfig
20-
21-
beforeEach(async () => {
22-
testMocks = {}
23-
testConfig = await beforeEachFunc(testMocks, conversationId, uploadId, currentCodeGenerationId)
24-
})
25-
26-
afterEach(() => {
27-
sinon.restore()
28-
})
15+
const context = createTestContext()
16+
setupTestHooks(context)
2917

3018
describe('DocPrepareCodeGenState', () => {
3119
it('error when failing to prepare repo information', async () => {
3220
sinon.stub(vscode.workspace, 'findFiles').throws()
33-
testMocks.createUploadUrl!.resolves({ uploadId: '', uploadUrl: '' })
21+
context.testMocks.createUploadUrl!.resolves({ uploadId: '', uploadUrl: '' })
3422
const testAction = createMockSessionStateAction()
3523

3624
await assert.rejects(() => {
37-
return new DocPrepareCodeGenState(testConfig, [], [], [], tabId, 0).interact(testAction)
25+
return new DocPrepareCodeGenState(context.testConfig, [], [], [], context.tabId, 0).interact(testAction)
3826
})
3927
})
4028
})

packages/core/src/test/amazonqFeatureDev/session/sessionState.test.ts

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,21 @@ import {
1111
FeatureDevPrepareCodeGenState,
1212
FeatureDevCodeGenState,
1313
} from '../../../amazonqFeatureDev/session/sessionState'
14-
import { SessionStateConfig } from '../../../amazonq/commons/types'
1514
import { ToolkitError } from '../../../shared/errors'
1615
import * as crypto from '../../../shared/crypto'
1716
import { createMockSessionStateAction } from '../../amazonq/utils'
1817

19-
import { TestSessionMocks } from '../../amazonq/utils'
20-
import { beforeEachFunc, createSessionTestSetup } from '../../amazonq/session/testSetup'
21-
22-
let testMocks: TestSessionMocks
18+
import { createTestContext, setupTestHooks } from '../../amazonq/session/testSetup'
2319

2420
describe('sessionStateFeatureDev', () => {
25-
const { conversationId, uploadId, tabId, currentCodeGenerationId } = createSessionTestSetup()
26-
let testConfig: SessionStateConfig
27-
28-
beforeEach(async () => {
29-
testMocks = {}
30-
testConfig = await beforeEachFunc(testMocks, conversationId, uploadId, currentCodeGenerationId)
31-
})
32-
33-
afterEach(() => {
34-
sinon.restore()
35-
})
21+
const context = createTestContext()
22+
setupTestHooks(context)
3623

3724
describe('MockCodeGenState', () => {
3825
it('loops forever in the same state', async () => {
3926
sinon.stub(crypto, 'randomUUID').returns('upload-id' as ReturnType<(typeof crypto)['randomUUID']>)
4027
const testAction = createMockSessionStateAction()
41-
const state = new MockCodeGenState(testConfig, tabId)
28+
const state = new MockCodeGenState(context.testConfig, context.tabId)
4229
const result = await state.interact(testAction)
4330

4431
assert.deepStrictEqual(result, {
@@ -51,40 +38,52 @@ describe('sessionStateFeatureDev', () => {
5138
describe('FeatureDevPrepareCodeGenState', () => {
5239
it('error when failing to prepare repo information', async () => {
5340
sinon.stub(vscode.workspace, 'findFiles').throws()
54-
testMocks.createUploadUrl!.resolves({ uploadId: '', uploadUrl: '' })
41+
context.testMocks.createUploadUrl!.resolves({ uploadId: '', uploadUrl: '' })
5542
const testAction = createMockSessionStateAction()
5643

5744
await assert.rejects(() => {
58-
return new FeatureDevPrepareCodeGenState(testConfig, [], [], [], tabId, 0).interact(testAction)
45+
return new FeatureDevPrepareCodeGenState(context.testConfig, [], [], [], context.tabId, 0).interact(
46+
testAction
47+
)
5948
})
6049
})
6150
})
6251

6352
describe('FeatureDevCodeGenState', () => {
6453
it('transitions to FeatureDevPrepareCodeGenState when codeGenerationStatus ready ', async () => {
65-
testMocks.getCodeGeneration!.resolves({
54+
context.testMocks.getCodeGeneration!.resolves({
6655
codeGenerationStatus: { status: 'Complete' },
6756
codeGenerationRemainingIterationCount: 2,
6857
codeGenerationTotalIterationCount: 3,
6958
})
7059

71-
testMocks.exportResultArchive!.resolves({ newFileContents: [], deletedFiles: [], references: [] })
60+
context.testMocks.exportResultArchive!.resolves({ newFileContents: [], deletedFiles: [], references: [] })
7261

7362
const testAction = createMockSessionStateAction()
74-
const state = new FeatureDevCodeGenState(testConfig, [], [], [], tabId, 0, {}, 2, 3)
63+
const state = new FeatureDevCodeGenState(context.testConfig, [], [], [], context.tabId, 0, {}, 2, 3)
7564
const result = await state.interact(testAction)
7665

77-
const nextState = new FeatureDevPrepareCodeGenState(testConfig, [], [], [], tabId, 1, 2, 3, undefined)
66+
const nextState = new FeatureDevPrepareCodeGenState(
67+
context.testConfig,
68+
[],
69+
[],
70+
[],
71+
context.tabId,
72+
1,
73+
2,
74+
3,
75+
undefined
76+
)
7877

7978
assert.deepStrictEqual(result.nextState?.deletedFiles, nextState.deletedFiles)
8079
assert.deepStrictEqual(result.nextState?.filePaths, result.nextState?.filePaths)
8180
assert.deepStrictEqual(result.nextState?.references, result.nextState?.references)
8281
})
8382

8483
it('fails when codeGenerationStatus failed ', async () => {
85-
testMocks.getCodeGeneration!.rejects(new ToolkitError('Code generation failed'))
84+
context.testMocks.getCodeGeneration!.rejects(new ToolkitError('Code generation failed'))
8685
const testAction = createMockSessionStateAction()
87-
const state = new FeatureDevCodeGenState(testConfig, [], [], [], tabId, 0, {})
86+
const state = new FeatureDevCodeGenState(context.testConfig, [], [], [], context.tabId, 0, {})
8887
try {
8988
await state.interact(testAction)
9089
assert.fail('failed code generations should throw an error')

0 commit comments

Comments
 (0)