projectpulse-mcp 1.5.0 → 1.5.1

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 (45) hide show
  1. package/package.json +6 -4
  2. package/dist/analytics/dora.test.d.ts +0 -2
  3. package/dist/analytics/dora.test.d.ts.map +0 -1
  4. package/dist/analytics/dora.test.js +0 -164
  5. package/dist/analytics/dora.test.js.map +0 -1
  6. package/dist/scoring/health-score.test.d.ts +0 -2
  7. package/dist/scoring/health-score.test.d.ts.map +0 -1
  8. package/dist/scoring/health-score.test.js +0 -249
  9. package/dist/scoring/health-score.test.js.map +0 -1
  10. package/dist/security/openssf-client.test.d.ts +0 -2
  11. package/dist/security/openssf-client.test.d.ts.map +0 -1
  12. package/dist/security/openssf-client.test.js +0 -70
  13. package/dist/security/openssf-client.test.js.map +0 -1
  14. package/dist/tools/analyze-code-scanning.test.d.ts +0 -2
  15. package/dist/tools/analyze-code-scanning.test.d.ts.map +0 -1
  16. package/dist/tools/analyze-code-scanning.test.js +0 -72
  17. package/dist/tools/analyze-code-scanning.test.js.map +0 -1
  18. package/dist/tools/analyze-dependencies.test.d.ts +0 -2
  19. package/dist/tools/analyze-dependencies.test.d.ts.map +0 -1
  20. package/dist/tools/analyze-dependencies.test.js +0 -65
  21. package/dist/tools/analyze-dependencies.test.js.map +0 -1
  22. package/dist/tools/check-ci-status.test.d.ts +0 -2
  23. package/dist/tools/check-ci-status.test.d.ts.map +0 -1
  24. package/dist/tools/check-ci-status.test.js +0 -90
  25. package/dist/tools/check-ci-status.test.js.map +0 -1
  26. package/dist/tools/compare-repos.test.d.ts +0 -2
  27. package/dist/tools/compare-repos.test.d.ts.map +0 -1
  28. package/dist/tools/compare-repos.test.js +0 -138
  29. package/dist/tools/compare-repos.test.js.map +0 -1
  30. package/dist/tools/get-dora-metrics.test.d.ts +0 -2
  31. package/dist/tools/get-dora-metrics.test.d.ts.map +0 -1
  32. package/dist/tools/get-dora-metrics.test.js +0 -71
  33. package/dist/tools/get-dora-metrics.test.js.map +0 -1
  34. package/dist/tools/get-health-score.test.d.ts +0 -2
  35. package/dist/tools/get-health-score.test.d.ts.map +0 -1
  36. package/dist/tools/get-health-score.test.js +0 -130
  37. package/dist/tools/get-health-score.test.js.map +0 -1
  38. package/dist/tools/get-repo-health.test.d.ts +0 -2
  39. package/dist/tools/get-repo-health.test.d.ts.map +0 -1
  40. package/dist/tools/get-repo-health.test.js +0 -80
  41. package/dist/tools/get-repo-health.test.js.map +0 -1
  42. package/dist/vitest.config.d.ts +0 -3
  43. package/dist/vitest.config.d.ts.map +0 -1
  44. package/dist/vitest.config.js +0 -7
  45. package/dist/vitest.config.js.map +0 -1
