Skip to content

Commit a63b0ba

Browse files
Deep Furiyadeepfuriya
authored andcommitted
added new unit tests to validate document manager cache
1 parent 1351bd5 commit a63b0ba

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

tst/unit/document/DocumentManager.test.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,94 @@ describe('DocumentManager', () => {
6363
expect(documentManager.getLine('file:///nonexistent.yaml', 0)).toBeUndefined();
6464
});
6565
});
66+
67+
describe('document cache updates', () => {
68+
it('should cache document on first access', () => {
69+
const uri = 'file:///test.yaml';
70+
const content = 'Resources:\n Bucket:\n Type: AWS::S3::Bucket';
71+
const textDocument = TextDocument.create(uri, 'yaml', 1, content);
72+
73+
mockDocuments.get.returns(textDocument);
74+
75+
const doc1 = documentManager.get(uri);
76+
const doc2 = documentManager.get(uri);
77+
78+
expect(doc1).toBe(doc2);
79+
});
80+
81+
it('should return updated content when TextDocument is mutated', () => {
82+
const uri = 'file:///test.yaml';
83+
const textDocument = TextDocument.create(uri, 'yaml', 1, 'old content');
84+
85+
mockDocuments.get.returns(textDocument);
86+
87+
const doc = documentManager.get(uri);
88+
expect(doc?.contents()).toBe('old content');
89+
90+
TextDocument.update(textDocument, [{ text: 'new content' }], 2);
91+
92+
expect(doc?.contents()).toBe('new content');
93+
});
94+
95+
it('should return updated version when TextDocument is mutated', () => {
96+
const uri = 'file:///test.yaml';
97+
const textDocument = TextDocument.create(uri, 'yaml', 1, 'content');
98+
99+
mockDocuments.get.returns(textDocument);
100+
101+
const doc = documentManager.get(uri);
102+
expect(doc?.version).toBe(1);
103+
104+
TextDocument.update(textDocument, [{ text: 'updated' }], 2);
105+
106+
expect(doc?.version).toBe(2);
107+
});
108+
109+
it('should return updated lineCount when TextDocument is mutated', () => {
110+
const uri = 'file:///test.yaml';
111+
const textDocument = TextDocument.create(uri, 'yaml', 1, 'line1');
112+
113+
mockDocuments.get.returns(textDocument);
114+
115+
const doc = documentManager.get(uri);
116+
expect(doc?.lineCount).toBe(1);
117+
118+
TextDocument.update(textDocument, [{ text: 'line1\nline2\nline3' }], 2);
119+
120+
expect(doc?.lineCount).toBe(3);
121+
});
122+
123+
it('should remove document from cache', () => {
124+
const uri = 'file:///test.yaml';
125+
const textDocument = TextDocument.create(uri, 'yaml', 1, 'content');
126+
127+
mockDocuments.get.returns(textDocument);
128+
129+
const doc1 = documentManager.get(uri);
130+
expect(doc1).toBeDefined();
131+
132+
documentManager.removeDocument(uri);
133+
134+
const doc2 = documentManager.get(uri);
135+
expect(doc2).not.toBe(doc1);
136+
});
137+
138+
it('should recreate document after cache invalidation', () => {
139+
const uri = 'file:///test.yaml';
140+
const textDocument = TextDocument.create(uri, 'yaml', 1, 'Resources: {}');
141+
142+
mockDocuments.get.returns(textDocument);
143+
144+
const doc1 = documentManager.get(uri);
145+
expect(doc1?.cfnFileType).toBe(CloudFormationFileType.Template);
146+
147+
documentManager.removeDocument(uri);
148+
149+
TextDocument.update(textDocument, [{ text: 'name: app' }], 2);
150+
151+
const doc2 = documentManager.get(uri);
152+
expect(doc2).not.toBe(doc1);
153+
expect(doc2?.cfnFileType).toBe(CloudFormationFileType.Other);
154+
});
155+
});
66156
});

0 commit comments

Comments
 (0)