120 lines
2.8 KiB
TypeScript
120 lines
2.8 KiB
TypeScript
/**
|
|
* @vitest-environment jsdom
|
|
*/
|
|
import { act, renderHook } from "@testing-library/react";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { useIosHardwareKeyboardSubmit } from "./use-ios-hardware-keyboard-submit";
|
|
import {
|
|
emitHardwareKeyboardSubmitForTest,
|
|
resetHardwareKeyboardSubmitForTest,
|
|
getHardwareKeyboardSubmitEnabledForTest,
|
|
setHardwareKeyboardSubmitEnabled,
|
|
} from "@/native/ios-hardware-keyboard-submit";
|
|
|
|
describe("useIosHardwareKeyboardSubmit", () => {
|
|
beforeEach(() => {
|
|
resetHardwareKeyboardSubmitForTest();
|
|
});
|
|
|
|
it("submits when the focused composer receives a hardware keyboard submit event", () => {
|
|
const onSubmit = vi.fn();
|
|
|
|
renderHook(() =>
|
|
useIosHardwareKeyboardSubmit({
|
|
isEnabled: true,
|
|
onSubmit,
|
|
}),
|
|
);
|
|
|
|
act(() => {
|
|
emitHardwareKeyboardSubmitForTest();
|
|
});
|
|
|
|
expect(onSubmit).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("does not submit when the composer is blurred", () => {
|
|
const onSubmit = vi.fn();
|
|
|
|
renderHook(() =>
|
|
useIosHardwareKeyboardSubmit({
|
|
isEnabled: false,
|
|
onSubmit,
|
|
}),
|
|
);
|
|
|
|
act(() => {
|
|
emitHardwareKeyboardSubmitForTest();
|
|
});
|
|
|
|
expect(onSubmit).not.toHaveBeenCalled();
|
|
expect(getHardwareKeyboardSubmitEnabledForTest()).toBe(false);
|
|
});
|
|
|
|
it("does not submit while the default send action is disabled", () => {
|
|
const onSubmit = vi.fn();
|
|
|
|
renderHook(() =>
|
|
useIosHardwareKeyboardSubmit({
|
|
isEnabled: false,
|
|
onSubmit,
|
|
}),
|
|
);
|
|
|
|
act(() => {
|
|
emitHardwareKeyboardSubmitForTest();
|
|
});
|
|
|
|
expect(onSubmit).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("does not disable native hardware submit when mounted disabled", () => {
|
|
setHardwareKeyboardSubmitEnabled(true);
|
|
|
|
renderHook(() =>
|
|
useIosHardwareKeyboardSubmit({
|
|
isEnabled: false,
|
|
onSubmit: vi.fn(),
|
|
}),
|
|
);
|
|
|
|
expect(getHardwareKeyboardSubmitEnabledForTest()).toBe(true);
|
|
});
|
|
|
|
it("disables native hardware submit when focus moves away", () => {
|
|
const onSubmit = vi.fn();
|
|
const { rerender } = renderHook(
|
|
({ isEnabled }) =>
|
|
useIosHardwareKeyboardSubmit({
|
|
isEnabled,
|
|
onSubmit,
|
|
}),
|
|
{ initialProps: { isEnabled: true } },
|
|
);
|
|
|
|
expect(getHardwareKeyboardSubmitEnabledForTest()).toBe(true);
|
|
|
|
rerender({ isEnabled: false });
|
|
|
|
expect(getHardwareKeyboardSubmitEnabledForTest()).toBe(false);
|
|
});
|
|
|
|
it("unsubscribes on unmount", () => {
|
|
const onSubmit = vi.fn();
|
|
const { unmount } = renderHook(() =>
|
|
useIosHardwareKeyboardSubmit({
|
|
isEnabled: true,
|
|
onSubmit,
|
|
}),
|
|
);
|
|
|
|
unmount();
|
|
|
|
act(() => {
|
|
emitHardwareKeyboardSubmitForTest();
|
|
});
|
|
|
|
expect(onSubmit).not.toHaveBeenCalled();
|
|
});
|
|
});
|