@data-client/test
Version:
Testing utilities for Data Client
101 lines (100 loc) • 14.8 kB
JavaScript
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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