@@ -1,130 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { getOctokit } from '../github/client.js';
3
- import { executeGetHealthScore } from './get-health-score.js';
4
- import { fetchOpenSSFScore } from '../security/openssf-client.js';
5
- vi.mock('../github/client.js');
6
- vi.mock('../security/openssf-client.js');
7
- describe('executeGetHealthScore', () => {
8
- beforeEach(() => {
9
- vi.resetAllMocks();
10
- });
11
- it('should calculate health score successfully with dependabot alerts', async () => {
12
- const mockReposGet = vi.fn().mockResolvedValue({
13
- data: {
14
- pushed_at: '2023-10-01T00:00:00Z',
15
- open_issues_count: 5,
16
- forks_count: 10,
17
- license: { spdx_id: 'MIT' },
18
- description: 'test repo',
19
- archived: false
20
- }
21
- });
22
- const mockListRuns = vi.fn().mockResolvedValue({
23
- data: {
24
- workflow_runs: [{ conclusion: 'success' }]
25
- }
26
- });
27
- const mockListAlerts = vi.fn().mockResolvedValue({
28
- data: [
29
- { security_advisory: { severity: 'critical' }, state: 'open' },
30
- { security_advisory: { severity: 'high' }, state: 'open' }
31
- ]
32
- });
33
- vi.mocked(getOctokit).mockReturnValue({
34
- repos: { get: mockReposGet },
35
- actions: { listWorkflowRunsForRepo: mockListRuns },
36
- dependabot: { listAlertsForRepo: mockListAlerts }
37
- });
38
- const result = await executeGetHealthScore({ owner: 'test', repo: 'repo' });
39
- expect(mockReposGet).toHaveBeenCalledWith({ owner: 'test', repo: 'repo' });
40
- expect(mockListRuns).toHaveBeenCalledWith({ owner: 'test', repo: 'repo', per_page: 10 });
41
- expect(mockListAlerts).toHaveBeenCalledWith({ owner: 'test', repo: 'repo' });
42
- expect(result.content).toHaveLength(1);
43
- expect(result.content[0].type).toBe('text');
44
- const parsedText = JSON.parse(result.content[0].text);
45
- expect(parsedText.repo).toBe('test/repo');
46
- expect(parsedText.score).toBeTypeOf('number');
47
- expect(parsedText.grade).toBeTypeOf('string');
48
- // Ensure dependabot parsing worked:
49
- expect(parsedText.breakdown.security.detail).toContain('1 critical');
50
- expect(parsedText.breakdown.security.detail).toContain('1 high');
51
- });
52
- it('should calculate health score successfully even if dependabot fails', async () => {
53
- const mockReposGet = vi.fn().mockResolvedValue({
54
- data: {
55
- pushed_at: '2023-10-01T00:00:00Z',
56
- open_issues_count: 5,
57
- forks_count: 10,
58
- license: { spdx_id: 'MIT' },
59
- description: 'test repo',
60
- archived: false
61
- }
62
- });
63
- const mockListRuns = vi.fn().mockResolvedValue({
64
- data: {
65
- workflow_runs: [{ conclusion: 'success' }]
66
- }
67
- });
68
- // Simulating 404 or disabled dependabot
69
- const mockListAlerts = vi.fn().mockRejectedValue(new Error('Not Found'));
70
- vi.mocked(getOctokit).mockReturnValue({
71
- repos: { get: mockReposGet },
72
- actions: { listWorkflowRunsForRepo: mockListRuns },
73
- dependabot: { listAlertsForRepo: mockListAlerts }
74
- });
75
- const result = await executeGetHealthScore({ owner: 'test', repo: 'repo' });
76
- const parsedText = JSON.parse(result.content[0].text);
77
- expect(parsedText.repo).toBe('test/repo');
78
- // If dependabot fails, it should assume 0 alerts
79
- expect(parsedText.breakdown.security.detail).toContain('0 critical');
80
- expect(parsedText.breakdown.security.detail).toContain('0 high');
81
- });
82
- it('should fail if repos.get fails', async () => {
83
- const mockReposGet = vi.fn().mockRejectedValue(new Error('API Error'));
84
- const mockListRuns = vi.fn().mockResolvedValue({ data: { workflow_runs: [] } });
85
- vi.mocked(getOctokit).mockReturnValue({
86
- repos: { get: mockReposGet },
87
- actions: { listWorkflowRunsForRepo: mockListRuns },
88
- dependabot: { listAlertsForRepo: vi.fn() }
89
- });
90
- await expect(executeGetHealthScore({ owner: 'test', repo: 'error-repo' }))
91
- .rejects
92
- .toThrow('API Error');
93
- });
94
- it('should include OpenSSF score when available', async () => {
95
- const mockReposGet = vi.fn().mockResolvedValue({
96
- data: { pushed_at: '2023-10-01T00:00:00Z', open_issues_count: 0, forks_count: 0, license: { spdx_id: 'MIT' }, description: 'test', archived: false }
97
- });
98
- const mockListRuns = vi.fn().mockResolvedValue({ data: { workflow_runs: [] } });
99
- const mockListAlerts = vi.fn().mockResolvedValue({ data: [] });
100
- vi.mocked(getOctokit).mockReturnValue({
101
- repos: { get: mockReposGet },
102
- actions: { listWorkflowRunsForRepo: mockListRuns },
103
- dependabot: { listAlertsForRepo: mockListAlerts }
104
- });
105
- vi.mocked(fetchOpenSSFScore).mockResolvedValue({
106
- score: 80, checksUsed: 8, checksTotal: 10, details: "8/10 security checks, score 80/100"
107
- });
108
- const result = await executeGetHealthScore({ owner: 'test', repo: 'repo' });
109
- const parsedText = JSON.parse(result.content[0].text);
110
- expect(parsedText.breakdown.security.detail).toContain('OpenSSF');
111
- });
112
- it('should fallback to Dependabot only when OpenSSF is null', async () => {
113
- const mockReposGet = vi.fn().mockResolvedValue({
114
- data: { pushed_at: '2023-10-01T00:00:00Z', open_issues_count: 0, forks_count: 0, license: { spdx_id: 'MIT' }, description: 'test', archived: false }
115
- });
116
- const mockListRuns = vi.fn().mockResolvedValue({ data: { workflow_runs: [] } });
117
- const mockListAlerts = vi.fn().mockResolvedValue({ data: [] });
118
- vi.mocked(getOctokit).mockReturnValue({
119
- repos: { get: mockReposGet },
120
- actions: { listWorkflowRunsForRepo: mockListRuns },
121
- dependabot: { listAlertsForRepo: mockListAlerts }
122
- });
123
- vi.mocked(fetchOpenSSFScore).mockResolvedValue(null);
124
- const result = await executeGetHealthScore({ owner: 'test', repo: 'repo' });
125
- const parsedText = JSON.parse(result.content[0].text);
126
- expect(parsedText.breakdown.security.detail).not.toContain('OpenSSF');
127
- expect(parsedText.breakdown.security.score).toBe(100);
128
- });
129
- });
130
- //# sourceMappingURL=get-health-score.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-health-score.test.js","sourceRoot":"","sources":["../../src/tools/get-health-score.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=get-repo-health.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-repo-health.test.d.ts","sourceRoot":"","sources":["../../src/tools/get-repo-health.test.ts"],"names":[],"mappings":""}
@@ -1,80 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { getOctokit } from '../github/client.js';
3
- import { executeGetRepoHealth } from './get-repo-health.js';
4
- // Mock intero modulo
5
- vi.mock('../github/client.js');
6
- describe('executeGetRepoHealth', () => {
7
- beforeEach(() => {
8
- vi.resetAllMocks(); // pulisci mock tra un test e l'altro
9
- });
10
- it('should return repo data for valid repo', async () => {
11
- // 1. Configura mock: getOctokit() ritorna oggetto con repos.get()
12
- const mockReposGet = vi.fn().mockResolvedValue({
13
- data: {
14
- full_name: 'test/repo',
15
- description: 'test description',
16
- stargazers_count: 100,
17
- open_issues_count: 5,
18
- language: 'TypeScript',
19
- license: { spdx_id: 'MIT' },
20
- pushed_at: '2023-10-01T00:00:00Z',
21
- default_branch: 'main',
22
- archived: false,
23
- forks_count: 10
24
- }
25
- });
26
- vi.mocked(getOctokit).mockReturnValue({
27
- repos: { get: mockReposGet }
28
- });
29
- // 2. Chiama il tool
30
- const result = await executeGetRepoHealth({ owner: 'test', repo: 'repo' });
31
- // 3. Verifica output
32
- expect(mockReposGet).toHaveBeenCalledWith({ owner: 'test', repo: 'repo' });
33
- expect(result.content).toHaveLength(1);
34
- expect(result.content[0].type).toBe('text');
35
- const parsedText = JSON.parse(result.content[0].text);
36
- expect(parsedText).toEqual({
37
- full_name: 'test/repo',
38
- description: 'test description',
39
- stargazers_count: 100,
40
- open_issues_count: 5,
41
- language: 'TypeScript',
42
- license: 'MIT',
43
- pushed_at: '2023-10-01T00:00:00Z',
44
- default_branch: 'main',
45
- archived: false,
46
- forks_count: 10
47
- });
48
- });
49
- it('should handle 404 for non-existent repo', async () => {
50
- // 1. Configura mock: repos.get() lancia errore con status 404
51
- const notFoundError = new Error('Not Found');
52
- notFoundError.status = 404;
53
- const mockReposGet = vi.fn().mockRejectedValue(notFoundError);
54
- vi.mocked(getOctokit).mockReturnValue({
55
- repos: { get: mockReposGet }
56
- });
57
- // 2. Chiama il tool
58
- const result = await executeGetRepoHealth({ owner: 'test', repo: 'not-found' });
59
- // 3. Verifica che ritorna messaggio errore, non throw
60
- expect(result.content).toHaveLength(1);
61
- expect(result.content[0].type).toBe('text');
62
- const parsedText = JSON.parse(result.content[0].text);
63
- expect(parsedText).toEqual({
64
- error: "Repository not found",
65
- details: "Not Found"
66
- });
67
- });
68
- it('should throw error for non-404 errors', async () => {
69
- const serverError = new Error('Internal Server Error');
70
- serverError.status = 500;
71
- const mockReposGet = vi.fn().mockRejectedValue(serverError);
72
- vi.mocked(getOctokit).mockReturnValue({
73
- repos: { get: mockReposGet }
74
- });
75
- await expect(executeGetRepoHealth({ owner: 'test', repo: 'error-repo' }))
76
- .rejects
77
- .toThrow('Internal Server Error');
78
- });
79
- });
80
- //# sourceMappingURL=get-repo-health.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-repo-health.test.js","sourceRoot":"","sources":["../../src/tools/get-repo-health.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- declare const _default: import("vite").UserConfig;
2
- export default _default;
3
- //# sourceMappingURL=vitest.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../src/vitest.config.ts"],"names":[],"mappings":";AAEA,wBAIG"}
@@ -1,7 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
- export default defineConfig({
3
- test: {
4
- globals: true,
5
- },
6
- });
7
- //# sourceMappingURL=vitest.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../src/vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,eAAe,YAAY,CAAC;IACxB,IAAI,EAAE;QACF,OAAO,EAAE,IAAI;KAChB;CACJ,CAAC,CAAC"}