Skip to content

Commit b8e2fd6

Browse files
authored
fix unit test set-up and CI workflow (RooCodeInc#3154)
* Fix unit test set-up * run tests on CI * update failing tests * Update node Update the coverage job node version
1 parent df7f9fc commit b8e2fd6

File tree

5 files changed

+41
-22
lines changed

5 files changed

+41
-22
lines changed

.github/workflows/test.yml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Setup Node.js environment
2424
uses: actions/setup-node@v4
2525
with:
26-
node-version: 20.15.1
26+
node-version: 22
2727

2828
# Setup Python for coverage script
2929
- name: Setup Python
@@ -73,9 +73,8 @@ jobs:
7373
- name: Build Extension
7474
run: npm run compile
7575

76-
# Disabling due to compatability with test framework and ESM modules
77-
# - name: Unit Tests
78-
# run: npm run test:unit
76+
- name: Unit Tests
77+
run: npm run test:unit
7978

8079
# Run extension tests with coverage
8180
- name: Extension Tests with Coverage
@@ -132,7 +131,7 @@ jobs:
132131
- name: Setup Node.js environment
133132
uses: actions/setup-node@v4
134133
with:
135-
node-version: 20.15.1
134+
node-version: 22
136135

137136
# Cache root dependencies - only reuse if package-lock.json exactly matches
138137
- name: Cache root dependencies

.mocharc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"extension": ["ts"],
33
"spec": "src/**/__tests__/*.ts",
4-
"require": ["ts-node/register", "source-map-support/register"],
4+
"require": ["ts-node/register", "source-map-support/register", "./src/test/requires.ts"],
55
"recursive": true
66
}

src/core/context/context-management/__tests__/ContextManager.test.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,24 @@ describe("ContextManager", () => {
3434
const messages = createMessages(11)
3535
const result = contextManager.getNextTruncationRange(messages, undefined, "half")
3636

37-
expect(result).to.deep.equal([1, 4])
37+
expect(result).to.deep.equal([2, 5])
3838
})
3939

4040
it("first truncation with quarter keep", () => {
4141
const messages = createMessages(11)
4242
const result = contextManager.getNextTruncationRange(messages, undefined, "quarter")
4343

44-
expect(result).to.deep.equal([1, 6])
44+
expect(result).to.deep.equal([2, 7])
4545
})
4646

4747
it("sequential truncation with half keep", () => {
4848
const messages = createMessages(21)
4949
const firstRange = contextManager.getNextTruncationRange(messages, undefined, "half")
50-
expect(firstRange).to.deep.equal([1, 10])
50+
expect(firstRange).to.deep.equal([2, 9])
5151

5252
// Pass the previous range for sequential truncation
5353
const secondRange = contextManager.getNextTruncationRange(messages, firstRange, "half")
54-
expect(secondRange).to.deep.equal([1, 14])
54+
expect(secondRange).to.deep.equal([2, 13])
5555
})
5656

5757
it("sequential truncation with quarter keep", () => {
@@ -60,28 +60,28 @@ describe("ContextManager", () => {
6060

6161
const secondRange = contextManager.getNextTruncationRange(messages, firstRange, "quarter")
6262

63-
expect(secondRange[0]).to.equal(1)
63+
expect(secondRange[0]).to.equal(2)
6464
expect(secondRange[1]).to.be.greaterThan(firstRange[1])
6565
})
6666

6767
it("ensures the last message in range is a user message", () => {
6868
const messages = createMessages(14)
6969
const result = contextManager.getNextTruncationRange(messages, undefined, "half")
7070

71-
// Check if the message at the end of range is a user message
71+
// Check if the message at the end of range is an assistant message
7272
const lastRemovedMessage = messages[result[1]]
73-
expect(lastRemovedMessage.role).to.equal("user")
73+
expect(lastRemovedMessage.role).to.equal("assistant")
7474

75-
// Check if the next message after the range is an assistant message
75+
// Check if the next message after the range is a user message
7676
const nextMessage = messages[result[1] + 1]
77-
expect(nextMessage.role).to.equal("assistant")
77+
expect(nextMessage.role).to.equal("user")
7878
})
7979

8080
it("handles small message arrays", () => {
8181
const messages = createMessages(3)
8282
const result = contextManager.getNextTruncationRange(messages, undefined, "half")
8383

84-
expect(result).to.deep.equal([1, 0])
84+
expect(result).to.deep.equal([2, 1])
8585
})
8686

8787
it("preserves the message structure when truncating", () => {
@@ -120,9 +120,10 @@ describe("ContextManager", () => {
120120
const range: [number, number] = [1, 3]
121121
const result = contextManager.getTruncatedMessages(messages, range)
122122

123-
expect(result).to.have.lengthOf(2)
123+
expect(result).to.have.lengthOf(3)
124124
expect(result[0]).to.deep.equal(messages[0])
125-
expect(result[1]).to.deep.equal(messages[4])
125+
expect(result[1]).to.deep.equal(messages[1])
126+
expect(result[2]).to.deep.equal(messages[4])
126127
})
127128

128129
it("works with a range that starts at the first message after task", () => {
@@ -131,20 +132,21 @@ describe("ContextManager", () => {
131132
const range: [number, number] = [1, 2]
132133
const result = contextManager.getTruncatedMessages(messages, range)
133134

134-
expect(result).to.have.lengthOf(2)
135+
expect(result).to.have.lengthOf(3)
135136
expect(result[0]).to.deep.equal(messages[0])
136-
expect(result[1]).to.deep.equal(messages[3])
137+
expect(result[1]).to.deep.equal(messages[1])
138+
expect(result[2]).to.deep.equal(messages[3])
137139
})
138140

139141
it("correctly handles removing a range while preserving alternation pattern", () => {
140142
const messages = createMessages(5)
141143

142-
const range: [number, number] = [1, 2]
144+
const range: [number, number] = [2, 3]
143145
const result = contextManager.getTruncatedMessages(messages, range)
144146

145147
expect(result).to.have.lengthOf(3)
146148
expect(result[0]).to.deep.equal(messages[0])
147-
expect(result[1]).to.deep.equal(messages[3])
149+
expect(result[1]).to.deep.equal(messages[1])
148150
expect(result[2]).to.deep.equal(messages[4])
149151

150152
expect(result[0].role).to.equal("user")

src/test/requires.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const Module = require("module")
2+
const originalRequire = Module.prototype.require
3+
4+
/**
5+
* VSCode is not available during unit tests
6+
* @see {@link file://./vscode-mock.ts}
7+
*/
8+
Module.prototype.require = function (path: string) {
9+
if (path === "vscode") {
10+
return require("./vscode-mock")
11+
}
12+
13+
return originalRequire.call(this, path)
14+
}
15+
16+
// Required to have access to String.prototype.toPosix
17+
import "../utils/path"

src/test/vscode-mock.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export {}

0 commit comments

Comments
 (0)