misc: remove misc changes

This commit is contained in:
Marc Diaz
2026-04-29 22:45:41 -04:00
parent 0768c449d7
commit 786165208f
6 changed files with 36 additions and 43 deletions
@@ -2,26 +2,40 @@ import { act, renderHook, waitFor } from "@testing-library/react";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { useCameraDevices } from "./useCameraDevices";
// Mock navigator.mediaDevices
const mockDevices = [
{ kind: "videoinput", deviceId: "cam1", label: "Camera 1", groupId: "group1" },
{ kind: "videoinput", deviceId: "cam2", label: "Camera 2", groupId: "group1" },
{ kind: "audioinput", deviceId: "mic1", label: "Mic 1", groupId: "group2" },
];
const mockGetUserMedia = vi.fn().mockResolvedValue({
getTracks: () => [{ stop: vi.fn() }],
});
const mockEnumerateDevices = vi.fn().mockResolvedValue(mockDevices);
Object.defineProperty(global.navigator, "mediaDevices", {
value: {
enumerateDevices: mockEnumerateDevices,
getUserMedia: mockGetUserMedia,
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
},
configurable: true,
});
describe("useCameraDevices", () => {
beforeEach(() => {
vi.spyOn(navigator.mediaDevices, "enumerateDevices").mockResolvedValue(
mockDevices as MediaDeviceInfo[],
);
vi.spyOn(navigator.mediaDevices, "getUserMedia").mockResolvedValue({
vi.clearAllMocks();
mockEnumerateDevices.mockResolvedValue(mockDevices);
mockGetUserMedia.mockResolvedValue({
getTracks: () => [{ stop: vi.fn() }],
} as unknown as MediaStream);
vi.spyOn(navigator.mediaDevices, "addEventListener");
vi.spyOn(navigator.mediaDevices, "removeEventListener");
});
});
afterEach(() => {
vi.restoreAllMocks();
vi.resetAllMocks();
});
it("should list video input devices", async () => {
@@ -44,9 +58,9 @@ describe("useCameraDevices", () => {
});
it("should use device ID as fallback label when label is missing", async () => {
vi.mocked(navigator.mediaDevices.enumerateDevices).mockResolvedValueOnce([
mockEnumerateDevices.mockResolvedValueOnce([
{ kind: "videoinput", deviceId: "cam1abc123456", label: "", groupId: "group1" },
] as MediaDeviceInfo[]);
]);
const { result } = renderHook(() => useCameraDevices(true));
@@ -54,13 +68,11 @@ describe("useCameraDevices", () => {
expect(result.current.devices[0]?.label).toBe("Camera cam1abc1");
});
expect(navigator.mediaDevices.getUserMedia).not.toHaveBeenCalled();
expect(mockGetUserMedia).not.toHaveBeenCalled();
});
it("should set error state when enumeration fails", async () => {
vi.mocked(navigator.mediaDevices.enumerateDevices).mockRejectedValueOnce(
new Error("Permission denied"),
);
mockEnumerateDevices.mockRejectedValueOnce(new Error("Permission denied"));
const { result } = renderHook(() => useCameraDevices(true));
@@ -79,13 +91,13 @@ describe("useCameraDevices", () => {
expect(result.current.selectedDeviceId).toBe("cam1");
});
// Simulate cam1 being unplugged — only cam2 remains
const cam2Only = [
{ kind: "videoinput", deviceId: "cam2", label: "Camera 2", groupId: "group1" },
];
vi.mocked(navigator.mediaDevices.enumerateDevices).mockResolvedValueOnce(
cam2Only as MediaDeviceInfo[],
);
mockEnumerateDevices.mockResolvedValueOnce(cam2Only);
// Trigger devicechange event via the registered handler
const devicechangeHandler = (
navigator.mediaDevices.addEventListener as ReturnType<typeof vi.fn>
).mock.calls[0]?.[1] as (() => void) | undefined;
@@ -6,7 +6,6 @@ import frDialogs from "@/i18n/locales/fr/dialogs.json";
import koKRDialogs from "@/i18n/locales/ko-KR/dialogs.json";
import trDialogs from "@/i18n/locales/tr/dialogs.json";
import zhCNDialogs from "@/i18n/locales/zh-CN/dialogs.json";
import zhTWDialogs from "@/i18n/locales/zh-TW/dialogs.json";
const tutorialHelpKeys = [
"triggerLabel",
@@ -36,7 +35,6 @@ const keysThatMayBeEmpty = new Set<(typeof tutorialHelpKeys)[number]>(["step1Des
const dialogsByLocale = {
en: enDialogs,
"zh-CN": zhCNDialogs,
"zh-TW": zhTWDialogs,
es: esDialogs,
fr: frDialogs,
tr: trDialogs,
+1 -1
View File
@@ -75,6 +75,6 @@ describe("blur color helpers", () => {
intensity: 12,
blockSize: 12,
}),
).toBe("rgba(0, 0, 0, 0.56)");
).toBe("rgba(0, 0, 0, 0.18)");
});
});
-14
View File
@@ -83,18 +83,4 @@ describe("shouldFailDecodeEndedEarly", () => {
}),
).toBe(true);
});
it("does not fail when decoder reached stream end but container tail is large (inflated metadata)", () => {
// Real case: ~20min video where container reports 1234s but actual stream
// ends at 1226s. Decoder correctly stops at 1226s (= streamDurationSec).
// The 8s tail is container metadata inflation, not a real decode failure.
expect(
shouldFailDecodeEndedEarly({
cancelled: false,
lastDecodedFrameSec: 1226,
requiredEndSec: 1234,
streamDurationSec: 1226,
}),
).toBe(false);
});
});