1
- import { createProjectOrFolderTool } from '../../src/tools/testmanagement' ;
1
+ import {
2
+ createProjectOrFolderTool ,
3
+ createTestCaseTool ,
4
+ createTestRunTool ,
5
+ addTestResultTool ,
6
+ listTestRunsTool ,
7
+ updateTestRunTool
8
+ } from '../../src/tools/testmanagement' ;
9
+ import addTestManagementTools from '../../src/tools/testmanagement' ;
2
10
import { createProjectOrFolder } from '../../src/tools/testmanagement-utils/create-project-folder' ;
3
- import { createTestCaseTool , createTestRunTool } from '../../src/tools/testmanagement' ;
4
11
import { createTestCase , sanitizeArgs , TestCaseCreateRequest } from '../../src/tools/testmanagement-utils/create-testcase' ;
5
- import addTestManagementTools from '../../src/tools/testmanagement' ;
6
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js" ;
7
- import axios from 'axios' ;
8
12
import { listTestCases } from '../../src/tools/testmanagement-utils/list-testcases' ;
9
13
import { createTestRun } from '../../src/tools/testmanagement-utils/create-testrun' ;
10
-
14
+ import { addTestResult } from '../../src/tools/testmanagement-utils/add-test-result' ;
15
+ import { listTestRuns } from '../../src/tools/testmanagement-utils/list-testruns' ;
16
+ import { updateTestRun } from '../../src/tools/testmanagement-utils/update-testrun' ;
17
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js" ;
18
+ import axios from 'axios' ;
11
19
12
20
// Mock dependencies
13
21
jest . mock ( '../../src/tools/testmanagement-utils/create-project-folder' , ( ) => ( {
@@ -21,7 +29,7 @@ jest.mock('../../src/tools/testmanagement-utils/create-testcase', () => ({
21
29
createTestCase : jest . fn ( ) ,
22
30
sanitizeArgs : jest . fn ( ( args ) => args ) ,
23
31
CreateTestCaseSchema : {
24
- shape : { } ,
32
+ shape : { } ,
25
33
} ,
26
34
} ) ) ;
27
35
jest . mock ( '../../src/config' , ( ) => ( {
@@ -31,11 +39,18 @@ jest.mock('../../src/config', () => ({
31
39
browserstackAccessKey : 'fake-key' ,
32
40
} ,
33
41
} ) ) ;
34
-
35
42
jest . mock ( '../../src/lib/instrumentation' , ( ) => ( {
36
43
trackMCP : jest . fn ( )
37
44
} ) ) ;
38
45
46
+ jest . mock ( '../../src/tools/testmanagement-utils/add-test-result' , ( ) => ( {
47
+ addTestResult : jest . fn ( ) ,
48
+ AddTestResultSchema : {
49
+ parse : ( args : any ) => args ,
50
+ shape : { } ,
51
+ } ,
52
+ } ) ) ;
53
+
39
54
const mockServer = {
40
55
tool : jest . fn ( ) ,
41
56
server : {
@@ -57,6 +72,23 @@ jest.mock('../../src/tools/testmanagement-utils/create-testrun', () => ({
57
72
} ) ) ;
58
73
jest . mock ( 'axios' ) ;
59
74
75
+
76
+ jest . mock ( '../../src/tools/testmanagement-utils/list-testruns' , ( ) => ( {
77
+ listTestRuns : jest . fn ( ) ,
78
+ ListTestRunsSchema : {
79
+ parse : ( args : any ) => args ,
80
+ shape : { } ,
81
+ } ,
82
+ } ) ) ;
83
+ jest . mock ( '../../src/tools/testmanagement-utils/update-testrun' , ( ) => ( {
84
+ updateTestRun : jest . fn ( ) ,
85
+ UpdateTestRunSchema : {
86
+ parse : ( args : any ) => args ,
87
+ shape : { } ,
88
+ } ,
89
+ } ) ) ;
90
+
91
+
60
92
const mockedAxios = axios as jest . Mocked < typeof axios > ;
61
93
62
94
describe ( 'createTestCaseTool' , ( ) => {
@@ -264,28 +296,6 @@ describe('createTestRunTool', () => {
264
296
} ) ;
265
297
} ) ;
266
298
267
- //
268
- // New tests for listTestRunsTool & updateTestRunTool
269
- //
270
-
271
- import { listTestRunsTool , updateTestRunTool } from '../../src/tools/testmanagement' ;
272
- import { listTestRuns } from '../../src/tools/testmanagement-utils/list-testruns' ;
273
- import { updateTestRun } from '../../src/tools/testmanagement-utils/update-testrun' ;
274
-
275
- jest . mock ( '../../src/tools/testmanagement-utils/list-testruns' , ( ) => ( {
276
- listTestRuns : jest . fn ( ) ,
277
- ListTestRunsSchema : {
278
- parse : ( args : any ) => args ,
279
- shape : { } ,
280
- } ,
281
- } ) ) ;
282
- jest . mock ( '../../src/tools/testmanagement-utils/update-testrun' , ( ) => ( {
283
- updateTestRun : jest . fn ( ) ,
284
- UpdateTestRunSchema : {
285
- parse : ( args : any ) => args ,
286
- shape : { } ,
287
- } ,
288
- } ) ) ;
289
299
290
300
describe ( 'listTestRunsTool' , ( ) => {
291
301
beforeEach ( ( ) => {
@@ -357,3 +367,56 @@ describe('updateTestRunTool', () => {
357
367
expect ( result . content [ 0 ] . text ) . toContain ( 'Failed to update test run: API Error' ) ;
358
368
} ) ;
359
369
} ) ;
370
+
371
+
372
+
373
+ describe ( 'addTestResultTool' , ( ) => {
374
+ beforeEach ( ( ) => {
375
+ jest . clearAllMocks ( ) ;
376
+ } ) ;
377
+
378
+ const validArgs = {
379
+ project_identifier : 'proj-123' ,
380
+ test_run_id : 'run-456' ,
381
+ test_result : {
382
+ status : 'passed' ,
383
+ description : 'All good' ,
384
+ issues : [ 'ISSUE-1' ] ,
385
+ issue_tracker : { name : 'jira' , host : 'https://jira.example.com' } ,
386
+ custom_fields : { priority : 'high' } ,
387
+ } ,
388
+ test_case_id : 'TC-1' ,
389
+ } ;
390
+
391
+ const successAddResult = {
392
+ content : [ { type : 'text' , text : 'Successfully added test result to test run run-456' } ] ,
393
+ isError : false ,
394
+ } ;
395
+
396
+ it ( 'should successfully add a test result' , async ( ) => {
397
+ ( addTestResult as jest . Mock ) . mockResolvedValue ( successAddResult ) ;
398
+
399
+ const result = await addTestResultTool ( validArgs as any ) ;
400
+
401
+ expect ( addTestResult ) . toHaveBeenCalledWith ( validArgs ) ;
402
+ expect ( result ) . toBe ( successAddResult ) ;
403
+ } ) ;
404
+
405
+ it ( 'should handle API errors gracefully' , async ( ) => {
406
+ ( addTestResult as jest . Mock ) . mockRejectedValue ( new Error ( 'Network Error' ) ) ;
407
+
408
+ const result = await addTestResultTool ( validArgs as any ) ;
409
+
410
+ expect ( result . isError ) . toBe ( true ) ;
411
+ expect ( result . content [ 0 ] . text ) . toContain ( 'Failed to add test result: Network Error' ) ;
412
+ } ) ;
413
+
414
+ it ( 'should handle unknown errors gracefully' , async ( ) => {
415
+ ( addTestResult as jest . Mock ) . mockRejectedValue ( 'unexpected' ) ;
416
+
417
+ const result = await addTestResultTool ( validArgs as any ) ;
418
+
419
+ expect ( result . isError ) . toBe ( true ) ;
420
+ expect ( result . content [ 0 ] . text ) . toContain ( 'Unknown error' ) ;
421
+ } ) ;
422
+ } ) ;
0 commit comments