@aiready/core 0.23.5 → 0.23.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{client-D-cn9ydj.d.mts → client-BrIMPk89.d.mts} +94 -16
- package/dist/{client-D-cn9ydj.d.ts → client-BrIMPk89.d.ts} +94 -16
- package/dist/client-C5BuGX4F.d.mts +1205 -0
- package/dist/client-C5BuGX4F.d.ts +1205 -0
- package/dist/{client-BF9NjhE8.d.mts → client-CKcjnPXt.d.mts} +1 -0
- package/dist/{client-BF9NjhE8.d.ts → client-CKcjnPXt.d.ts} +1 -0
- package/dist/client.d.mts +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/index.d.mts +464 -134
- package/dist/index.d.ts +464 -134
- package/dist/index.js +211 -47
- package/dist/index.mjs +211 -44
- package/package.json +1 -1
- package/dist/__tests__/parser-factory.test.d.ts +0 -5
- package/dist/__tests__/parser-factory.test.d.ts.map +0 -1
- package/dist/__tests__/parser-factory.test.js +0 -70
- package/dist/__tests__/parser-factory.test.js.map +0 -1
- package/dist/__tests__/python-parser.test.d.ts +0 -5
- package/dist/__tests__/python-parser.test.d.ts.map +0 -1
- package/dist/__tests__/python-parser.test.js +0 -194
- package/dist/__tests__/python-parser.test.js.map +0 -1
- package/dist/__tests__/scoring.test.d.ts +0 -2
- package/dist/__tests__/scoring.test.d.ts.map +0 -1
- package/dist/__tests__/scoring.test.js +0 -197
- package/dist/__tests__/scoring.test.js.map +0 -1
- package/dist/chunk-3YI4IS3D.mjs +0 -601
- package/dist/chunk-5HIXDC3X.mjs +0 -716
- package/dist/chunk-5V3L53AE.mjs +0 -805
- package/dist/chunk-CKVKHN3G.mjs +0 -660
- package/dist/chunk-COHIBX3Q.mjs +0 -635
- package/dist/chunk-CWRCDSKZ.mjs +0 -417
- package/dist/chunk-D3D3NCRR.mjs +0 -556
- package/dist/chunk-HCFYP7UD.mjs +0 -805
- package/dist/chunk-HFLFBA6F.mjs +0 -417
- package/dist/chunk-HKSARRCD.mjs +0 -365
- package/dist/chunk-JJ5JL5FX.mjs +0 -417
- package/dist/chunk-KDSTXVLQ.mjs +0 -724
- package/dist/chunk-KI7XORTN.mjs +0 -417
- package/dist/chunk-LTMHFNFK.mjs +0 -690
- package/dist/chunk-LTNXTXRI.mjs +0 -659
- package/dist/chunk-M22BXHBR.mjs +0 -805
- package/dist/chunk-MH3A3LX6.mjs +0 -615
- package/dist/chunk-NGHT7JOG.mjs +0 -697
- package/dist/chunk-OQ6IGDXG.mjs +0 -553
- package/dist/chunk-QAFB3HXQ.mjs +0 -590
- package/dist/chunk-QQBKXHLU.mjs +0 -678
- package/dist/chunk-RDHYGES7.mjs +0 -678
- package/dist/chunk-SWTDBVYJ.mjs +0 -660
- package/dist/chunk-UIWL5JQB.mjs +0 -417
- package/dist/chunk-UQGI67WR.mjs +0 -417
- package/dist/chunk-UTZOO4XO.mjs +0 -553
- package/dist/chunk-X4F46I5L.mjs +0 -635
- package/dist/chunk-XKK7YHPX.mjs +0 -619
- package/dist/chunk-YCA4FTEK.mjs +0 -600
- package/dist/chunk-ZSZRRTJM.mjs +0 -719
- package/dist/client-BgmiMoil.d.mts +0 -1344
- package/dist/client-BgmiMoil.d.ts +0 -1344
- package/dist/client-BxGrPuuN.d.mts +0 -1191
- package/dist/client-BxGrPuuN.d.ts +0 -1191
- package/dist/client-D9seCH4K.d.mts +0 -1334
- package/dist/client-D9seCH4K.d.ts +0 -1334
- package/dist/client-DIXIh7rw.d.mts +0 -1193
- package/dist/client-DIXIh7rw.d.ts +0 -1193
- package/dist/client-DVHXWOHw.d.mts +0 -1245
- package/dist/client-DVHXWOHw.d.ts +0 -1245
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/parsers/parser-factory.d.ts +0 -69
- package/dist/parsers/parser-factory.d.ts.map +0 -1
- package/dist/parsers/parser-factory.js +0 -116
- package/dist/parsers/parser-factory.js.map +0 -1
- package/dist/parsers/python-parser.d.ts +0 -47
- package/dist/parsers/python-parser.d.ts.map +0 -1
- package/dist/parsers/python-parser.js +0 -243
- package/dist/parsers/python-parser.js.map +0 -1
- package/dist/parsers/typescript-parser.d.ts +0 -22
- package/dist/parsers/typescript-parser.d.ts.map +0 -1
- package/dist/parsers/typescript-parser.js +0 -242
- package/dist/parsers/typescript-parser.js.map +0 -1
- package/dist/scoring.d.ts +0 -120
- package/dist/scoring.d.ts.map +0 -1
- package/dist/scoring.js +0 -197
- package/dist/scoring.js.map +0 -1
- package/dist/types/language.d.ts +0 -172
- package/dist/types/language.d.ts.map +0 -1
- package/dist/types/language.js +0 -45
- package/dist/types/language.js.map +0 -1
- package/dist/types.d.ts +0 -122
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils/ast-parser.d.ts +0 -59
- package/dist/utils/ast-parser.d.ts.map +0 -1
- package/dist/utils/ast-parser.js +0 -213
- package/dist/utils/ast-parser.js.map +0 -1
- package/dist/utils/cli-helpers.d.ts +0 -54
- package/dist/utils/cli-helpers.d.ts.map +0 -1
- package/dist/utils/cli-helpers.js +0 -78
- package/dist/utils/cli-helpers.js.map +0 -1
- package/dist/utils/config.d.ts +0 -9
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -80
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/file-scanner.d.ts +0 -16
- package/dist/utils/file-scanner.d.ts.map +0 -1
- package/dist/utils/file-scanner.js +0 -104
- package/dist/utils/file-scanner.js.map +0 -1
- package/dist/utils/metrics.d.ts +0 -6
- package/dist/utils/metrics.d.ts.map +0 -1
- package/dist/utils/metrics.js +0 -8
- package/dist/utils/metrics.js.map +0 -1
|
@@ -1,194 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test Python parser
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect } from 'vitest';
|
|
5
|
-
import { PythonParser } from '../parsers/python-parser';
|
|
6
|
-
import { Language } from '../types/language';
|
|
7
|
-
describe('PythonParser', () => {
|
|
8
|
-
const parser = new PythonParser();
|
|
9
|
-
it('should have correct language and extensions', () => {
|
|
10
|
-
expect(parser.language).toBe(Language.Python);
|
|
11
|
-
expect(parser.extensions).toContain('.py');
|
|
12
|
-
});
|
|
13
|
-
it('should handle .py files', () => {
|
|
14
|
-
expect(parser.canHandle('test.py')).toBe(true);
|
|
15
|
-
expect(parser.canHandle('Test.PY')).toBe(true);
|
|
16
|
-
expect(parser.canHandle('test.ts')).toBe(false);
|
|
17
|
-
});
|
|
18
|
-
it('should return PEP 8 naming conventions', () => {
|
|
19
|
-
const conventions = parser.getNamingConventions();
|
|
20
|
-
// Variables and functions should be snake_case
|
|
21
|
-
expect(conventions.variablePattern.test('my_variable')).toBe(true);
|
|
22
|
-
expect(conventions.variablePattern.test('myVariable')).toBe(false);
|
|
23
|
-
expect(conventions.functionPattern.test('my_function')).toBe(true);
|
|
24
|
-
// Classes should be PascalCase
|
|
25
|
-
expect(conventions.classPattern.test('MyClass')).toBe(true);
|
|
26
|
-
expect(conventions.classPattern.test('my_class')).toBe(false);
|
|
27
|
-
// Constants should be UPPER_CASE
|
|
28
|
-
expect(conventions.constantPattern.test('MY_CONSTANT')).toBe(true);
|
|
29
|
-
expect(conventions.constantPattern.test('myConstant')).toBe(false);
|
|
30
|
-
// Should have Python special method exceptions
|
|
31
|
-
expect(conventions.exceptions).toContain('__init__');
|
|
32
|
-
expect(conventions.exceptions).toContain('__str__');
|
|
33
|
-
});
|
|
34
|
-
describe('Import Extraction', () => {
|
|
35
|
-
it('should extract simple imports', () => {
|
|
36
|
-
const code = `
|
|
37
|
-
import os
|
|
38
|
-
import sys
|
|
39
|
-
import json
|
|
40
|
-
`;
|
|
41
|
-
const result = parser.parse(code, 'test.py');
|
|
42
|
-
expect(result.imports).toHaveLength(3);
|
|
43
|
-
expect(result.imports[0].source).toBe('os');
|
|
44
|
-
expect(result.imports[1].source).toBe('sys');
|
|
45
|
-
expect(result.imports[2].source).toBe('json');
|
|
46
|
-
});
|
|
47
|
-
it('should extract from imports', () => {
|
|
48
|
-
const code = `
|
|
49
|
-
from typing import List, Dict, Optional
|
|
50
|
-
from pathlib import Path
|
|
51
|
-
`;
|
|
52
|
-
const result = parser.parse(code, 'test.py');
|
|
53
|
-
expect(result.imports).toHaveLength(2);
|
|
54
|
-
const typingImport = result.imports.find((i) => i.source === 'typing');
|
|
55
|
-
expect(typingImport).toBeDefined();
|
|
56
|
-
expect(typingImport?.specifiers).toContain('List');
|
|
57
|
-
expect(typingImport?.specifiers).toContain('Dict');
|
|
58
|
-
expect(typingImport?.specifiers).toContain('Optional');
|
|
59
|
-
const pathlibImport = result.imports.find((i) => i.source === 'pathlib');
|
|
60
|
-
expect(pathlibImport?.specifiers).toContain('Path');
|
|
61
|
-
});
|
|
62
|
-
it('should handle wildcard imports', () => {
|
|
63
|
-
const code = `from os import *`;
|
|
64
|
-
const result = parser.parse(code, 'test.py');
|
|
65
|
-
expect(result.imports[0].source).toBe('os');
|
|
66
|
-
expect(result.imports[0].specifiers).toContain('*');
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe('Export Extraction', () => {
|
|
70
|
-
it('should extract module-level functions', () => {
|
|
71
|
-
const code = `
|
|
72
|
-
def public_function():
|
|
73
|
-
pass
|
|
74
|
-
|
|
75
|
-
def another_function(arg1, arg2):
|
|
76
|
-
return arg1 + arg2
|
|
77
|
-
`;
|
|
78
|
-
const result = parser.parse(code, 'test.py');
|
|
79
|
-
const funcNames = result.exports.map((e) => e.name);
|
|
80
|
-
expect(funcNames).toContain('public_function');
|
|
81
|
-
expect(funcNames).toContain('another_function');
|
|
82
|
-
});
|
|
83
|
-
it('should extract classes', () => {
|
|
84
|
-
const code = `
|
|
85
|
-
class MyClass:
|
|
86
|
-
def __init__(self):
|
|
87
|
-
self.value = 0
|
|
88
|
-
|
|
89
|
-
def method(self):
|
|
90
|
-
pass
|
|
91
|
-
|
|
92
|
-
class AnotherClass:
|
|
93
|
-
pass
|
|
94
|
-
`;
|
|
95
|
-
const result = parser.parse(code, 'test.py');
|
|
96
|
-
const classNames = result.exports
|
|
97
|
-
.filter((e) => e.type === 'class')
|
|
98
|
-
.map((e) => e.name);
|
|
99
|
-
expect(classNames).toContain('MyClass');
|
|
100
|
-
expect(classNames).toContain('AnotherClass');
|
|
101
|
-
// Methods should not be exported as separate entities
|
|
102
|
-
const methodNames = result.exports.map((e) => e.name);
|
|
103
|
-
expect(methodNames).not.toContain('method');
|
|
104
|
-
});
|
|
105
|
-
it('should not export private functions', () => {
|
|
106
|
-
const code = `
|
|
107
|
-
def public_function():
|
|
108
|
-
pass
|
|
109
|
-
|
|
110
|
-
def _private_function():
|
|
111
|
-
pass
|
|
112
|
-
|
|
113
|
-
def __dunder_function__():
|
|
114
|
-
pass
|
|
115
|
-
`;
|
|
116
|
-
const result = parser.parse(code, 'test.py');
|
|
117
|
-
const funcNames = result.exports.map((e) => e.name);
|
|
118
|
-
expect(funcNames).toContain('public_function');
|
|
119
|
-
expect(funcNames).toContain('__dunder_function__'); // Dunder methods are included
|
|
120
|
-
expect(funcNames).not.toContain('_private_function'); // Single underscore excluded
|
|
121
|
-
});
|
|
122
|
-
it('should extract __all__ exports', () => {
|
|
123
|
-
const code = `
|
|
124
|
-
__all__ = ['foo', 'bar', 'MyClass']
|
|
125
|
-
|
|
126
|
-
def foo():
|
|
127
|
-
pass
|
|
128
|
-
|
|
129
|
-
def bar():
|
|
130
|
-
pass
|
|
131
|
-
|
|
132
|
-
class MyClass:
|
|
133
|
-
pass
|
|
134
|
-
`;
|
|
135
|
-
const result = parser.parse(code, 'test.py');
|
|
136
|
-
const names = result.exports.map((e) => e.name);
|
|
137
|
-
expect(names).toContain('foo');
|
|
138
|
-
expect(names).toContain('bar');
|
|
139
|
-
expect(names).toContain('MyClass');
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
it('should include warning about regex-based parsing', () => {
|
|
143
|
-
const code = 'import os';
|
|
144
|
-
const result = parser.parse(code, 'test.py');
|
|
145
|
-
expect(result.warnings).toBeDefined();
|
|
146
|
-
expect(result.warnings.length).toBeGreaterThan(0);
|
|
147
|
-
expect(result.warnings[0]).toContain('regex-based');
|
|
148
|
-
});
|
|
149
|
-
it('should parse real-world Python code', () => {
|
|
150
|
-
const code = `
|
|
151
|
-
"""
|
|
152
|
-
A sample Python module
|
|
153
|
-
"""
|
|
154
|
-
from typing import List, Optional
|
|
155
|
-
import os
|
|
156
|
-
import sys
|
|
157
|
-
|
|
158
|
-
__all__ = ['process_data', 'DataProcessor']
|
|
159
|
-
|
|
160
|
-
class DataProcessor:
|
|
161
|
-
"""Process data"""
|
|
162
|
-
|
|
163
|
-
def __init__(self, config: dict):
|
|
164
|
-
self.config = config
|
|
165
|
-
|
|
166
|
-
def process(self, data: List[str]) -> List[str]:
|
|
167
|
-
return [item.upper() for item in data]
|
|
168
|
-
|
|
169
|
-
def process_data(items: List[str]) -> Optional[List[str]]:
|
|
170
|
-
"""Process a list of items"""
|
|
171
|
-
if not items:
|
|
172
|
-
return None
|
|
173
|
-
return [item.strip() for item in items]
|
|
174
|
-
|
|
175
|
-
def _helper_function():
|
|
176
|
-
"""Private helper"""
|
|
177
|
-
pass
|
|
178
|
-
|
|
179
|
-
MY_CONSTANT = 42
|
|
180
|
-
`;
|
|
181
|
-
const result = parser.parse(code, 'example.py');
|
|
182
|
-
// Check imports
|
|
183
|
-
expect(result.imports.length).toBeGreaterThan(0);
|
|
184
|
-
const typingImport = result.imports.find((i) => i.source === 'typing');
|
|
185
|
-
expect(typingImport).toBeDefined();
|
|
186
|
-
// Check exports
|
|
187
|
-
const exportNames = result.exports.map((e) => e.name);
|
|
188
|
-
expect(exportNames).toContain('DataProcessor');
|
|
189
|
-
expect(exportNames).toContain('process_data');
|
|
190
|
-
expect(exportNames).not.toContain('_helper_function');
|
|
191
|
-
expect(exportNames).not.toContain('process'); // Method, not module-level
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
//# sourceMappingURL=python-parser.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"python-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/python-parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import {
|
|
3
|
-
calculateOverallScore,
|
|
4
|
-
getRating,
|
|
5
|
-
parseWeightString,
|
|
6
|
-
normalizeToolName,
|
|
7
|
-
getToolWeight,
|
|
8
|
-
DEFAULT_TOOL_WEIGHTS,
|
|
9
|
-
} from '../scoring';
|
|
10
|
-
describe('Core Scoring Infrastructure', () => {
|
|
11
|
-
describe('calculateOverallScore', () => {
|
|
12
|
-
it('should calculate weighted average correctly', () => {
|
|
13
|
-
const toolOutputs = new Map([
|
|
14
|
-
[
|
|
15
|
-
'pattern-detect',
|
|
16
|
-
{
|
|
17
|
-
toolName: 'pattern-detect',
|
|
18
|
-
score: 80,
|
|
19
|
-
rawMetrics: {},
|
|
20
|
-
factors: [],
|
|
21
|
-
recommendations: [],
|
|
22
|
-
},
|
|
23
|
-
],
|
|
24
|
-
[
|
|
25
|
-
'context-analyzer',
|
|
26
|
-
{
|
|
27
|
-
toolName: 'context-analyzer',
|
|
28
|
-
score: 60,
|
|
29
|
-
rawMetrics: {},
|
|
30
|
-
factors: [],
|
|
31
|
-
recommendations: [],
|
|
32
|
-
},
|
|
33
|
-
],
|
|
34
|
-
]);
|
|
35
|
-
// Default weights: pattern-detect=40, context-analyzer=35
|
|
36
|
-
// (80 * 40 + 60 * 35) / (40 + 35) = (3200 + 2100) / 75 = 5300 / 75 = 70.67 → 71
|
|
37
|
-
const result = calculateOverallScore(toolOutputs);
|
|
38
|
-
expect(result.overall).toBe(71);
|
|
39
|
-
expect(result.rating).toBe('Fair'); // 71 is in Fair range (60-74)
|
|
40
|
-
expect(result.toolsUsed).toEqual(['pattern-detect', 'context-analyzer']);
|
|
41
|
-
expect(result.breakdown).toHaveLength(2);
|
|
42
|
-
});
|
|
43
|
-
it('should apply CLI weight overrides', () => {
|
|
44
|
-
const toolOutputs = new Map([
|
|
45
|
-
[
|
|
46
|
-
'pattern-detect',
|
|
47
|
-
{
|
|
48
|
-
toolName: 'pattern-detect',
|
|
49
|
-
score: 80,
|
|
50
|
-
rawMetrics: {},
|
|
51
|
-
factors: [],
|
|
52
|
-
recommendations: [],
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
[
|
|
56
|
-
'context-analyzer',
|
|
57
|
-
{
|
|
58
|
-
toolName: 'context-analyzer',
|
|
59
|
-
score: 60,
|
|
60
|
-
rawMetrics: {},
|
|
61
|
-
factors: [],
|
|
62
|
-
recommendations: [],
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
]);
|
|
66
|
-
const cliWeights = new Map([
|
|
67
|
-
['pattern-detect', 50],
|
|
68
|
-
['context-analyzer', 50],
|
|
69
|
-
]);
|
|
70
|
-
// Equal weights: (80 * 50 + 60 * 50) / 100 = 7000 / 100 = 70
|
|
71
|
-
const result = calculateOverallScore(toolOutputs, undefined, cliWeights);
|
|
72
|
-
expect(result.overall).toBe(70);
|
|
73
|
-
expect(result.calculation.weights['pattern-detect']).toBe(50);
|
|
74
|
-
expect(result.calculation.weights['context-analyzer']).toBe(50);
|
|
75
|
-
});
|
|
76
|
-
it('should handle single tool scoring', () => {
|
|
77
|
-
const toolOutputs = new Map([
|
|
78
|
-
[
|
|
79
|
-
'pattern-detect',
|
|
80
|
-
{
|
|
81
|
-
toolName: 'pattern-detect',
|
|
82
|
-
score: 85,
|
|
83
|
-
rawMetrics: {},
|
|
84
|
-
factors: [],
|
|
85
|
-
recommendations: [],
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
]);
|
|
89
|
-
const result = calculateOverallScore(toolOutputs);
|
|
90
|
-
expect(result.overall).toBe(85);
|
|
91
|
-
expect(result.toolsUsed).toEqual(['pattern-detect']);
|
|
92
|
-
});
|
|
93
|
-
it('should apply config weights when no CLI override', () => {
|
|
94
|
-
const toolOutputs = new Map([
|
|
95
|
-
[
|
|
96
|
-
'pattern-detect',
|
|
97
|
-
{
|
|
98
|
-
toolName: 'pattern-detect',
|
|
99
|
-
score: 90,
|
|
100
|
-
rawMetrics: {},
|
|
101
|
-
factors: [],
|
|
102
|
-
recommendations: [],
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
]);
|
|
106
|
-
const config = {
|
|
107
|
-
tools: {
|
|
108
|
-
'pattern-detect': {
|
|
109
|
-
scoreWeight: 60,
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
const result = calculateOverallScore(toolOutputs, config);
|
|
114
|
-
expect(result.overall).toBe(90);
|
|
115
|
-
expect(result.calculation.weights['pattern-detect']).toBe(60);
|
|
116
|
-
});
|
|
117
|
-
it('should throw error when no tool outputs provided', () => {
|
|
118
|
-
const toolOutputs = new Map();
|
|
119
|
-
expect(() => calculateOverallScore(toolOutputs)).toThrow(
|
|
120
|
-
'No tool outputs provided for scoring'
|
|
121
|
-
);
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('getRating', () => {
|
|
125
|
-
it('should return correct ratings for score ranges', () => {
|
|
126
|
-
expect(getRating(100)).toBe('Excellent');
|
|
127
|
-
expect(getRating(90)).toBe('Excellent');
|
|
128
|
-
expect(getRating(89)).toBe('Good');
|
|
129
|
-
expect(getRating(75)).toBe('Good');
|
|
130
|
-
expect(getRating(74)).toBe('Fair');
|
|
131
|
-
expect(getRating(60)).toBe('Fair');
|
|
132
|
-
expect(getRating(59)).toBe('Needs Work');
|
|
133
|
-
expect(getRating(40)).toBe('Needs Work');
|
|
134
|
-
expect(getRating(39)).toBe('Critical');
|
|
135
|
-
expect(getRating(0)).toBe('Critical');
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
describe('parseWeightString', () => {
|
|
139
|
-
it('should parse valid weight string', () => {
|
|
140
|
-
const weights = parseWeightString(
|
|
141
|
-
'patterns:50,context:30,consistency:20'
|
|
142
|
-
);
|
|
143
|
-
expect(weights.get('pattern-detect')).toBe(50);
|
|
144
|
-
expect(weights.get('context-analyzer')).toBe(30);
|
|
145
|
-
expect(weights.get('consistency')).toBe(20);
|
|
146
|
-
});
|
|
147
|
-
it('should return empty map for undefined input', () => {
|
|
148
|
-
const weights = parseWeightString(undefined);
|
|
149
|
-
expect(weights.size).toBe(0);
|
|
150
|
-
});
|
|
151
|
-
it('should skip invalid pairs', () => {
|
|
152
|
-
const weights = parseWeightString(
|
|
153
|
-
'patterns:50,invalid,context:abc,consistency:30'
|
|
154
|
-
);
|
|
155
|
-
expect(weights.get('pattern-detect')).toBe(50);
|
|
156
|
-
expect(weights.get('context-analyzer')).toBeUndefined();
|
|
157
|
-
expect(weights.get('consistency')).toBe(30);
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
describe('normalizeToolName', () => {
|
|
161
|
-
it('should normalize shorthand tool names', () => {
|
|
162
|
-
expect(normalizeToolName('patterns')).toBe('pattern-detect');
|
|
163
|
-
expect(normalizeToolName('context')).toBe('context-analyzer');
|
|
164
|
-
expect(normalizeToolName('consistency')).toBe('consistency');
|
|
165
|
-
});
|
|
166
|
-
it('should return full names unchanged', () => {
|
|
167
|
-
expect(normalizeToolName('pattern-detect')).toBe('pattern-detect');
|
|
168
|
-
expect(normalizeToolName('context-analyzer')).toBe('context-analyzer');
|
|
169
|
-
});
|
|
170
|
-
it('should return unknown names unchanged', () => {
|
|
171
|
-
expect(normalizeToolName('unknown-tool')).toBe('unknown-tool');
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
describe('getToolWeight', () => {
|
|
175
|
-
it('should prioritize CLI override', () => {
|
|
176
|
-
const weight = getToolWeight('pattern-detect', { scoreWeight: 30 }, 50);
|
|
177
|
-
expect(weight).toBe(50);
|
|
178
|
-
});
|
|
179
|
-
it('should use config weight when no CLI override', () => {
|
|
180
|
-
const weight = getToolWeight(
|
|
181
|
-
'pattern-detect',
|
|
182
|
-
{ scoreWeight: 30 },
|
|
183
|
-
undefined
|
|
184
|
-
);
|
|
185
|
-
expect(weight).toBe(30);
|
|
186
|
-
});
|
|
187
|
-
it('should fall back to default weight', () => {
|
|
188
|
-
const weight = getToolWeight('pattern-detect', undefined, undefined);
|
|
189
|
-
expect(weight).toBe(DEFAULT_TOOL_WEIGHTS['pattern-detect']);
|
|
190
|
-
});
|
|
191
|
-
it('should use 10 for unknown tools', () => {
|
|
192
|
-
const weight = getToolWeight('unknown-tool', undefined, undefined);
|
|
193
|
-
expect(weight).toBe(10);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
//# sourceMappingURL=scoring.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.test.js","sourceRoot":"","sources":["../../src/__tests__/scoring.test.ts"],"names":[],"mappings":"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"}
|