camera.spec.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. import { describe, it, expect, vi, beforeEach } from 'vitest'
  2. import {
  3. listCameras,
  4. getCamera,
  5. switchChannel,
  6. getCurrentChannel,
  7. ptzControl,
  8. adminListCameras,
  9. adminGetCamera,
  10. adminAddCamera,
  11. adminUpdateCamera,
  12. adminDeleteCamera,
  13. adminCheckCamera,
  14. type PTZControlRequest
  15. } from '@/api/camera'
  16. import * as request from '@/utils/request'
  17. import { mockCameras, mockChannels, wrapResponse } from '../../fixtures'
  18. vi.mock('@/utils/request', () => ({
  19. get: vi.fn(),
  20. post: vi.fn()
  21. }))
  22. describe('Camera API', () => {
  23. beforeEach(() => {
  24. vi.clearAllMocks()
  25. })
  26. describe('Controller APIs', () => {
  27. describe('listCameras', () => {
  28. it('should call POST /camera/list', async () => {
  29. const mockResponse = wrapResponse(mockCameras)
  30. vi.mocked(request.post).mockResolvedValue(mockResponse)
  31. const result = await listCameras()
  32. expect(request.post).toHaveBeenCalledWith('/camera/list', {})
  33. expect(result.data).toHaveLength(mockCameras.length)
  34. })
  35. it('should call with machineId filter', async () => {
  36. vi.mocked(request.post).mockResolvedValue(wrapResponse([]))
  37. await listCameras({ machineId: 'machine-001' })
  38. expect(request.post).toHaveBeenCalledWith('/camera/list', { machineId: 'machine-001' })
  39. })
  40. })
  41. describe('getCamera', () => {
  42. it('should call GET /cameras/:id', async () => {
  43. const camera = mockCameras[0]
  44. const mockResponse = wrapResponse(camera)
  45. vi.mocked(request.get).mockResolvedValue(mockResponse)
  46. const result = await getCamera({ cameraId: camera.cameraId })
  47. expect(request.get).toHaveBeenCalledWith(`/cameras/${camera.cameraId}`)
  48. expect(result.data.cameraId).toBe(camera.cameraId)
  49. })
  50. })
  51. describe('switchChannel', () => {
  52. it('should call POST /camera/switch', async () => {
  53. const channel = mockChannels[0]
  54. const mockResponse = wrapResponse(channel)
  55. vi.mocked(request.post).mockResolvedValue(mockResponse)
  56. const data = { machineId: 'machine-001', channelId: channel.channelId }
  57. const result = await switchChannel(data)
  58. expect(request.post).toHaveBeenCalledWith('/camera/switch', data)
  59. expect(result.data.channelId).toBe(channel.channelId)
  60. })
  61. })
  62. describe('getCurrentChannel', () => {
  63. it('should call GET /camera/current', async () => {
  64. const channel = mockChannels[0]
  65. const mockResponse = wrapResponse(channel)
  66. vi.mocked(request.get).mockResolvedValue(mockResponse)
  67. const data = { machineId: 'machine-001' }
  68. const result = await getCurrentChannel(data)
  69. expect(request.get).toHaveBeenCalledWith('/camera/current', data)
  70. expect(result.data.channelId).toBe(channel.channelId)
  71. })
  72. })
  73. describe('ptzControl', () => {
  74. it('should call POST /camera/ptz/control', async () => {
  75. const mockResponse = wrapResponse(null)
  76. vi.mocked(request.post).mockResolvedValue(mockResponse)
  77. const data: PTZControlRequest = { cameraId: 'cam-001', action: 'up', speed: 50 }
  78. await ptzControl(data)
  79. expect(request.post).toHaveBeenCalledWith('/camera/ptz/control', data)
  80. })
  81. })
  82. })
  83. describe('Admin APIs', () => {
  84. describe('adminListCameras', () => {
  85. it('should call POST /admin/cameras/list', async () => {
  86. const mockResponse = wrapResponse({
  87. list: mockCameras,
  88. total: mockCameras.length,
  89. page: 1,
  90. size: 20,
  91. totalPages: 1,
  92. hasNext: false,
  93. hasPrevious: false
  94. })
  95. vi.mocked(request.post).mockResolvedValue(mockResponse)
  96. const result = await adminListCameras()
  97. expect(request.post).toHaveBeenCalledWith('/admin/cameras/list', {})
  98. expect(result.data.list).toHaveLength(mockCameras.length)
  99. })
  100. })
  101. describe('adminGetCamera', () => {
  102. it('should call GET /admin/cameras/detail', async () => {
  103. const camera = mockCameras[0]
  104. const mockResponse = wrapResponse(camera)
  105. vi.mocked(request.get).mockResolvedValue(mockResponse)
  106. const data = { id: camera.id }
  107. const result = await adminGetCamera(data)
  108. expect(request.get).toHaveBeenCalledWith('/admin/cameras/detail', data)
  109. expect(result.data.id).toBe(camera.id)
  110. })
  111. })
  112. describe('adminAddCamera', () => {
  113. it('should call POST /admin/cameras/add', async () => {
  114. const newCamera = { ...mockCameras[0], id: 100, cameraId: 'cam-new' }
  115. const mockResponse = wrapResponse(newCamera)
  116. vi.mocked(request.post).mockResolvedValue(mockResponse)
  117. const data = {
  118. cameraId: 'cam-new',
  119. name: '新摄像头',
  120. ip: '192.168.1.100',
  121. port: 80
  122. }
  123. const result = await adminAddCamera(data)
  124. expect(request.post).toHaveBeenCalledWith('/admin/cameras/add', data)
  125. expect(result.data.cameraId).toBe('cam-new')
  126. })
  127. })
  128. describe('adminUpdateCamera', () => {
  129. it('should call POST /admin/cameras/update', async () => {
  130. const updatedCamera = { ...mockCameras[0], name: '更新后名称' }
  131. const mockResponse = wrapResponse(updatedCamera)
  132. vi.mocked(request.post).mockResolvedValue(mockResponse)
  133. const data = { id: mockCameras[0].id, name: '更新后名称' }
  134. const result = await adminUpdateCamera(data)
  135. expect(request.post).toHaveBeenCalledWith('/admin/cameras/update', data)
  136. expect(result.data.name).toBe('更新后名称')
  137. })
  138. })
  139. describe('adminDeleteCamera', () => {
  140. it('should call POST /admin/cameras/delete', async () => {
  141. const mockResponse = wrapResponse(null)
  142. vi.mocked(request.post).mockResolvedValue(mockResponse)
  143. const data = { id: 1 }
  144. await adminDeleteCamera(data)
  145. expect(request.post).toHaveBeenCalledWith('/admin/cameras/delete', undefined, { params: data })
  146. })
  147. })
  148. describe('adminCheckCamera', () => {
  149. it('should call POST /admin/cameras/check', async () => {
  150. const mockResponse = wrapResponse(true)
  151. vi.mocked(request.post).mockResolvedValue(mockResponse)
  152. const data = { id: 1 }
  153. const result = await adminCheckCamera(data)
  154. expect(request.post).toHaveBeenCalledWith('/admin/cameras/check', undefined, { params: data })
  155. expect(result.data).toBe(true)
  156. })
  157. })
  158. })
  159. })