@dpesch/mantisbt-mcp-server 1.10.2 → 1.10.6

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.de.md +2 -1
  3. package/README.md +2 -1
  4. package/dist/client.js +0 -15
  5. package/dist/tools/files.js +14 -15
  6. package/docs/cookbook.de.md +1 -1
  7. package/docs/cookbook.md +1 -1
  8. package/package.json +1 -1
  9. package/server.json +2 -2
  10. package/.gitea/PULL_REQUEST_TEMPLATE.md +0 -17
  11. package/.gitea/workflows/ci.yml +0 -95
  12. package/.github/workflows/ci.yml +0 -32
  13. package/scripts/hooks/pre-push.mjs +0 -220
  14. package/scripts/init.mjs +0 -95
  15. package/scripts/record-fixtures.ts +0 -160
  16. package/tests/cache.test.ts +0 -265
  17. package/tests/client.test.ts +0 -372
  18. package/tests/config.test.ts +0 -263
  19. package/tests/fixtures/get_current_user.json +0 -40
  20. package/tests/fixtures/get_issue.json +0 -133
  21. package/tests/fixtures/get_issue_enums.json +0 -67
  22. package/tests/fixtures/get_issue_fields_sample.json +0 -76
  23. package/tests/fixtures/get_project_categories.json +0 -157
  24. package/tests/fixtures/get_project_versions.json +0 -3
  25. package/tests/fixtures/get_project_versions_with_data.json +0 -52
  26. package/tests/fixtures/list_issues.json +0 -95
  27. package/tests/fixtures/list_projects.json +0 -65
  28. package/tests/helpers/mock-server.ts +0 -166
  29. package/tests/helpers/search-mocks.ts +0 -84
  30. package/tests/prompts/prompts.test.ts +0 -242
  31. package/tests/resources/resources.test.ts +0 -309
  32. package/tests/search/embedder.test.ts +0 -81
  33. package/tests/search/highlight.test.ts +0 -129
  34. package/tests/search/store.test.ts +0 -193
  35. package/tests/search/sync.test.ts +0 -249
  36. package/tests/search/tools.test.ts +0 -661
  37. package/tests/tools/config.test.ts +0 -212
  38. package/tests/tools/files.test.ts +0 -344
  39. package/tests/tools/issues.test.ts +0 -1180
  40. package/tests/tools/metadata.test.ts +0 -509
  41. package/tests/tools/monitors.test.ts +0 -101
  42. package/tests/tools/projects.test.ts +0 -338
  43. package/tests/tools/relationships.test.ts +0 -177
  44. package/tests/tools/string-coercion.test.ts +0 -317
  45. package/tests/tools/users.test.ts +0 -62
  46. package/tests/utils/date-filter.test.ts +0 -169
  47. package/tests/version-hint.test.ts +0 -230
  48. package/tsconfig.build.json +0 -8
  49. package/vitest.config.ts +0 -8
