1326045b25
Prüft videoinput-Geräte beim Öffnen des Foto-Modals und zeigt eine klare Meldung statt leerem Kamera-UI; getUserMedia-Fehler differenziert. Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
import {
|
|
cameraErrorKeyFromDomException,
|
|
isCameraApiSupported,
|
|
probeCameraAvailability
|
|
} from './cameraAvailability.js'
|
|
|
|
describe('cameraAvailability', () => {
|
|
it('detects missing camera API', () => {
|
|
const nav = { mediaDevices: undefined }
|
|
vi.stubGlobal('navigator', nav)
|
|
expect(isCameraApiSupported()).toBe(false)
|
|
vi.unstubAllGlobals()
|
|
})
|
|
|
|
it('returns none when no videoinput devices', async () => {
|
|
vi.stubGlobal('navigator', {
|
|
mediaDevices: {
|
|
getUserMedia: vi.fn(),
|
|
enumerateDevices: vi.fn().mockResolvedValue([
|
|
{ kind: 'audioinput', deviceId: 'a1', label: '', groupId: '' }
|
|
])
|
|
}
|
|
})
|
|
await expect(probeCameraAvailability()).resolves.toBe('none')
|
|
vi.unstubAllGlobals()
|
|
})
|
|
|
|
it('returns available when a videoinput exists', async () => {
|
|
vi.stubGlobal('navigator', {
|
|
mediaDevices: {
|
|
getUserMedia: vi.fn(),
|
|
enumerateDevices: vi.fn().mockResolvedValue([
|
|
{ kind: 'videoinput', deviceId: 'v1', label: '', groupId: '' }
|
|
])
|
|
}
|
|
})
|
|
await expect(probeCameraAvailability()).resolves.toBe('available')
|
|
vi.unstubAllGlobals()
|
|
})
|
|
|
|
it('maps NotFoundError to no-camera i18n key', () => {
|
|
expect(cameraErrorKeyFromDomException(new DOMException('', 'NotFoundError'))).toBe(
|
|
'logs.live_photo_no_camera'
|
|
)
|
|
})
|
|
})
|