UNPKG

@rocketmakers/api-swr

Version:

Rocketmakers front-end library for parsing a generated Typescript API client into a set of configurable React hooks for fetching and mutating data.

72 lines (71 loc) 3.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const react_1 = require("@testing-library/react"); const React = tslib_1.__importStar(require("react")); const test_utils_1 = require("react-dom/test-utils"); const useContentMemo_1 = require("./useContentMemo"); describe('useContentMemo', () => { it('should return the same item reference for a primitive value when used', () => { const value = 42; const { result } = (0, react_1.renderHook)(() => (0, useContentMemo_1.useContentMemo)(value)); expect(result.current).toBe(value); }); it("should return the same reference for an array if the content hasn't changed, regardless of order when used", () => { const arr1 = [1, 2, 3]; const arr2 = [2, 1, 3]; const { result } = (0, react_1.renderHook)(() => { const [val, setVal] = React.useState(arr1); const returnVal = (0, useContentMemo_1.useContentMemo)(val); return { returnVal, setVal }; }); (0, test_utils_1.act)(() => result.current.setVal(arr2)); expect(result.current.returnVal).toBe(arr1); }); it("should return the same reference for an object if the content hasn't changed, regardless of key order when used", () => { const ob1 = { arr: [1, 2, 3], str: 'hello', bool: false }; const ob2 = { str: 'hello', arr: [1, 2, 3], bool: false }; const { result } = (0, react_1.renderHook)(() => { const [val, setVal] = React.useState(ob1); const returnVal = (0, useContentMemo_1.useContentMemo)(val); return { returnVal, setVal }; }); (0, test_utils_1.act)(() => result.current.setVal(ob2)); expect(result.current.returnVal).toBe(ob1); }); it('should return a new reference for an array if the content has changed when used', () => { const arr1 = [1, 2, 3]; const arr2 = [2, 1, 5]; const { result } = (0, react_1.renderHook)(() => { const [val, setVal] = React.useState(arr1); const returnVal = (0, useContentMemo_1.useContentMemo)(val); return { returnVal, setVal }; }); (0, test_utils_1.act)(() => result.current.setVal(arr2)); expect(result.current.returnVal).toBe(arr2); }); it('should return a new reference for an object if the content has changed when used', () => { const ob1 = { arr: [1, 2, 3], str: 'hello', bool: false }; const ob2 = { str: 'changed', arr: [1, 2, 3], bool: false }; const { result } = (0, react_1.renderHook)(() => { const [val, setVal] = React.useState(ob1); const returnVal = (0, useContentMemo_1.useContentMemo)(val); return { returnVal, setVal }; }); (0, test_utils_1.act)(() => result.current.setVal(ob2)); expect(result.current.returnVal).toBe(ob2); }); it('should return the same function reference when used', () => { const func = () => 'hello'; const { result } = (0, react_1.renderHook)(() => (0, useContentMemo_1.useContentMemo)(func)); expect(result.current).toBe(func); }); it('should return null if the input is null when used', () => { const { result } = (0, react_1.renderHook)(() => (0, useContentMemo_1.useContentMemo)(null)); expect(result.current).toBeNull(); }); it('should return undefined if the input is undefined when used', () => { const { result } = (0, react_1.renderHook)(() => (0, useContentMemo_1.useContentMemo)(undefined)); expect(result.current).toBeUndefined(); }); });