@applicaster/zapp-react-native-ui-components
Version:
Applicaster Zapp React Native ui components for the Quick Brick App
73 lines (60 loc) • 2.25 kB
JavaScript
import * as React from "react";
import { renderHook } from "@testing-library/react-hooks";
import {
ViewportEvents,
useViewportEventsContext,
ViewportEventContext,
} from "../index";
const event = {
foo: "bar",
};
const viewportEventsManager = new ViewportEvents(true);
describe("ViewportEvents", () => {
describe("viewportEventsManager", () => {
const listener = jest.fn();
beforeEach(() => {
listener.mockClear();
viewportEventsManager.removeListener(listener);
});
it("is initialized properly", () => {
expect(viewportEventsManager).toHaveProperty("listeners", []);
expect(viewportEventsManager).toHaveProperty("lastEvent", null);
expect(viewportEventsManager).toHaveProperty("firesLastEventOnAdd", true);
});
it("allows to add event listeners", () => {
viewportEventsManager.addListener(listener);
expect(viewportEventsManager).toHaveProperty("listeners", [listener]);
});
it("allows to remove event listeners", () => {
viewportEventsManager.addListener(listener);
viewportEventsManager.removeListener(listener);
expect(viewportEventsManager).toHaveProperty("listeners", []);
});
it("calls the listeners when notifying with an event", () => {
viewportEventsManager.addListener(listener);
viewportEventsManager.notify(event);
expect(listener).toHaveBeenCalledWith(event);
});
it("it calls the listener with the last recorded event when adding a new lister", () => {
const listener2 = jest.fn();
const lastEvent = { lastEvent: true };
viewportEventsManager.notify(lastEvent);
viewportEventsManager.addListener(listener2);
expect(listener2).toHaveBeenCalledWith(lastEvent);
});
});
});
describe("useViewportEventsContext", () => {
it("returns the context", () => {
// eslint-disable-next-line react/prop-types
const wrapper = ({ children }) => (
<ViewportEventContext.Provider value={viewportEventsManager}>
{children}
</ViewportEventContext.Provider>
);
const { result } = renderHook(() => useViewportEventsContext(), {
wrapper,
});
expect(result).toHaveProperty("current", viewportEventsManager);
});
});