@@ -1,230 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { parseVersion, compareVersions, VersionHintService } from '../src/version-hint.js';
3
-
4
- // ---------------------------------------------------------------------------
5
- // parseVersion
6
- // ---------------------------------------------------------------------------
7
-
8
- describe('parseVersion()', () => {
9
- it('parses a standard version string', () => {
10
- expect(parseVersion('2.25.7')).toEqual([2, 25, 7]);
11
- });
12
-
13
- it('strips leading v prefix', () => {
14
- expect(parseVersion('v1.2.3')).toEqual([1, 2, 3]);
15
- });
16
-
17
- it('returns null for invalid strings', () => {
18
- expect(parseVersion('not-a-version')).toBeNull();
19
- expect(parseVersion('')).toBeNull();
20
- expect(parseVersion('1.2')).toBeNull();
21
- });
22
-
23
- it('ignores extra suffix after patch number', () => {
24
- expect(parseVersion('2.25.7-beta')).toEqual([2, 25, 7]);
25
- });
26
- });
27
-
28
- // ---------------------------------------------------------------------------
29
- // compareVersions
30
- // ---------------------------------------------------------------------------
31
-
32
- describe('compareVersions()', () => {
33
- it('returns 0 for equal versions', () => {
34
- expect(compareVersions([2, 25, 7], [2, 25, 7])).toBe(0);
35
- });
36
-
37
- it('returns -1 when first version is older (major)', () => {
38
- expect(compareVersions([1, 0, 0], [2, 0, 0])).toBe(-1);
39
- });
40
-
41
- it('returns 1 when first version is newer (major)', () => {
42
- expect(compareVersions([3, 0, 0], [2, 99, 99])).toBe(1);
43
- });
44
-
45
- it('compares minor version correctly', () => {
46
- expect(compareVersions([2, 24, 0], [2, 25, 0])).toBe(-1);
47
- expect(compareVersions([2, 26, 0], [2, 25, 0])).toBe(1);
48
- });
49
-
50
- it('compares patch version correctly', () => {
51
- expect(compareVersions([2, 25, 6], [2, 25, 7])).toBe(-1);
52
- expect(compareVersions([2, 25, 8], [2, 25, 7])).toBe(1);
53
- });
54
- });
55
-
56
- // ---------------------------------------------------------------------------
57
- // VersionHintService – getUpdateHint()
58
- // ---------------------------------------------------------------------------
59
-
60
- describe('VersionHintService – getUpdateHint()', () => {
61
- it('returns null when installedVersion is not set', () => {
62
- const svc = new VersionHintService();
63
- expect(svc.getUpdateHint()).toBeNull();
64
- });
65
-
66
- it('returns null when latestVersion is not set', () => {
67
- const svc = new VersionHintService();
68
- // Simulate installed version via onSuccessfulResponse
69
- const mockResponse = {
70
- headers: { get: (key: string) => key === 'X-Mantis-Version' ? '2.25.6' : null },
71
- } as unknown as Response;
72
- svc.onSuccessfulResponse(mockResponse);
73
- expect(svc.getUpdateHint()).toBeNull();
74
- });
75
-
76
- it('returns hint string when latestVersion > installedVersion', async () => {
77
- const fetchMock = vi.fn().mockResolvedValue({
78
- ok: true,
79
- json: () => Promise.resolve([{ name: 'release-2.25.7' }]),
80
- });
81
- vi.stubGlobal('fetch', fetchMock);
82
-
83
- const svc = new VersionHintService();
84
-
85
- const mockResponse = {
86
- headers: { get: (key: string) => key === 'X-Mantis-Version' ? '2.25.6' : null },
87
- } as unknown as Response;
88
- svc.onSuccessfulResponse(mockResponse);
89
-
90
- // Trigger fetch and wait for it to complete
91
- svc.triggerLatestVersionFetch();
92
- await svc.waitForLatestVersion(1000);
93
-
94
- const hint = svc.getUpdateHint();
95
- expect(hint).not.toBeNull();
96
- expect(hint).toContain('2.25.7');
97
- expect(hint).toContain('2.25.6');
98
- });
99
-
100
- it('returns null when installed version equals latest version', async () => {
101
- const fetchMock = vi.fn().mockResolvedValue({
102
- ok: true,
103
- json: () => Promise.resolve([{ name: 'release-2.25.7' }]),
104
- });
105
- vi.stubGlobal('fetch', fetchMock);
106
-
107
- const svc = new VersionHintService();
108
-
109
- const mockResponse = {
110
- headers: { get: (key: string) => key === 'X-Mantis-Version' ? '2.25.7' : null },
111
- } as unknown as Response;
112
- svc.onSuccessfulResponse(mockResponse);
113
-
114
- svc.triggerLatestVersionFetch();
115
- await svc.waitForLatestVersion(1000);
116
-
117
- expect(svc.getUpdateHint()).toBeNull();
118
- });
119
-
120
- it('returns null when installedVersion is newer than latestVersion', async () => {
121
- const fetchMock = vi.fn().mockResolvedValue({
122
- ok: true,
123
- json: () => Promise.resolve([{ name: 'release-2.25.6' }]),
124
- });
125
- vi.stubGlobal('fetch', fetchMock);
126
-
127
- const svc = new VersionHintService();
128
-
129
- const mockResponse = {
130
- headers: { get: (key: string) => key === 'X-Mantis-Version' ? '2.25.7' : null },
131
- } as unknown as Response;
132
- svc.onSuccessfulResponse(mockResponse);
133
-
134
- svc.triggerLatestVersionFetch();
135
- await svc.waitForLatestVersion(1000);
136
-
137
- expect(svc.getUpdateHint()).toBeNull();
138
- });
139
- });
140
-
141
- // ---------------------------------------------------------------------------
142
- // VersionHintService – onSuccessfulResponse()
143
- // ---------------------------------------------------------------------------
144
-
145
- describe('VersionHintService – onSuccessfulResponse()', () => {
146
- it('extracts X-Mantis-Version header from response', () => {
147
- const svc = new VersionHintService();
148
- const mockResponse = {
149
- headers: { get: (key: string) => key === 'X-Mantis-Version' ? '2.25.7' : null },
150
- } as unknown as Response;
151
-
152
- svc.onSuccessfulResponse(mockResponse);
153
- expect(svc.getInstalledVersion()).toBe('2.25.7');
154
- });
155
-
156
- it('does not overwrite already set installedVersion', () => {
157
- const svc = new VersionHintService();
158
-
159
- const first = {
160
- headers: { get: (key: string) => key === 'X-Mantis-Version' ? '2.25.6' : null },
161
- } as unknown as Response;
162
- const second = {
163
- headers: { get: (key: string) => key === 'X-Mantis-Version' ? '2.25.7' : null },
164
- } as unknown as Response;
165
-
166
- svc.onSuccessfulResponse(first);
167
- svc.onSuccessfulResponse(second);
168
-
169
- expect(svc.getInstalledVersion()).toBe('2.25.6');
170
- });
171
-
172
- it('ignores response without X-Mantis-Version header', () => {
173
- const svc = new VersionHintService();
174
- const mockResponse = {
175
- headers: { get: (_key: string) => null },
176
- } as unknown as Response;
177
-
178
- svc.onSuccessfulResponse(mockResponse);
179
- expect(svc.getInstalledVersion()).toBeNull();
180
- });
181
- });
182
-
183
- // ---------------------------------------------------------------------------
184
- // VersionHintService – triggerLatestVersionFetch()
185
- // ---------------------------------------------------------------------------
186
-
187
- describe('VersionHintService – triggerLatestVersionFetch()', () => {
188
- beforeEach(() => {
189
- vi.unstubAllGlobals();
190
- });
191
-
192
- it('only triggers fetch once even when called multiple times', async () => {
193
- const fetchMock = vi.fn().mockResolvedValue({
194
- ok: true,
195
- json: () => Promise.resolve([{ name: 'release-2.25.7' }]),
196
- });
197
- vi.stubGlobal('fetch', fetchMock);
198
-
199
- const svc = new VersionHintService();
200
- svc.triggerLatestVersionFetch();
201
- svc.triggerLatestVersionFetch();
202
- svc.triggerLatestVersionFetch();
203
- await svc.waitForLatestVersion(1000);
204
-
205
- expect(fetchMock).toHaveBeenCalledOnce();
206
- });
207
-
208
- it('handles GitHub API errors gracefully (no crash, latestVersion stays null)', async () => {
209
- const fetchMock = vi.fn().mockResolvedValue({ ok: false });
210
- vi.stubGlobal('fetch', fetchMock);
211
-
212
- const svc = new VersionHintService();
213
- svc.triggerLatestVersionFetch();
214
- await svc.waitForLatestVersion(500);
215
-
216
- expect(svc.getLatestVersion()).toBeNull();
217
- });
218
-
219
- it('handles fetch network errors gracefully', async () => {
220
- const fetchMock = vi.fn().mockRejectedValue(new Error('Network error'));
221
- vi.stubGlobal('fetch', fetchMock);
222
-
223
- const svc = new VersionHintService();
224
- svc.triggerLatestVersionFetch();
225
- // Give async fire-and-forget time to complete
226
- await new Promise(r => setTimeout(r, 100));
227
-
228
- expect(svc.getLatestVersion()).toBeNull();
229
- });
230
- });
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "rootDir": "./src",
5
- "noEmit": false
6
- },
7
- "include": ["src/**/*"]
8
- }
package/vitest.config.ts DELETED
@@ -1,8 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
-
3
- export default defineConfig({
4
- test: {
5
- environment: 'node',
6
- include: ['tests/**/*.test.ts'],
7
- },
8
- });