File size: 3,712 Bytes
07af8f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import { getMcpSettingsJson } from '../../src/controllers/configController.js'
import * as config from '../../src/config/index.js'
import { Request, Response } from 'express'

// Mock the config module
jest.mock('../../src/config/index.js')

describe('ConfigController - getMcpSettingsJson', () => {
  let mockRequest: Partial<Request>
  let mockResponse: Partial<Response>
  let mockJson: jest.Mock
  let mockStatus: jest.Mock

  beforeEach(() => {
    mockJson = jest.fn()
    mockStatus = jest.fn().mockReturnThis()
    mockRequest = {
      query: {},
    }
    mockResponse = {
      json: mockJson,
      status: mockStatus,
    }

    // Reset mocks
    jest.clearAllMocks()
  })

  describe('Full Settings Export', () => {
    it('should handle settings without users array', () => {
      const mockSettings = {
        mcpServers: {
          'test-server': {
            command: 'test',
            args: ['--test'],
          },
        },
      }

      ;(config.loadOriginalSettings as jest.Mock).mockReturnValue(mockSettings)

      getMcpSettingsJson(mockRequest as Request, mockResponse as Response)

      expect(mockJson).toHaveBeenCalledWith({
        success: true,
        data: {
          mcpServers: mockSettings.mcpServers,
          users: undefined,
        },
      })
    })
  })

  describe('Individual Server Export', () => {
    it('should return individual server configuration when serverName is specified', () => {
      const mockSettings = {
        mcpServers: {
          'test-server': {
            command: 'test',
            args: ['--test'],
            env: {
              TEST_VAR: 'test-value',
            },
          },
          'another-server': {
            command: 'another',
            args: ['--another'],
          },
        },
        users: [
          {
            username: 'admin',
            password: '$2b$10$hashedpassword',
            isAdmin: true,
          },
        ],
      }

      mockRequest.query = { serverName: 'test-server' }
      ;(config.loadOriginalSettings as jest.Mock).mockReturnValue(mockSettings)

      getMcpSettingsJson(mockRequest as Request, mockResponse as Response)

      expect(mockJson).toHaveBeenCalledWith({
        success: true,
        data: {
          mcpServers: {
            'test-server': {
              command: 'test',
              args: ['--test'],
              env: {
                TEST_VAR: 'test-value',
              },
            },
          },
        },
      })
    })

    it('should return 404 when server does not exist', () => {
      const mockSettings = {
        mcpServers: {
          'test-server': {
            command: 'test',
            args: ['--test'],
          },
        },
      }

      mockRequest.query = { serverName: 'non-existent-server' }
      ;(config.loadOriginalSettings as jest.Mock).mockReturnValue(mockSettings)

      getMcpSettingsJson(mockRequest as Request, mockResponse as Response)

      expect(mockStatus).toHaveBeenCalledWith(404)
      expect(mockJson).toHaveBeenCalledWith({
        success: false,
        message: "Server 'non-existent-server' not found",
      })
    })
  })

  describe('Error Handling', () => {
    it('should handle errors gracefully and return 500', () => {
      const errorMessage = 'Failed to load settings'
      ;(config.loadOriginalSettings as jest.Mock).mockImplementation(() => {
        throw new Error(errorMessage)
      })

      getMcpSettingsJson(mockRequest as Request, mockResponse as Response)

      expect(mockStatus).toHaveBeenCalledWith(500)
      expect(mockJson).toHaveBeenCalledWith({
        success: false,
        message: 'Failed to get MCP settings',
      })
    })
  })
})