Add comprehensive test coverage for services and utilities
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* Haptics utility tests
|
||||
*/
|
||||
|
||||
import { describe, it, expect, beforeEach, vi } from "vitest";
|
||||
import { haptic, haptics } from "./haptics";
|
||||
|
||||
describe("haptics utility", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
// Mock navigator.vibrate
|
||||
Object.defineProperty(global.navigator, "vibrate", {
|
||||
value: vi.fn(),
|
||||
configurable: true,
|
||||
});
|
||||
});
|
||||
|
||||
describe("haptic function", () => {
|
||||
it("should trigger vibration with light style", () => {
|
||||
haptic("light");
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(10);
|
||||
});
|
||||
|
||||
it("should trigger vibration with medium style", () => {
|
||||
haptic("medium");
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(20);
|
||||
});
|
||||
|
||||
it("should trigger vibration with heavy style", () => {
|
||||
haptic("heavy");
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(40);
|
||||
});
|
||||
|
||||
it("should trigger vibration with success style", () => {
|
||||
haptic("success");
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith([10, 50, 10]);
|
||||
});
|
||||
|
||||
it("should trigger vibration with warning style", () => {
|
||||
haptic("warning");
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith([20, 100, 20, 100, 20]);
|
||||
});
|
||||
|
||||
it("should trigger vibration with error style", () => {
|
||||
haptic("error");
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(50);
|
||||
});
|
||||
|
||||
it("should use medium style by default", () => {
|
||||
haptic();
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(20);
|
||||
});
|
||||
|
||||
it("should handle missing vibration API gracefully", () => {
|
||||
Object.defineProperty(global.navigator, "vibrate", {
|
||||
value: undefined,
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
expect(() => haptic()).not.toThrow();
|
||||
});
|
||||
|
||||
it("should handle vibration errors gracefully", () => {
|
||||
Object.defineProperty(global.navigator, "vibrate", {
|
||||
value: vi.fn(() => {
|
||||
throw new Error("Vibration blocked");
|
||||
}),
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
expect(() => haptic()).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
describe("haptics object", () => {
|
||||
it("should provide tap method", () => {
|
||||
haptics.tap();
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(10);
|
||||
});
|
||||
|
||||
it("should provide select method", () => {
|
||||
haptics.select();
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(20);
|
||||
});
|
||||
|
||||
it("should provide success method", () => {
|
||||
haptics.success();
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith([10, 50, 10]);
|
||||
});
|
||||
|
||||
it("should provide warning method", () => {
|
||||
haptics.warning();
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith([20, 100, 20, 100, 20]);
|
||||
});
|
||||
|
||||
it("should provide error method", () => {
|
||||
haptics.error();
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(50);
|
||||
});
|
||||
|
||||
it("should provide impact method", () => {
|
||||
haptics.impact();
|
||||
expect(navigator.vibrate).toHaveBeenCalledWith(40);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user