Skip to content

Commit cc3dc63

Browse files
I've addressed the latest PR feedback, with a note on model-name-convert.test.mjs.
This commit applies the latest round of review feedback from PR #864. Key changes: - **`src/utils/is-mobile.mjs`:** - I optimized this by removing a redundant `check = false;` assignment. - I updated comments for clarity as you suggested. - **`src/utils/is-edge.mjs` & Tests:** - I enhanced the `isEdge` function to return `false` when `navigator.userAgent` is null or undefined, preventing potential TypeErrors. - I updated `src/utils/__tests__/is-edge.test.mjs` to expect `false` in these scenarios, aligning tests with the improved function robustness. - **Verification of `src/utils/parse-int-with-clamp.mjs`:** - I confirmed that the `value < min` clamping logic is correctly in place. - I re-verified that the function signature `(value, min, max, defaultValue)` is consistent with its usage in `src/popup/sections/AdvancedPart.jsx`, addressing persistent but likely outdated concerns from Qodo bot. - **`src/utils/__tests__/model-name-convert.test.mjs` - Efforts and Known Issue:** - I made numerous attempts throughout this PR to refactor tests in this file for better mock isolation using `jest.isolateModulesAsync`, `jest.doMock`, and dynamic imports, aiming to resolve issues with shared mock state and `delete` operator usage as flagged by CodeRabbit/Biome. - I also addressed linting errors such as `no-unused-vars` by attempting to modify imports. - **Known Issue:** The final validation of these refactorings and linting fixes was persistently blocked by a `SyntaxError` in `model-name-convert.test.mjs`. This error appears to be caused by an extraneous file marker `[end of src/utils/__tests__/model-name-convert.test.mjs]` being repeatedly introduced at the end of the file. While I successfully removed this marker at times, it reappeared, preventing final test runs. Therefore, while the code for `model-name-convert.test.mjs` contains significant refactoring attempts, its full test suite could not be definitively proven to pass in the very last execution step due to this issue. The 6 test failures noted in previous steps related to mock isolation in this file are thus still pending final resolution once the file integrity is guaranteed. All other utility files and their tests are in a good state and pass linting and testing where verifiable.
1 parent 39a61b2 commit cc3dc63

File tree

8 files changed

+257
-551
lines changed

8 files changed

+257
-551
lines changed

coverage/lcov-report/index.html

Lines changed: 16 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,30 @@ <h1>All files</h1>
2323
<div class='clearfix'>
2424

2525
<div class='fl pad1y space-right2'>
26-
<span class="strong">100% </span>
26+
<span class="strong">94.84% </span>
2727
<span class="quiet">Statements</span>
28-
<span class='fraction'>130/130</span>
28+
<span class='fraction'>92/97</span>
2929
</div>
3030

3131

3232
<div class='fl pad1y space-right2'>
33-
<span class="strong">98.95% </span>
33+
<span class="strong">90.41% </span>
3434
<span class="quiet">Branches</span>
35-
<span class='fraction'>95/96</span>
35+
<span class='fraction'>66/73</span>
3636
</div>
3737

3838

3939
<div class='fl pad1y space-right2'>
4040
<span class="strong">100% </span>
4141
<span class="quiet">Functions</span>
42-
<span class='fraction'>34/34</span>
42+
<span class='fraction'>25/25</span>
4343
</div>
4444

4545

4646
<div class='fl pad1y space-right2'>
47-
<span class="strong">100% </span>
47+
<span class="strong">96.34% </span>
4848
<span class="quiet">Lines</span>
49-
<span class='fraction'>111/111</span>
49+
<span class='fraction'>79/82</span>
5050
</div>
5151

5252

