UNPKG

@data-client/test

Version:
101 lines (100 loc) 14.8 kB
import { SubscriptionManager, NetworkManager, PollingSubscription, Controller } from '@data-client/react'; import React, { memo, Suspense } from 'react'; import { renderHook, act } from './renderHook.cjs'; import { MockController } from '../MockController.js'; import mockInitialState from '../mockState.js'; import { jsx as _jsx } from "react/jsx-runtime"; /** @see https://dataclient.io/docs/api/makeRenderDataHook */ export default function makeRenderDataHook(Provider) { const renderDataClient = (callback, { initialFixtures, resolverFixtures, getInitialInterceptorData = () => ({}), ...options } = {}) => { /** Wraps dispatches that are typically called declaratively in act() */ class ActController extends MockController(Controller, resolverFixtures ? { fixtures: resolverFixtures, getInitialInterceptorData } : {}) { constructor(options) { super(options); const { setResponse, resolve } = this; this.setResponse = (...args) => { let promise; act(() => { promise = setResponse.call(this, ...args); }); return promise; }; this.resolve = (...args) => { let promise; act(() => { promise = resolve.call(this, ...args); }); return promise; }; } } // we want fresh manager state in each instance const nm = new NetworkManager(); const sm = new SubscriptionManager(PollingSubscription); const managers = [nm, sm]; // this pattern is dangerous if renderDataClient is shared between tests // TODO: move to return value renderDataClient.cleanup = () => { nm.cleanupDate = Infinity; Object.values(nm['rejectors']).forEach(rej => { rej(); }); nm['clearAll'](); managers.forEach(manager => manager.cleanup()); }; renderDataClient.allSettled = () => { return nm.allSettled(); }; const initialState = mockInitialState(initialFixtures); const ProviderWithResolver = /*#__PURE__*/memo(function ProviderWithResolver({ children }) { return /*#__PURE__*/_jsx(Provider, { initialState: initialState, Controller: ActController, managers: managers, devButton: null, children: children }); }); const Wrapper = options == null ? void 0 : options.wrapper; const ProviderWithWrapper = Wrapper ? function ProviderWrapped(props) { return /*#__PURE__*/_jsx(ProviderWithResolver, { children: /*#__PURE__*/_jsx(Wrapper, { ...props }) }); } : ProviderWithResolver; const wrapper = ({ children, ...props }) => /*#__PURE__*/_jsx(ProviderWithWrapper, { ...props, children: /*#__PURE__*/_jsx(Suspense, { fallback: null, children: children }) }); const ret = renderHook(callback, { ...options, wrapper }); ret.controller = nm['controller']; return ret; }; renderDataClient.cleanup = () => {}; renderDataClient.allSettled = () => Promise.allSettled([]); return renderDataClient; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdWJzY3JpcHRpb25NYW5hZ2VyIiwiTmV0d29ya01hbmFnZXIiLCJQb2xsaW5nU3Vic2NyaXB0aW9uIiwiQ29udHJvbGxlciIsIlJlYWN0IiwibWVtbyIsIlN1c3BlbnNlIiwicmVuZGVySG9vayIsImFjdCIsIk1vY2tDb250cm9sbGVyIiwibW9ja0luaXRpYWxTdGF0ZSIsImpzeCIsIl9qc3giLCJtYWtlUmVuZGVyRGF0YUhvb2siLCJQcm92aWRlciIsInJlbmRlckRhdGFDbGllbnQiLCJjYWxsYmFjayIsImluaXRpYWxGaXh0dXJlcyIsInJlc29sdmVyRml4dHVyZXMiLCJnZXRJbml0aWFsSW50ZXJjZXB0b3JEYXRhIiwib3B0aW9ucyIsIkFjdENvbnRyb2xsZXIiLCJmaXh0dXJlcyIsImNvbnN0cnVjdG9yIiwic2V0UmVzcG9uc2UiLCJyZXNvbHZlIiwiYXJncyIsInByb21pc2UiLCJjYWxsIiwibm0iLCJzbSIsIm1hbmFnZXJzIiwiY2xlYW51cCIsImNsZWFudXBEYXRlIiwiSW5maW5pdHkiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwicmVqIiwibWFuYWdlciIsImFsbFNldHRsZWQiLCJpbml0aWFsU3RhdGUiLCJQcm92aWRlcldpdGhSZXNvbHZlciIsImNoaWxkcmVuIiwiZGV2QnV0dG9uIiwiV3JhcHBlciIsIndyYXBwZXIiLCJQcm92aWRlcldpdGhXcmFwcGVyIiwiUHJvdmlkZXJXcmFwcGVkIiwicHJvcHMiLCJmYWxsYmFjayIsInJldCIsImNvbnRyb2xsZXIiLCJQcm9taXNlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21ha2VSZW5kZXJEYXRhQ2xpZW50L2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdGF0ZSxcbiAgTWFuYWdlcixcbiAgU3Vic2NyaXB0aW9uTWFuYWdlcixcbiAgTmV0d29ya01hbmFnZXIsXG4gIFBvbGxpbmdTdWJzY3JpcHRpb24sXG4gIENvbnRyb2xsZXIsXG4gIEdlbmVyaWNEaXNwYXRjaCxcbiAgRGF0YUNsaWVudERpc3BhdGNoLFxufSBmcm9tICdAZGF0YS1jbGllbnQvcmVhY3QnO1xuaW1wb3J0IFJlYWN0LCB7IG1lbW8sIFN1c3BlbnNlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge1xuICByZW5kZXJIb29rLFxuICBhY3QsXG4gIFJlbmRlckhvb2tSZXN1bHQsXG4gIHR5cGUgUmVuZGVySG9va09wdGlvbnMsXG59IGZyb20gJy4vcmVuZGVySG9vay5janMnO1xuaW1wb3J0IHsgSW50ZXJjZXB0b3IsIEZpeHR1cmUgfSBmcm9tICcuLi9maXh0dXJlVHlwZXMuanMnO1xuaW1wb3J0IHsgTW9ja0NvbnRyb2xsZXIgfSBmcm9tICcuLi9Nb2NrQ29udHJvbGxlci5qcyc7XG5pbXBvcnQgbW9ja0luaXRpYWxTdGF0ZSBmcm9tICcuLi9tb2NrU3RhdGUuanMnO1xuaW1wb3J0IHsgTW9ja1Byb3BzIH0gZnJvbSAnLi4vbW9ja1R5cGVzLmpzJztcblxuLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL21ha2VSZW5kZXJEYXRhSG9vayAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVJlbmRlckRhdGFIb29rKFxuICBQcm92aWRlcjogUmVhY3QuQ29tcG9uZW50VHlwZTxEYXRhUHJvdmlkZXJQcm9wcz4sXG4pIHtcbiAgY29uc3QgcmVuZGVyRGF0YUNsaWVudDogUmVuZGVyRGF0YUhvb2sgPSAoPFAsIFIsIFQgPSBhbnk+KFxuICAgIGNhbGxiYWNrOiAocHJvcHM6IFApID0+IFIsXG4gICAge1xuICAgICAgaW5pdGlhbEZpeHR1cmVzLFxuICAgICAgcmVzb2x2ZXJGaXh0dXJlcyxcbiAgICAgIGdldEluaXRpYWxJbnRlcmNlcHRvckRhdGEgPSAoKSA9PiAoe30pIGFzIGFueSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9OiB7XG4gICAgICBpbml0aWFsUHJvcHM/OiBQO1xuICAgICAgaW5pdGlhbEZpeHR1cmVzPzogRml4dHVyZVtdO1xuICAgICAgcmVzb2x2ZXJGaXh0dXJlcz86IChGaXh0dXJlIHwgSW50ZXJjZXB0b3I8VD4pW107XG4gICAgICBnZXRJbml0aWFsSW50ZXJjZXB0b3JEYXRhPzogKCkgPT4gVDtcbiAgICAgIHdyYXBwZXI/OiBSZWFjdC5Db21wb25lbnRUeXBlPFJlYWN0LlByb3BzV2l0aENoaWxkcmVuPFA+PjtcbiAgICB9ICYgT21pdDxSZW5kZXJIb29rT3B0aW9uczxQPiwgJ2luaXRpYWxQcm9wcycgfCAnd3JhcHBlcic+ID0ge30gYXMgYW55LFxuICApOiBSZW5kZXJIb29rUmVzdWx0PFIsIFA+ICYgeyBjb250cm9sbGVyOiBDb250cm9sbGVyIH0gPT4ge1xuICAgIC8qKiBXcmFwcyBkaXNwYXRjaGVzIHRoYXQgYXJlIHR5cGljYWxseSBjYWxsZWQgZGVjbGFyYXRpdmVseSBpbiBhY3QoKSAqL1xuICAgIGNsYXNzIEFjdENvbnRyb2xsZXI8XG4gICAgICBEIGV4dGVuZHMgR2VuZXJpY0Rpc3BhdGNoID0gRGF0YUNsaWVudERpc3BhdGNoLFxuICAgICAgVCA9IHt9LFxuICAgID4gZXh0ZW5kcyBNb2NrQ29udHJvbGxlcihcbiAgICAgIENvbnRyb2xsZXIsXG4gICAgICByZXNvbHZlckZpeHR1cmVzID9cbiAgICAgICAge1xuICAgICAgICAgIGZpeHR1cmVzOiByZXNvbHZlckZpeHR1cmVzLFxuICAgICAgICAgIGdldEluaXRpYWxJbnRlcmNlcHRvckRhdGEsXG4gICAgICAgIH1cbiAgICAgIDoge30sXG4gICAgKTxEPiB7XG4gICAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgb3B0aW9uczogTW9ja1Byb3BzPFQ+ICYgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBDb250cm9sbGVyPEQ+PlswXSxcbiAgICAgICkge1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBzZXRSZXNwb25zZSwgcmVzb2x2ZSB9ID0gdGhpcztcbiAgICAgICAgdGhpcy5zZXRSZXNwb25zZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgbGV0IHByb21pc2U6IGFueTtcbiAgICAgICAgICBhY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZSA9IHNldFJlc3BvbnNlLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmVzb2x2ZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgbGV0IHByb21pc2U6IGFueTtcbiAgICAgICAgICBhY3QoKCkgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZSA9IHJlc29sdmUuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3ZSB3YW50IGZyZXNoIG1hbmFnZXIgc3RhdGUgaW4gZWFjaCBpbnN0YW5jZVxuICAgIGNvbnN0IG5tID0gbmV3IE5ldHdvcmtNYW5hZ2VyKCk7XG4gICAgY29uc3Qgc20gPSBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcihQb2xsaW5nU3Vic2NyaXB0aW9uKTtcbiAgICBjb25zdCBtYW5hZ2VycyA9IFtubSwgc21dO1xuICAgIC8vIHRoaXMgcGF0dGVybiBpcyBkYW5nZXJvdXMgaWYgcmVuZGVyRGF0YUNsaWVudCBpcyBzaGFyZWQgYmV0d2VlbiB0ZXN0c1xuICAgIC8vIFRPRE86IG1vdmUgdG8gcmV0dXJuIHZhbHVlXG4gICAgcmVuZGVyRGF0YUNsaWVudC5jbGVhbnVwID0gKCkgPT4ge1xuICAgICAgbm0uY2xlYW51cERhdGUgPSBJbmZpbml0eTtcbiAgICAgIE9iamVjdC52YWx1ZXMobm1bJ3JlamVjdG9ycyddIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLmZvckVhY2gocmVqID0+IHtcbiAgICAgICAgcmVqKCk7XG4gICAgICB9KTtcbiAgICAgIG5tWydjbGVhckFsbCddKCk7XG4gICAgICBtYW5hZ2Vycy5mb3JFYWNoKG1hbmFnZXIgPT4gbWFuYWdlci5jbGVhbnVwKCkpO1xuICAgIH07XG4gICAgcmVuZGVyRGF0YUNsaWVudC5hbGxTZXR0bGVkID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIG5tLmFsbFNldHRsZWQoKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5pdGlhbFN0YXRlOiBTdGF0ZTx1bmtub3duPiA9IG1vY2tJbml0aWFsU3RhdGUoaW5pdGlhbEZpeHR1cmVzKTtcblxuICAgIGNvbnN0IFByb3ZpZGVyV2l0aFJlc29sdmVyOiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT4gPSBtZW1vKFxuICAgICAgZnVuY3Rpb24gUHJvdmlkZXJXaXRoUmVzb2x2ZXIoeyBjaGlsZHJlbiB9OiBSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjxQPikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxQcm92aWRlclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlPXtpbml0aWFsU3RhdGV9XG4gICAgICAgICAgICBDb250cm9sbGVyPXtBY3RDb250cm9sbGVyfVxuICAgICAgICAgICAgbWFuYWdlcnM9e21hbmFnZXJzfVxuICAgICAgICAgICAgZGV2QnV0dG9uPXtudWxsfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L1Byb3ZpZGVyPlxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgV3JhcHBlcjogUmVhY3QuQ29tcG9uZW50VHlwZTxSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjxQPj4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucz8ud3JhcHBlcjtcbiAgICBjb25zdCBQcm92aWRlcldpdGhXcmFwcGVyID1cbiAgICAgIFdyYXBwZXIgP1xuICAgICAgICBmdW5jdGlvbiBQcm92aWRlcldyYXBwZWQocHJvcHM6IFJlYWN0LlByb3BzV2l0aENoaWxkcmVuPFA+KSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxQcm92aWRlcldpdGhSZXNvbHZlcj5cbiAgICAgICAgICAgICAgPFdyYXBwZXIgey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgPC9Qcm92aWRlcldpdGhSZXNvbHZlcj5cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICA6IFByb3ZpZGVyV2l0aFJlc29sdmVyO1xuXG4gICAgY29uc3Qgd3JhcHBlcjogUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+ID0gKHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgLi4ucHJvcHNcbiAgICB9OiBSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjxQPikgPT4gKFxuICAgICAgPFByb3ZpZGVyV2l0aFdyYXBwZXIgey4uLihwcm9wcyBhcyBhbnkpfT5cbiAgICAgICAgPFN1c3BlbnNlIGZhbGxiYWNrPXtudWxsfT57Y2hpbGRyZW59PC9TdXNwZW5zZT5cbiAgICAgIDwvUHJvdmlkZXJXaXRoV3JhcHBlcj5cbiAgICApO1xuXG4gICAgY29uc3QgcmV0OiBhbnkgPSByZW5kZXJIb29rKGNhbGxiYWNrLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgd3JhcHBlcixcbiAgICB9KTtcbiAgICByZXQuY29udHJvbGxlciA9IG5tWydjb250cm9sbGVyJ107XG4gICAgcmV0dXJuIHJldDtcbiAgfSkgYXMgYW55O1xuICByZW5kZXJEYXRhQ2xpZW50LmNsZWFudXAgPSAoKSA9PiB7fTtcbiAgcmVuZGVyRGF0YUNsaWVudC5hbGxTZXR0bGVkID0gKCkgPT4gUHJvbWlzZS5hbGxTZXR0bGVkKFtdKTtcbiAgcmV0dXJuIHJlbmRlckRhdGFDbGllbnQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIERhdGFQcm92aWRlclByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgbWFuYWdlcnM6IE1hbmFnZXJbXTtcbiAgaW5pdGlhbFN0YXRlOiBTdGF0ZTx1bmtub3duPjtcbiAgQ29udHJvbGxlcjogdHlwZW9mIENvbnRyb2xsZXI8YW55PjtcbiAgZGV2QnV0dG9uOiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRhdGFIb29rID0gKDxQLCBSPihcbiAgY2FsbGJhY2s6IChwcm9wczogUCkgPT4gUixcbiAgb3B0aW9ucz86IHtcbiAgICBpbml0aWFsUHJvcHM/OiBQO1xuICAgIGluaXRpYWxGaXh0dXJlcz86IHJlYWRvbmx5IEZpeHR1cmVbXTtcbiAgICByZWFkb25seSByZXNvbHZlckZpeHR1cmVzPzogcmVhZG9ubHkgKEZpeHR1cmUgfCBJbnRlcmNlcHRvcilbXTtcbiAgICB3cmFwcGVyPzogUmVhY3QuQ29tcG9uZW50VHlwZTxSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjxQPj47XG4gIH0gJiBPbWl0PFJlbmRlckhvb2tPcHRpb25zPFA+LCAnaW5pdGlhbFByb3BzJyB8ICd3cmFwcGVyJz4sXG4pID0+IFJlbmRlckhvb2tSZXN1bHQ8UiwgUD4gJiB7XG4gIGNvbnRyb2xsZXI6IENvbnRyb2xsZXI7XG59KSAmIHtcbiAgY2xlYW51cDogKCkgPT4gdm9pZDtcbiAgYWxsU2V0dGxlZDogKCkgPT4gUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDx1bmtub3duPltdPiB8IHVuZGVmaW5lZDtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBR0VBLG1CQUFtQixFQUNuQkMsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLFVBQVUsUUFHTCxvQkFBb0I7QUFDM0IsT0FBT0MsS0FBSyxJQUFJQyxJQUFJLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBRTdDLFNBQ0VDLFVBQVUsRUFDVkMsR0FBRyxRQUdFLGtCQUFrQjtBQUV6QixTQUFTQyxjQUFjLFFBQVEsc0JBQXNCO0FBQ3JELE9BQU9DLGdCQUFnQixNQUFNLGlCQUFpQjtBQUFDLFNBQUFDLEdBQUEsSUFBQUMsSUFBQTtBQUcvQztBQUNBLGVBQWUsU0FBU0Msa0JBQWtCQSxDQUN4Q0MsUUFBZ0QsRUFDaEQ7RUFDQSxNQUFNQyxnQkFBZ0MsR0FBSUEsQ0FDeENDLFFBQXlCLEVBQ3pCO0lBQ0VDLGVBQWU7SUFDZkMsZ0JBQWdCO0lBQ2hCQyx5QkFBeUIs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