import { renderHook } from "@testing-library/react" import { describe, it, expect } from "vitest" import { useChangeAnimation } from "./useChangeAnimation" describe("useChangeAnimation", () => { it("should return default animation class when value changes", () => { const { result, rerender } = renderHook( ({ value }) => useChangeAnimation({ value }), { initialProps: { value: 10 }, }, ) rerender({ value: 20 }) expect(result.current.animationClassName).toContain( "animate-change-animation-bg", ) expect(result.current.rerenderKey).toBe("20.00") }) it("should not return any animation class when raw value does not change formatted value", () => { const { result, rerender } = renderHook( ({ value }) => useChangeAnimation({ value, display: "compact" }), { initialProps: { value: 10.45 }, }, ) rerender({ value: 10.4532 }) expect(result.current.animationClassName).toContain("") expect(result.current.rerenderKey).toBe("10.45") }) it("should return positive change animation class when value increases", () => { const { result, rerender } = renderHook( ({ value }) => useChangeAnimation({ value, onPositiveChangeAnimationClassName: "animate-positive", }), { initialProps: { value: 10 }, }, ) rerender({ value: 20 }) expect(result.current.animationClassName).toContain("animate-positive") }) it("should return negative change animation class when value decreases", () => { const { result, rerender } = renderHook( ({ value }) => useChangeAnimation({ value, onNegativeChangeAnimationClassName: "animate-negative", }), { initialProps: { value: 20 }, }, ) rerender({ value: 10 }) expect(result.current.animationClassName).toContain("animate-negative") }) it("should not return any animation class when value does not change", () => { const { result, rerender } = renderHook( ({ value }) => useChangeAnimation({ value }), { initialProps: { value: 20 }, }, ) rerender({ value: 20 }) expect(result.current.animationClassName).toBe("") }) it("should handle undefined or null values gracefully", () => { const { result, rerender } = renderHook( ({ value }) => useChangeAnimation({ value, onPositiveChangeAnimationClassName: "animate-positive", onNegativeChangeAnimationClassName: "animate-negative", }), { initialProps: { value: undefined }, }, ) rerender({ value: undefined }) expect(result.current.animationClassName).toBe("") }) })