@@ -3,12 +3,11 @@ import { CompletionParams, CompletionItemKind, CompletionItem, InsertTextFormat
33import { ResourceEntityCompletionProvider } from '../../../src/autocomplete/ResourceEntityCompletionProvider' ;
44import { ResourceAttribute } from '../../../src/context/ContextType' ;
55import { YamlNodeTypes } from '../../../src/context/syntaxtree/utils/TreeSitterTypes' ;
6- import { CombinedSchemas } from '../../../src/schema/CombinedSchemas' ;
76import { ResourceSchema } from '../../../src/schema/ResourceSchema' ;
87import { ExtensionName } from '../../../src/utils/ExtensionConfig' ;
98import { createForEachResourceContext , createResourceContext } from '../../utils/MockContext' ;
109import { createMockComponents } from '../../utils/MockServerComponents' ;
11- import { combinedSchemas } from '../../utils/SchemaUtils' ;
10+ import { combinedSchemas , createSchemaFrom , Schemas } from '../../utils/SchemaUtils' ;
1211
1312describe ( '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