Skip to content

Commit ac76171

Browse files
authored
test: update /dev prepareRepoData unit test to include devfile filtering (#5980)
## Problem Follow up PR from #5853 ## Solution Added more unit test coverage
1 parent fbeb3a1 commit ac76171

File tree

1 file changed

+62
-33
lines changed

1 file changed

+62
-33
lines changed

packages/amazonq/test/unit/amazonqFeatureDev/util/files.test.ts

Lines changed: 62 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -10,55 +10,84 @@ import {
1010
ContentLengthError,
1111
maxRepoSizeBytes,
1212
} from 'aws-core-vscode/amazonqFeatureDev'
13-
import { assertTelemetry, createTestWorkspace } from 'aws-core-vscode/test'
13+
import { assertTelemetry, getWorkspaceFolder, TestFolder } from 'aws-core-vscode/test'
1414
import { fs, AmazonqCreateUpload } from 'aws-core-vscode/shared'
15-
import { Span } from 'aws-core-vscode/telemetry'
15+
import { MetricName, Span } from 'aws-core-vscode/telemetry'
1616
import sinon from 'sinon'
17+
import { CodeWhispererSettings } from 'aws-core-vscode/codewhisperer'
18+
19+
const testDevfilePrepareRepo = async (expectedRepoSize: number, devfileEnabled: boolean) => {
20+
const folder = await TestFolder.create()
21+
await folder.write('devfile.yaml', 'test')
22+
await folder.write('file.md', 'test content')
23+
const workspace = getWorkspaceFolder(folder.path)
24+
sinon
25+
.stub(CodeWhispererSettings.instance, 'getDevCommandWorkspaceConfigurations')
26+
.returns(devfileEnabled ? { [workspace.uri.fsPath]: true } : {})
27+
28+
await testPrepareRepoData(workspace, expectedRepoSize)
29+
}
30+
31+
const testPrepareRepoData = async (
32+
workspace: vscode.WorkspaceFolder,
33+
expectedRepoSize: number,
34+
expectedTelemetryMetrics?: Array<{ metricName: MetricName; value: any }>
35+
) => {
36+
const telemetry = new TelemetryHelper()
37+
const result = await prepareRepoData([workspace.uri.fsPath], [workspace], telemetry, {
38+
record: () => {},
39+
} as unknown as Span<AmazonqCreateUpload>)
40+
41+
assert.strictEqual(Buffer.isBuffer(result.zipFileBuffer), true)
42+
// checksum is not the same across different test executions because some unique random folder names are generated
43+
assert.strictEqual(result.zipFileChecksum.length, 44)
44+
assert.strictEqual(telemetry.repositorySize, expectedRepoSize)
45+
46+
if (expectedTelemetryMetrics) {
47+
expectedTelemetryMetrics.forEach((metric) => {
48+
assertTelemetry(metric.metricName, metric.value)
49+
})
50+
}
51+
}
1752

1853
describe('file utils', () => {
1954
describe('prepareRepoData', function () {
20-
it('returns files in the workspace as a zip', async function () {
21-
// these variables are a manual selection of settings for the test in order to test the collectFiles function
22-
const fileAmount = 2
23-
const fileNamePrefix = 'file'
24-
const fileNameSuffix = '.md'
25-
const fileContent = 'test content'
55+
afterEach(() => {
56+
sinon.restore()
57+
})
2658

27-
const workspace = await createTestWorkspace(fileAmount, { fileNamePrefix, fileContent, fileNameSuffix })
59+
it('returns files in the workspace as a zip', async function () {
60+
const folder = await TestFolder.create()
61+
await folder.write('file1.md', 'test content')
62+
await folder.write('file2.md', 'test content')
63+
const workspace = getWorkspaceFolder(folder.path)
2864

29-
const telemetry = new TelemetryHelper()
30-
const result = await prepareRepoData([workspace.uri.fsPath], [workspace], telemetry, {
31-
record: () => {},
32-
} as unknown as Span<AmazonqCreateUpload>)
33-
assert.strictEqual(Buffer.isBuffer(result.zipFileBuffer), true)
34-
// checksum is not the same across different test executions because some unique random folder names are generated
35-
assert.strictEqual(result.zipFileChecksum.length, 44)
36-
assert.strictEqual(telemetry.repositorySize, 24)
65+
await testPrepareRepoData(workspace, 24)
3766
})
3867

3968
it('prepareRepoData ignores denied file extensions', async function () {
40-
// these variables are a manual selection of settings for the test in order to test the collectFiles function
41-
const fileAmount = 1
42-
const fileNamePrefix = 'file'
43-
const fileNameSuffix = '.mp4'
44-
const fileContent = 'test content'
69+
const folder = await TestFolder.create()
70+
await folder.write('file.mp4', 'test content')
71+
const workspace = getWorkspaceFolder(folder.path)
4572

46-
const workspace = await createTestWorkspace(fileAmount, { fileNamePrefix, fileContent, fileNameSuffix })
47-
const telemetry = new TelemetryHelper()
48-
const result = await prepareRepoData([workspace.uri.fsPath], [workspace], telemetry, {
49-
record: () => {},
50-
} as unknown as Span<AmazonqCreateUpload>)
73+
await testPrepareRepoData(workspace, 0, [
74+
{ metricName: 'amazonq_bundleExtensionIgnored', value: { filenameExt: 'mp4', count: 1 } },
75+
])
76+
})
77+
78+
it('should ignore devfile.yaml when setting is disabled', async function () {
79+
await testDevfilePrepareRepo(12, false)
80+
})
5181

52-
assert.strictEqual(Buffer.isBuffer(result.zipFileBuffer), true)
53-
// checksum is not the same across different test executions because some unique random folder names are generated
54-
assert.strictEqual(result.zipFileChecksum.length, 44)
55-
assert.strictEqual(telemetry.repositorySize, 0)
56-
assertTelemetry('amazonq_bundleExtensionIgnored', { filenameExt: 'mp4', count: 1 })
82+
it('should include devfile.yaml when setting is enabled', async function () {
83+
await testDevfilePrepareRepo(16, true)
5784
})
5885

5986
// Test the logic that allows the customer to modify root source folder
6087
it('prepareRepoData throws a ContentLengthError code when repo is too big', async function () {
61-
const workspace = await createTestWorkspace(1, {})
88+
const folder = await TestFolder.create()
89+
await folder.write('file.md', 'test content')
90+
const workspace = getWorkspaceFolder(folder.path)
6291
const telemetry = new TelemetryHelper()
6392

6493
sinon.stub(fs, 'stat').resolves({ size: 2 * maxRepoSizeBytes } as vscode.FileStat)

0 commit comments

Comments
 (0)