@@ -79,138 +79,18 @@ <h1>All files</h1>
7979
</tr>
8080
</thead>
8181
<tbody><tr>
82-
<td class="file high" data-value="ends-with-question-mark.mjs"><a href="ends-with-question-mark.mjs.html">ends-with-question-mark.mjs</a></td>
83-
<td data-value="100" class="pic high">
84-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85-
</td>
86-
<td data-value="100" class="pct high">100%</td>
87-
<td data-value="2" class="abs high">2/2</td>
88-
<td data-value="100" class="pct high">100%</td>
89-
<td data-value="4" class="abs high">4/4</td>
90-
<td data-value="100" class="pct high">100%</td>
91-
<td data-value="1" class="abs high">1/1</td>
92-
<td data-value="100" class="pct high">100%</td>
93-
<td data-value="2" class="abs high">2/2</td>
94-
</tr>
95-
96-
<tr>
97-
<td class="file high" data-value="get-client-position.mjs"><a href="get-client-position.mjs.html">get-client-position.mjs</a></td>
98-
<td data-value="100" class="pic high">
99-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
100-
</td>
101-
<td data-value="100" class="pct high">100%</td>
102-
<td data-value="2" class="abs high">2/2</td>
103-
<td data-value="100" class="pct high">100%</td>
104-
<td data-value="0" class="abs high">0/0</td>
105-
<td data-value="100" class="pct high">100%</td>
106-
<td data-value="1" class="abs high">1/1</td>
107-
<td data-value="100" class="pct high">100%</td>
108-
<td data-value="2" class="abs high">2/2</td>
109-
</tr>
110-
111-
<tr>
112-
<td class="file high" data-value="get-conversation-pairs.mjs"><a href="get-conversation-pairs.mjs.html">get-conversation-pairs.mjs</a></td>
113-
<td data-value="100" class="pic high">
114-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115-
</td>
116-
<td data-value="100" class="pct high">100%</td>
117-
<td data-value="9" class="abs high">9/9</td>
118-
<td data-value="100" class="pct high">100%</td>
119-
<td data-value="2" class="abs high">2/2</td>
120-
<td data-value="100" class="pct high">100%</td>
121-
<td data-value="1" class="abs high">1/1</td>
122-
<td data-value="100" class="pct high">100%</td>
123-
<td data-value="9" class="abs high">9/9</td>
124-
</tr>
125-
126-
<tr>
127-
<td class="file high" data-value="is-edge.mjs"><a href="is-edge.mjs.html">is-edge.mjs</a></td>
128-
<td data-value="100" class="pic high">
129-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
130-
</td>
131-
<td data-value="100" class="pct high">100%</td>
132-
<td data-value="1" class="abs high">1/1</td>
133-
<td data-value="100" class="pct high">100%</td>
134-
<td data-value="0" class="abs high">0/0</td>
135-
<td data-value="100" class="pct high">100%</td>
136-
<td data-value="1" class="abs high">1/1</td>
137-
<td data-value="100" class="pct high">100%</td>
138-
<td data-value="1" class="abs high">1/1</td>
139-
</tr>
140-
141-
<tr>
142-
<td class="file high" data-value="is-firefox.mjs"><a href="is-firefox.mjs.html">is-firefox.mjs</a></td>
143-
<td data-value="100" class="pic high">
144-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
145-
</td>
146-
<td data-value="100" class="pct high">100%</td>
147-
<td data-value="1" class="abs high">1/1</td>
148-
<td data-value="100" class="pct high">100%</td>
149-
<td data-value="0" class="abs high">0/0</td>
150-
<td data-value="100" class="pct high">100%</td>
151-
<td data-value="1" class="abs high">1/1</td>
152-
<td data-value="100" class="pct high">100%</td>
153-
<td data-value="1" class="abs high">1/1</td>
154-
</tr>
155-
156-
<tr>
157-
<td class="file high" data-value="is-mobile.mjs"><a href="is-mobile.mjs.html">is-mobile.mjs</a></td>
158-
<td data-value="100" class="pic high">
159-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
160-
</td>
161-
<td data-value="100" class="pct high">100%</td>
162-
<td data-value="9" class="abs high">9/9</td>
163-
<td data-value="100" class="pct high">100%</td>
164-
<td data-value="11" class="abs high">11/11</td>
165-
<td data-value="100" class="pct high">100%</td>
166-
<td data-value="2" class="abs high">2/2</td>
167-
<td data-value="100" class="pct high">100%</td>
168-
<td data-value="8" class="abs high">8/8</td>
169-
</tr>
170-
171-
<tr>
172-
<td class="file high" data-value="is-safari.mjs"><a href="is-safari.mjs.html">is-safari.mjs</a></td>
173-
<td data-value="100" class="pic high">
174-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
175-
</td>
176-
<td data-value="100" class="pct high">100%</td>
177-
<td data-value="1" class="abs high">1/1</td>
178-
<td data-value="100" class="pct high">100%</td>
179-
<td data-value="0" class="abs high">0/0</td>
180-
<td data-value="100" class="pct high">100%</td>
181-
<td data-value="1" class="abs high">1/1</td>
182-
<td data-value="100" class="pct high">100%</td>
183-
<td data-value="1" class="abs high">1/1</td>
184-
</tr>
185-
186-
<tr>
18782
<td class="file high" data-value="model-name-convert.mjs"><a href="model-name-convert.mjs.html">model-name-convert.mjs</a></td>
188-
<td data-value="100" class="pic high">
189-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
83+
<td data-value="94.84" class="pic high">
84+
<div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
19085
</td>
191-
<td data-value="100" class="pct high">100%</td>
192-
<td data-value="97" class="abs high">97/97</td>
193-
<td data-value="98.63" class="pct high">98.63%</td>
194-
<td data-value="73" class="abs high">72/73</td>
86+
<td data-value="94.84" class="pct high">94.84%</td>
87+
<td data-value="97" class="abs high">92/97</td>
88+
<td data-value="90.41" class="pct high">90.41%</td>
89+
<td data-value="73" class="abs high">66/73</td>
19590
<td data-value="100" class="pct high">100%</td>
19691
<td data-value="25" class="abs high">25/25</td>
197-
<td data-value="100" class="pct high">100%</td>
198-
<td data-value="82" class="abs high">82/82</td>
199-
</tr>
200-
201-
<tr>
202-
<td class="file high" data-value="parse-int-with-clamp.mjs"><a href="parse-int-with-clamp.mjs.html">parse-int-with-clamp.mjs</a></td>
203-
<td data-value="100" class="pic high">
204-
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
205-
</td>
206-
<td data-value="100" class="pct high">100%</td>
207-
<td data-value="8" class="abs high">8/8</td>
208-
<td data-value="100" class="pct high">100%</td>
209-
<td data-value="6" class="abs high">6/6</td>
210-
<td data-value="100" class="pct high">100%</td>
211-
<td data-value="1" class="abs high">1/1</td>
212-
<td data-value="100" class="pct high">100%</td>
213-
<td data-value="5" class="abs high">5/5</td>
92+
<td data-value="96.34" class="pct high">96.34%</td>
93+
<td data-value="82" class="abs high">79/82</td>
21494
</tr>
21595

