@dpesch/mantisbt-mcp-server 1.10.3 → 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 (43) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/package.json +1 -1
  3. package/server.json +2 -2
  4. package/.gitea/PULL_REQUEST_TEMPLATE.md +0 -17
  5. package/.gitea/workflows/ci.yml +0 -95
  6. package/.github/workflows/ci.yml +0 -32
  7. package/scripts/hooks/pre-push.mjs +0 -220
  8. package/scripts/init.mjs +0 -95
  9. package/scripts/record-fixtures.ts +0 -160
  10. package/tests/cache.test.ts +0 -265
  11. package/tests/client.test.ts +0 -372
  12. package/tests/config.test.ts +0 -263
  13. package/tests/fixtures/get_current_user.json +0 -40
  14. package/tests/fixtures/get_issue.json +0 -133
  15. package/tests/fixtures/get_issue_enums.json +0 -67
  16. package/tests/fixtures/get_issue_fields_sample.json +0 -76
  17. package/tests/fixtures/get_project_categories.json +0 -157
  18. package/tests/fixtures/get_project_versions.json +0 -3
  19. package/tests/fixtures/get_project_versions_with_data.json +0 -52
  20. package/tests/fixtures/list_issues.json +0 -95
  21. package/tests/fixtures/list_projects.json +0 -65
  22. package/tests/helpers/mock-server.ts +0 -166
  23. package/tests/helpers/search-mocks.ts +0 -84
  24. package/tests/prompts/prompts.test.ts +0 -242
  25. package/tests/resources/resources.test.ts +0 -309
  26. package/tests/search/embedder.test.ts +0 -81
  27. package/tests/search/highlight.test.ts +0 -129
  28. package/tests/search/store.test.ts +0 -193
  29. package/tests/search/sync.test.ts +0 -249
  30. package/tests/search/tools.test.ts +0 -661
  31. package/tests/tools/config.test.ts +0 -212
  32. package/tests/tools/files.test.ts +0 -343
  33. package/tests/tools/issues.test.ts +0 -1180
  34. package/tests/tools/metadata.test.ts +0 -509
  35. package/tests/tools/monitors.test.ts +0 -101
  36. package/tests/tools/projects.test.ts +0 -338
  37. package/tests/tools/relationships.test.ts +0 -177
  38. package/tests/tools/string-coercion.test.ts +0 -317
  39. package/tests/tools/users.test.ts +0 -62
  40. package/tests/utils/date-filter.test.ts +0 -169
  41. package/tests/version-hint.test.ts +0 -230
  42. package/tsconfig.build.json +0 -8
  43. 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
- });