@uarlouski/testrail-mcp-server 1.1.0 → 1.3.0
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/CHANGELOG.md +18 -0
- package/README.md +62 -16
- package/package.json +3 -2
- package/src/client/testrail.ts +111 -56
- package/src/index.ts +32 -2
- package/src/tools/add_attachment_to_run.ts +62 -0
- package/src/tools/add_results.ts +28 -0
- package/src/tools/add_run.ts +24 -0
- package/src/tools/create_case.ts +10 -17
- package/src/tools/get_case.ts +5 -12
- package/src/tools/get_case_fields.ts +4 -11
- package/src/tools/get_cases.ts +9 -16
- package/src/tools/get_projects.ts +7 -27
- package/src/tools/get_sections.ts +7 -27
- package/src/tools/get_statuses.ts +18 -0
- package/src/tools/get_templates.ts +7 -27
- package/src/tools/get_tests.ts +22 -0
- package/src/tools/update_case.ts +7 -14
- package/src/tools/update_cases.ts +10 -16
- package/src/types/custom.ts +1 -16
- package/src/types/testrail.ts +140 -87
- package/src/utils/sanitizer.ts +29 -0
- package/test/client/testrail.test.ts +329 -141
- package/test/tools/add_results.test.ts +94 -0
- package/test/tools/add_run.test.ts +83 -0
- package/test/tools/create_case.test.ts +10 -16
- package/test/tools/get_case.test.ts +47 -62
- package/test/tools/get_case_fields.test.ts +7 -80
- package/test/tools/get_cases.test.ts +19 -108
- package/test/tools/get_projects.test.ts +4 -41
- package/test/tools/get_sections.test.ts +7 -36
- package/test/tools/get_statuses.test.ts +56 -0
- package/test/tools/get_templates.test.ts +1 -30
- package/test/tools/get_tests.test.ts +47 -0
- package/test/tools/update_case.test.ts +10 -16
- package/test/tools/update_cases.test.ts +29 -28
- package/test/utils/mapper.test.ts +13 -13
- package/test/utils/sanitizer.test.ts +85 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, test, expect } from '@jest/globals';
|
|
2
|
-
import { sanitizeValue } from '../../src/utils/sanitizer.js';
|
|
2
|
+
import { sanitizeValue, removeNullish } from '../../src/utils/sanitizer.js';
|
|
3
3
|
|
|
4
4
|
describe('sanitizeValue', () => {
|
|
5
5
|
test('strips style attributes from string values', () => {
|
|
@@ -57,3 +57,87 @@ describe('sanitizeValue', () => {
|
|
|
57
57
|
expect(sanitizeValue(null)).toBe(null);
|
|
58
58
|
});
|
|
59
59
|
});
|
|
60
|
+
|
|
61
|
+
describe('removeNullish', () => {
|
|
62
|
+
test('removes null values from object', () => {
|
|
63
|
+
const input = { a: 1, b: null, c: 3 };
|
|
64
|
+
expect(removeNullish(input)).toEqual({ a: 1, c: 3 });
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('removes undefined values from object', () => {
|
|
68
|
+
const input = { a: 1, b: undefined, c: 3 };
|
|
69
|
+
expect(removeNullish(input)).toEqual({ a: 1, c: 3 });
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('handles nested objects', () => {
|
|
73
|
+
const input = {
|
|
74
|
+
name: 'test',
|
|
75
|
+
metadata: { id: 1, value: null, active: true },
|
|
76
|
+
count: null
|
|
77
|
+
};
|
|
78
|
+
expect(removeNullish(input)).toEqual({
|
|
79
|
+
name: 'test',
|
|
80
|
+
metadata: { id: 1, active: true }
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test('filters null items from arrays', () => {
|
|
85
|
+
const input = [1, null, 3, undefined, 5];
|
|
86
|
+
expect(removeNullish(input)).toEqual([1, 3, 5]);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test('cleans nested objects in arrays', () => {
|
|
90
|
+
const input = [
|
|
91
|
+
{ id: 1, name: 'item1', value: null },
|
|
92
|
+
{ id: 2, name: null, value: 'test' }
|
|
93
|
+
];
|
|
94
|
+
expect(removeNullish(input)).toEqual([
|
|
95
|
+
{ id: 1, name: 'item1' },
|
|
96
|
+
{ id: 2, value: 'test' }
|
|
97
|
+
]);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test('handles deeply nested structures', () => {
|
|
101
|
+
const input = {
|
|
102
|
+
projects: [
|
|
103
|
+
{
|
|
104
|
+
id: 1,
|
|
105
|
+
name: 'Project A',
|
|
106
|
+
metadata: { created: null, updated: '2024-01-01' },
|
|
107
|
+
tags: [null, 'important', undefined, 'urgent']
|
|
108
|
+
},
|
|
109
|
+
null
|
|
110
|
+
],
|
|
111
|
+
count: undefined
|
|
112
|
+
};
|
|
113
|
+
expect(removeNullish(input)).toEqual({
|
|
114
|
+
projects: [
|
|
115
|
+
{
|
|
116
|
+
id: 1,
|
|
117
|
+
name: 'Project A',
|
|
118
|
+
metadata: { updated: '2024-01-01' },
|
|
119
|
+
tags: ['important', 'urgent']
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test('preserves primitive values', () => {
|
|
126
|
+
expect(removeNullish(42)).toBe(42);
|
|
127
|
+
expect(removeNullish('test')).toBe('test');
|
|
128
|
+
expect(removeNullish(true)).toBe(true);
|
|
129
|
+
expect(removeNullish(0)).toBe(0);
|
|
130
|
+
expect(removeNullish('')).toBe('');
|
|
131
|
+
expect(removeNullish(false)).toBe(false);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test('returns null/undefined as-is for root values', () => {
|
|
135
|
+
expect(removeNullish(null)).toBe(null);
|
|
136
|
+
expect(removeNullish(undefined)).toBe(undefined);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
test('handles empty objects and arrays', () => {
|
|
140
|
+
expect(removeNullish({})).toEqual({});
|
|
141
|
+
expect(removeNullish([])).toEqual([]);
|
|
142
|
+
});
|
|
143
|
+
});
|