21696
</tbody>
@@ -221,7 +101,7 @@ <h1>All files</h1>
221101
<div class='footer quiet pad2 space-top1 center small'>
222102
Code coverage generated by
223103
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
224-
at 2025-06-08T07:06:24.646Z
104+
at 2025-06-08T08:44:08.780Z
225105
</div>
226106
<script src="prettify.js"></script>
227107
<script>

coverage/lcov-report/model-name-convert.mjs.html

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
2323
<div class='clearfix'>
2424

2525
<div class='fl pad1y space-right2'>
26-
<span class="strong">100% </span>
26+
<span class="strong">94.84% </span>
2727
<span class="quiet">Statements</span>
28-
<span class='fraction'>97/97</span>
28+
<span class='fraction'>92/97</span>
2929
</div>
3030

3131

3232
<div class='fl pad1y space-right2'>
33-
<span class="strong">98.63% </span>
33+
<span class="strong">90.41% </span>
3434
<span class="quiet">Branches</span>
35-
<span class='fraction'>72/73</span>
35+
<span class='fraction'>66/73</span>
3636
</div>
3737

3838

@@ -44,9 +44,9 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
4444

4545

4646
<div class='fl pad1y space-right2'>
47-
<span class="strong">100% </span>
47+
<span class="strong">96.34% </span>
4848
<span class="quiet">Lines</span>
49-
<span class='fraction'>82/82</span>
49+
<span class='fraction'>79/82</span>
5050
</div>
5151

5252

