Skip to content

Commit eae1d57

Browse files
authored
Improve tests (#355)
1 parent e2cbf60 commit eae1d57

14 files changed

+212
-751
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
strategy:
1313
fail-fast: true
1414
matrix:
15-
os: [ ubuntu-latest, macos-latest ]
15+
os: [ ubuntu-latest, macos-latest, windows-latest ]
1616
with:
1717
ref: ${{ github.sha }}
1818
runs-on: ${{ matrix.os }}

tst/app/standalone.test.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.

tst/unit/autocomplete/ResourceEntityCompletionProvider.test.ts

Lines changed: 19 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ import { CompletionParams, CompletionItemKind, CompletionItem, InsertTextFormat
33
import { ResourceEntityCompletionProvider } from '../../../src/autocomplete/ResourceEntityCompletionProvider';
44
import { ResourceAttribute } from '../../../src/context/ContextType';
55
import { YamlNodeTypes } from '../../../src/context/syntaxtree/utils/TreeSitterTypes';
6-
import { CombinedSchemas } from '../../../src/schema/CombinedSchemas';
76
import { ResourceSchema } from '../../../src/schema/ResourceSchema';
87
import { ExtensionName } from '../../../src/utils/ExtensionConfig';
98
import { createForEachResourceContext, createResourceContext } from '../../utils/MockContext';
109
import { createMockComponents } from '../../utils/MockServerComponents';
11-
import { combinedSchemas } from '../../utils/SchemaUtils';
10+
import { combinedSchemas, createSchemaFrom, Schemas } from '../../utils/SchemaUtils';
1211

1312
describe('ResourceEntityCompletionProvider', () => {
1413
const mockComponents = createMockComponents();
@@ -22,6 +21,18 @@ describe('ResourceEntityCompletionProvider', () => {
2221
position: { line: 0, character: 0 },
2322
};
2423

24+
// Create schemas once at describe level
25+
const ec2Schema = new ResourceSchema(Schemas.EC2Instance.contents);
26+
const ec2WithRequiredProps = createSchemaFrom(ec2Schema, 'AWS::EC2::Instance', {
27+
required: ['InstanceType', 'ImageId'],
28+
});
29+
const ec2WithNoRequiredProps = createSchemaFrom(ec2Schema, 'AWS::EC2::Instance', {
30+
required: [],
31+
});
32+
const schemasWithRequired = combinedSchemas([ec2WithRequiredProps]);
33+
const schemasWithNoRequired = combinedSchemas([ec2WithNoRequiredProps]);
34+
const emptySchemas = combinedSchemas([]);
35+
2536
beforeEach(() => {
2637
mockComponents.schemaRetriever.getDefault.reset();
2738
});
@@ -123,30 +134,6 @@ describe('ResourceEntityCompletionProvider', () => {
123134
expect(deletionPolicyItem!.insertText).toBe('DeletionPolicy');
124135
});
125136

126-
// Create a mock schema with required properties for testing
127-
const setupSchemaWithRequiredProps = (requiredProps: string[] = []) => {
128-
const mockSchema = {
129-
typeName: 'AWS::EC2::Instance',
130-
propertyKeys: new Set(['InstanceType', 'ImageId', 'KeyName', 'SecurityGroups']),
131-
required: requiredProps,
132-
isReadOnly: () => false,
133-
isRequired: (prop: string) => requiredProps.includes(prop),
134-
getByPath: () => ({ type: 'string' }),
135-
resolveRef: () => ({ type: 'string' }),
136-
} as unknown as ResourceSchema;
137-
138-
const mockSchemas = new Map<string, ResourceSchema>();
139-
mockSchemas.set('AWS::EC2::Instance', mockSchema);
140-
141-
const combinedSchemas = new CombinedSchemas();
142-
Object.defineProperty(combinedSchemas, 'schemas', {
143-
get: () => mockSchemas,
144-
});
145-
146-
mockComponents.schemaRetriever.getDefault.returns(combinedSchemas);
147-
return { mockSchema, combinedSchemas };
148-
};
149-
150137
test('should enhance Properties completion with snippet when resource type is available', () => {
151138
// Setup context with a resource that has a Type
152139
const mockContext = createResourceContext('MyInstance', {
@@ -158,7 +145,7 @@ describe('ResourceEntityCompletionProvider', () => {
158145
});
159146

160147
// Setup schema with required properties
161-
setupSchemaWithRequiredProps(['InstanceType', 'ImageId']);
148+
mockComponents.schemaRetriever.getDefault.returns(schemasWithRequired);
162149

163150
// Get completions
164151
const result = provider.getCompletions(mockContext, mockParams);
@@ -187,7 +174,7 @@ describe('ResourceEntityCompletionProvider', () => {
187174
});
188175

189176
// Setup schema with required properties
190-
setupSchemaWithRequiredProps(['InstanceType', 'ImageId']);
177+
mockComponents.schemaRetriever.getDefault.returns(schemasWithRequired);
191178

192179
// Get completions
193180
const result = provider.getCompletions(mockContext, mockParams);
@@ -214,7 +201,7 @@ describe('ResourceEntityCompletionProvider', () => {
214201
});
215202

216203
// Setup schema with no required properties
217-
setupSchemaWithRequiredProps([]);
204+
mockComponents.schemaRetriever.getDefault.returns(schemasWithNoRequired);
218205

219206
// Get completions
220207
const result = provider.getCompletions(mockContext, mockParams);
@@ -259,8 +246,7 @@ describe('ResourceEntityCompletionProvider', () => {
259246
});
260247

261248
// Setup empty schemas
262-
const testSchemas = combinedSchemas([]);
263-
mockComponents.schemaRetriever.getDefault.returns(testSchemas);
249+
mockComponents.schemaRetriever.getDefault.returns(emptySchemas);
264250

265251
// Get completions
266252
const result = provider.getCompletions(mockContext, mockParams);
@@ -307,29 +293,7 @@ describe('ResourceEntityCompletionProvider', () => {
307293
},
308294
});
309295

310-
const setupSchemaWithRequiredProps = () => {
311-
const mockSchema = {
312-
typeName: 'AWS::EC2::Instance',
313-
propertyKeys: new Set(['InstanceType', 'ImageId']),
314-
required: ['InstanceType', 'ImageId'],
315-
isReadOnly: () => false,
316-
isRequired: (prop: string) => ['InstanceType', 'ImageId'].includes(prop),
317-
getByPath: () => ({ type: 'string' }),
318-
resolveRef: () => ({ type: 'string' }),
319-
} as unknown as ResourceSchema;
320-
321-
const mockSchemas = new Map<string, ResourceSchema>();
322-
mockSchemas.set('AWS::EC2::Instance', mockSchema);
323-
324-
const combinedSchemas = new CombinedSchemas();
325-
Object.defineProperty(combinedSchemas, 'schemas', {
326-
get: () => mockSchemas,
327-
});
328-
329-
mockComponents.schemaRetriever.getDefault.returns(combinedSchemas);
330-
};
331-
332-
setupSchemaWithRequiredProps();
296+
mockComponents.schemaRetriever.getDefault.returns(schemasWithRequired);
333297

334298
const result = provider.getCompletions(mockContext, mockParams);
335299

@@ -381,8 +345,7 @@ describe('ResourceEntityCompletionProvider', () => {
381345
},
382346
});
383347

384-
const testSchemas = combinedSchemas([]);
385-
mockComponents.schemaRetriever.getDefault.returns(testSchemas);
348+
mockComponents.schemaRetriever.getDefault.returns(emptySchemas);
386349

387350
const result = provider.getCompletions(mockContext, mockParams);
388351

0 commit comments

Comments
 (0)