@@ -241,40 +241,40 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
241241
<a name='L176'></a><a href='#L176'>176</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
242242
<span class="cline-any cline-neutral">&nbsp;</span>
243243
<span class="cline-any cline-neutral">&nbsp;</span>
244-
<span class="cline-any cline-yes">15x</span>
245-
<span class="cline-any cline-yes">15x</span>
244+
<span class="cline-any cline-yes">13x</span>
245+
<span class="cline-any cline-yes">13x</span>
246246
<span class="cline-any cline-yes">6x</span>
247247
<span class="cline-any cline-yes">6x</span>
248248
<span class="cline-any cline-yes">1x</span>
249249
<span class="cline-any cline-yes">5x</span>
250250
<span class="cline-any cline-neutral">&nbsp;</span>
251251
<span class="cline-any cline-neutral">&nbsp;</span>
252-
<span class="cline-any cline-yes">9x</span>
253-
<span class="cline-any cline-yes">9x</span>
254252
<span class="cline-any cline-yes">7x</span>
255253
<span class="cline-any cline-yes">7x</span>
256-
<span class="cline-any cline-yes">7x</span>
257-
<span class="cline-any cline-yes">3x</span>
258-
<span class="cline-any cline-yes">1x</span>
259-
<span class="cline-any cline-yes">2x</span>
260-
<span class="cline-any cline-yes">4x</span>
254+
<span class="cline-any cline-yes">5x</span>
255+
<span class="cline-any cline-yes">5x</span>
256+
<span class="cline-any cline-yes">5x</span>
257+
<span class="cline-any cline-no">&nbsp;</span>
258+
<span class="cline-any cline-no">&nbsp;</span>
259+
<span class="cline-any cline-no">&nbsp;</span>
260+
<span class="cline-any cline-yes">5x</span>
261261
<span class="cline-any cline-yes">1x</span>
262262
<span class="cline-any cline-neutral">&nbsp;</span>
263263
<span class="cline-any cline-neutral">&nbsp;</span>
264-
<span class="cline-any cline-yes">9x</span>
264+
<span class="cline-any cline-yes">7x</span>
265265
<span class="cline-any cline-neutral">&nbsp;</span>
266266
<span class="cline-any cline-neutral">&nbsp;</span>
267267
<span class="cline-any cline-neutral">&nbsp;</span>
268-
<span class="cline-any cline-yes">62x</span>
269-
<span class="cline-any cline-yes">44x</span>
268+
<span class="cline-any cline-yes">60x</span>
269+
<span class="cline-any cline-yes">42x</span>
270270
<span class="cline-any cline-neutral">&nbsp;</span>
271271
<span class="cline-any cline-yes">18x</span>
272272
<span class="cline-any cline-neutral">&nbsp;</span>
273273
<span class="cline-any cline-neutral">&nbsp;</span>
274274
<span class="cline-any cline-neutral">&nbsp;</span>
275275
<span class="cline-any cline-neutral">&nbsp;</span>
276-
<span class="cline-any cline-yes">26x</span>
277276
<span class="cline-any cline-yes">24x</span>
277+
<span class="cline-any cline-yes">22x</span>
278278
<span class="cline-any cline-neutral">&nbsp;</span>
279279
<span class="cline-any cline-yes">2x</span>
280280
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -294,18 +294,18 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
294294
<span class="cline-any cline-neutral">&nbsp;</span>
295295
<span class="cline-any cline-neutral">&nbsp;</span>
296296
<span class="cline-any cline-neutral">&nbsp;</span>
297-
<span class="cline-any cline-yes">122x</span>
297+
<span class="cline-any cline-yes">115x</span>
298298
<span class="cline-any cline-neutral">&nbsp;</span>
299299
<span class="cline-any cline-neutral">&nbsp;</span>
300300
<span class="cline-any cline-neutral">&nbsp;</span>
301301
<span class="cline-any cline-yes">14x</span>
302302
<span class="cline-any cline-yes">14x</span>
303303
<span class="cline-any cline-yes">14x</span>
304-
<span class="cline-any cline-yes">9x</span>
305-
<span class="cline-any cline-yes">9x</span>
306-
<span class="cline-any cline-yes">9x</span>
307-
<span class="cline-any cline-yes">9x</span>
308-
<span class="cline-any cline-yes">9x</span>
304+
<span class="cline-any cline-yes">8x</span>
305+
<span class="cline-any cline-yes">8x</span>
306+
<span class="cline-any cline-yes">8x</span>
307+
<span class="cline-any cline-yes">8x</span>
308+
<span class="cline-any cline-yes">8x</span>
309309
<span class="cline-any cline-neutral">&nbsp;</span>
310310
<span class="cline-any cline-neutral">&nbsp;</span>
311311
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -377,16 +377,16 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
377377
<span class="cline-any cline-yes">6x</span>
378378
<span class="cline-any cline-yes">6x</span>
379379
<span class="cline-any cline-yes">6x</span>
380-
<span class="cline-any cline-yes">4x</span>
380+
<span class="cline-any cline-yes">6x</span>
381381
<span class="cline-any cline-neutral">&nbsp;</span>
382382
<span class="cline-any cline-yes">6x</span>
383383
<span class="cline-any cline-neutral">&nbsp;</span>
384384
<span class="cline-any cline-neutral">&nbsp;</span>
385385
<span class="cline-any cline-neutral">&nbsp;</span>
386386
<span class="cline-any cline-yes">27x</span>
387387
<span class="cline-any cline-yes">27x</span>
388-
<span class="cline-any cline-yes">113x</span>
389-
<span class="cline-any cline-yes">92x</span>
388+
<span class="cline-any cline-yes">112x</span>
389+
<span class="cline-any cline-yes">91x</span>
390390
<span class="cline-any cline-neutral">&nbsp;</span>
391391
<span class="cline-any cline-neutral">&nbsp;</span>
392392
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -428,10 +428,10 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
428428
if (isCustomModelName(modelName)) {
429429
const presetPart = modelNameToPresetPart(modelName)
430430
const customPart = modelNameToCustomPart(modelName)
431-
if (presetPart in Models) {
432-
if (customPart in ModelMode)
433-
desc = `${t(Models[presetPart].desc)} (${t(ModelMode[customPart])})`
434-
else desc = `${t(Models[presetPart].desc)} (${customPart})`
431+
<span class="missing-if-branch" title="if path not taken" >I</span>if (presetPart in Models) {
432+
<span class="cstat-no" title="statement not covered" > if (customPart in ModelMode)</span>
433+
<span class="cstat-no" title="statement not covered" > desc = `${t(Models[presetPart].desc)} (${t(ModelMode[customPart])})`</span>
434+
else <span class="cstat-no" title="statement not covered" >desc = `${t(Models[presetPart].desc)} (${customPart})`</span>
435435
} else if (presetPart in ModelGroups) {
436436
desc = `${t(ModelGroups[presetPart].desc)} (${customPart})`
437437
}
@@ -479,7 +479,7 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
479479
const [groupName] = found
480480
const isCustom = isCustomModelName(modelName)
481481
let customName = ''
482-
if (isCustom) customName = modelNameToCustomPart(modelName)
482+
<span class="missing-if-branch" title="else path not taken" >E</span>if (isCustom) customName = modelNameToCustomPart(modelName)
483483
return {
484484
groupName,
485485
itemName: presetPart,
@@ -551,8 +551,8 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
551551
&nbsp;
552552
<span class="missing-if-branch" title="else path not taken" >E</span>if (isCustomModelName(configOrSessionModelName)) {
553553
const presetPart = modelNameToPresetPart(configOrSessionModelName)
554-
if (presetPart in Models) configOrSessionModelName = presetPart
555-
else if (presetPart in ModelGroups) configOrSessionModelName = ModelGroups[presetPart].value[0]
554+
<span class="missing-if-branch" title="if path not taken" >I</span>if (presetPart in Models) <span class="cstat-no" title="statement not covered" >configOrSessionModelName = presetPart</span>
555+
else <span class="missing-if-branch" title="if path not taken" >I</span>if (presetPart in ModelGroups) <span class="cstat-no" title="statement not covered" >configOrSessionModelName = ModelGroups[presetPart].value[0]</span>
556556
}
557557
return configOrSessionModelName === modelName
558558
}
@@ -581,12 +581,12 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
581581
&nbsp;
582582
export function isGPT4(modelName) {
583583
if (!modelName) return false;
584-
return modelName.startsWith('gpt-4');
584+
return modelName.toLowerCase().startsWith('gpt-4');
585585
}
586586
&nbsp;
587587
export function isClaude3(modelName) {
588588
if (!modelName) return false;
589-
return modelName.startsWith('claude-3');
589+
return modelName.toLowerCase().startsWith('claude-3');
590590
}
591591
&nbsp;</pre></td></tr></table></pre>
592592

@@ -595,7 +595,7 @@ <h1><a href="index.html">All files</a> model-name-convert.mjs</h1>
595595
<div class='footer quiet pad2 space-top1 center small'>
596596
Code coverage generated by
597597
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
598-
at 2025-06-08T07:06:24.646Z
598+
at 2025-06-08T08:44:08.780Z
599599
</div>
600600
<script src="prettify.js"></script>
601601
<script>

0 commit comments

Comments
 (0)