@gravity-ui/data-source 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/core/index.d.ts +2 -1
- package/build/cjs/core/index.js +7 -0
- package/build/cjs/core/index.js.map +1 -1
- package/build/cjs/core/types/DataSource.d.ts +15 -19
- package/build/cjs/core/types/DataSource.js.map +1 -1
- package/build/cjs/core/utils/__tests__/composeFullKey.test.js +34 -0
- package/build/cjs/core/utils/__tests__/composeFullKey.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/composeKey.test.js +32 -0
- package/build/cjs/core/utils/__tests__/composeKey.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/getError.test.js +31 -0
- package/build/cjs/core/utils/__tests__/getError.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/getStatus.test.js +49 -0
- package/build/cjs/core/utils/__tests__/getStatus.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/hasTag.test.js +31 -0
- package/build/cjs/core/utils/__tests__/hasTag.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/mergeStatuses.test.js +25 -0
- package/build/cjs/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/skipContext.test.js +70 -0
- package/build/cjs/core/utils/__tests__/skipContext.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/withCancellation.test.js +106 -0
- package/build/cjs/core/utils/__tests__/withCancellation.test.js.map +1 -0
- package/build/cjs/core/utils/__tests__/withCatch.test.js +208 -0
- package/build/cjs/core/utils/__tests__/withCatch.test.js.map +1 -0
- package/build/cjs/core/utils/withCatch.d.ts +26 -0
- package/build/cjs/core/utils/withCatch.js +37 -0
- package/build/cjs/core/utils/withCatch.js.map +1 -0
- package/build/cjs/react/__tests__/DataManagerContext.test.js +46 -0
- package/build/cjs/react/__tests__/DataManagerContext.test.js.map +1 -0
- package/build/cjs/react/__tests__/withDataManager.test.js +58 -0
- package/build/cjs/react/__tests__/withDataManager.test.js.map +1 -0
- package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +187 -0
- package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
- package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js +119 -0
- package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
- package/build/cjs/react/withDataManager.d.ts +1 -1
- package/build/cjs/react/withDataManager.js +3 -3
- package/build/cjs/react/withDataManager.js.map +1 -1
- package/build/cjs/react-query/constants.d.ts +2 -0
- package/build/cjs/react-query/constants.js +9 -0
- package/build/cjs/react-query/constants.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js +55 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js +97 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js +77 -0
- package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js +79 -0
- package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js +117 -0
- package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
- package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js +156 -0
- package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
- package/build/cjs/react-query/hooks/useRefetchInterval.d.ts +1 -1
- package/build/cjs/react-query/impl/infinite/factory.d.ts +1 -1
- package/build/cjs/react-query/impl/infinite/factory.js.map +1 -1
- package/build/cjs/react-query/impl/infinite/types.d.ts +7 -7
- package/build/cjs/react-query/impl/infinite/types.js.map +1 -1
- package/build/cjs/react-query/impl/infinite/utils.js +11 -22
- package/build/cjs/react-query/impl/infinite/utils.js.map +1 -1
- package/build/cjs/react-query/impl/plain/factory.d.ts +1 -1
- package/build/cjs/react-query/impl/plain/factory.js.map +1 -1
- package/build/cjs/react-query/impl/plain/types.d.ts +4 -4
- package/build/cjs/react-query/impl/plain/types.js.map +1 -1
- package/build/cjs/react-query/impl/plain/utils.js +12 -23
- package/build/cjs/react-query/impl/plain/utils.js.map +1 -1
- package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js +27 -0
- package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
- package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js +76 -0
- package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
- package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js +30 -0
- package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
- package/build/cjs/react-query/utils/__tests__/notReachable.test.js +35 -0
- package/build/cjs/react-query/utils/__tests__/notReachable.test.js.map +1 -0
- package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js +27 -0
- package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
- package/build/cjs/react-query/utils/formatNullableValue.d.ts +2 -0
- package/build/cjs/react-query/utils/formatNullableValue.js +17 -0
- package/build/cjs/react-query/utils/formatNullableValue.js.map +1 -0
- package/build/cjs/react-query/utils/getProgressiveRefetch.d.ts +2 -2
- package/build/cjs/react-query/utils/parseNullableValue.d.ts +2 -0
- package/build/cjs/react-query/utils/parseNullableValue.js +17 -0
- package/build/cjs/react-query/utils/parseNullableValue.js.map +1 -0
- package/build/cjs/setupTests.d.ts +1 -0
- package/build/cjs/setupTests.js +4 -0
- package/build/cjs/setupTests.js.map +1 -0
- package/build/esm/core/index.d.ts +2 -1
- package/build/esm/core/index.js +1 -0
- package/build/esm/core/index.js.map +1 -1
- package/build/esm/core/types/DataSource.d.ts +15 -19
- package/build/esm/core/types/DataSource.js.map +1 -1
- package/build/esm/core/utils/__tests__/composeFullKey.test.js +32 -0
- package/build/esm/core/utils/__tests__/composeFullKey.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/composeKey.test.js +30 -0
- package/build/esm/core/utils/__tests__/composeKey.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/getError.test.js +29 -0
- package/build/esm/core/utils/__tests__/getError.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/getStatus.test.js +47 -0
- package/build/esm/core/utils/__tests__/getStatus.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/hasTag.test.js +29 -0
- package/build/esm/core/utils/__tests__/hasTag.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/mergeStatuses.test.js +23 -0
- package/build/esm/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/skipContext.test.js +67 -0
- package/build/esm/core/utils/__tests__/skipContext.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/withCancellation.test.js +104 -0
- package/build/esm/core/utils/__tests__/withCancellation.test.js.map +1 -0
- package/build/esm/core/utils/__tests__/withCatch.test.js +205 -0
- package/build/esm/core/utils/__tests__/withCatch.test.js.map +1 -0
- package/build/esm/core/utils/withCatch.d.ts +26 -0
- package/build/esm/core/utils/withCatch.js +31 -0
- package/build/esm/core/utils/withCatch.js.map +1 -0
- package/build/esm/react/__tests__/DataManagerContext.test.js +43 -0
- package/build/esm/react/__tests__/DataManagerContext.test.js.map +1 -0
- package/build/esm/react/__tests__/withDataManager.test.js +55 -0
- package/build/esm/react/__tests__/withDataManager.test.js.map +1 -0
- package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +184 -0
- package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
- package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js +116 -0
- package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
- package/build/esm/react/withDataManager.d.ts +1 -1
- package/build/esm/react/withDataManager.js +3 -3
- package/build/esm/react/withDataManager.js.map +1 -1
- package/build/esm/react-query/constants.d.ts +2 -0
- package/build/esm/react-query/constants.js +3 -0
- package/build/esm/react-query/constants.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js +52 -0
- package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useQueryData.test.js +95 -0
- package/build/esm/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js +74 -0
- package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js +77 -0
- package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js +115 -0
- package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
- package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js +154 -0
- package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
- package/build/esm/react-query/hooks/useRefetchInterval.d.ts +1 -1
- package/build/esm/react-query/impl/infinite/factory.d.ts +1 -1
- package/build/esm/react-query/impl/infinite/factory.js.map +1 -1
- package/build/esm/react-query/impl/infinite/types.d.ts +7 -7
- package/build/esm/react-query/impl/infinite/types.js.map +1 -1
- package/build/esm/react-query/impl/infinite/utils.js +9 -20
- package/build/esm/react-query/impl/infinite/utils.js.map +1 -1
- package/build/esm/react-query/impl/plain/factory.d.ts +1 -1
- package/build/esm/react-query/impl/plain/factory.js.map +1 -1
- package/build/esm/react-query/impl/plain/types.d.ts +4 -4
- package/build/esm/react-query/impl/plain/types.js.map +1 -1
- package/build/esm/react-query/impl/plain/utils.js +10 -21
- package/build/esm/react-query/impl/plain/utils.js.map +1 -1
- package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js +25 -0
- package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
- package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js +74 -0
- package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
- package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js +28 -0
- package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
- package/build/esm/react-query/utils/__tests__/notReachable.test.js +33 -0
- package/build/esm/react-query/utils/__tests__/notReachable.test.js.map +1 -0
- package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js +25 -0
- package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
- package/build/esm/react-query/utils/formatNullableValue.d.ts +2 -0
- package/build/esm/react-query/utils/formatNullableValue.js +11 -0
- package/build/esm/react-query/utils/formatNullableValue.js.map +1 -0
- package/build/esm/react-query/utils/getProgressiveRefetch.d.ts +2 -2
- package/build/esm/react-query/utils/parseNullableValue.d.ts +2 -0
- package/build/esm/react-query/utils/parseNullableValue.js +11 -0
- package/build/esm/react-query/utils/parseNullableValue.js.map +1 -0
- package/build/esm/setupTests.d.ts +1 -0
- package/build/esm/setupTests.js +2 -0
- package/build/esm/setupTests.js.map +1 -0
- package/package.json +17 -13
- package/build/cjs/react-query/impl/utils.d.ts +0 -4
- package/build/cjs/react-query/impl/utils.js +0 -27
- package/build/cjs/react-query/impl/utils.js.map +0 -1
- package/build/esm/react-query/impl/utils.d.ts +0 -4
- package/build/esm/react-query/impl/utils.js +0 -21
- package/build/esm/react-query/impl/utils.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { renderHook } from '@testing-library/react';
|
|
3
|
+
import { DataManagerContext, useDataManager } from '../DataManagerContext';
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
describe('useDataManager', function () {
|
|
6
|
+
it('should return dataManager from context', function () {
|
|
7
|
+
var mockDataManager = {
|
|
8
|
+
invalidateTag: jest.fn(),
|
|
9
|
+
invalidateTags: jest.fn(),
|
|
10
|
+
invalidateSource: jest.fn(),
|
|
11
|
+
resetSource: jest.fn(),
|
|
12
|
+
invalidateParams: jest.fn(),
|
|
13
|
+
resetParams: jest.fn(),
|
|
14
|
+
invalidateSourceTags: jest.fn()
|
|
15
|
+
};
|
|
16
|
+
var wrapper = function wrapper(_ref) {
|
|
17
|
+
var children = _ref.children;
|
|
18
|
+
return /*#__PURE__*/_jsx(DataManagerContext.Provider, {
|
|
19
|
+
value: mockDataManager,
|
|
20
|
+
children: children
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var _renderHook = renderHook(function () {
|
|
24
|
+
return useDataManager();
|
|
25
|
+
}, {
|
|
26
|
+
wrapper: wrapper
|
|
27
|
+
}),
|
|
28
|
+
result = _renderHook.result;
|
|
29
|
+
expect(result.current).toBe(mockDataManager);
|
|
30
|
+
});
|
|
31
|
+
it('should throw an error when dataManager is not provided', function () {
|
|
32
|
+
try {
|
|
33
|
+
renderHook(function () {
|
|
34
|
+
return useDataManager();
|
|
35
|
+
});
|
|
36
|
+
} catch (error) {
|
|
37
|
+
expect(error).toBeInstanceOf(Error);
|
|
38
|
+
// Just to be sure that the error is from the right place
|
|
39
|
+
expect(error.message).toBe('DataManager is not provided by context. Use DataManagerContext.Provider to do it');
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
// #sourceMappingURL=DataManagerContext.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","renderHook","DataManagerContext","useDataManager","jsx","_jsx","describe","it","mockDataManager","invalidateTag","jest","fn","invalidateTags","invalidateSource","resetSource","invalidateParams","resetParams","invalidateSourceTags","wrapper","_ref","children","Provider","value","_renderHook","result","expect","current","toBe","error","toBeInstanceOf","Error","message"],"sources":["DataManagerContext.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {renderHook} from '@testing-library/react';\n\nimport type {DataManager} from '../../core';\nimport {DataManagerContext, useDataManager} from '../DataManagerContext';\n\ndescribe('useDataManager', () => {\n it('should return dataManager from context', () => {\n const mockDataManager: DataManager = {\n invalidateTag: jest.fn(),\n invalidateTags: jest.fn(),\n invalidateSource: jest.fn(),\n resetSource: jest.fn(),\n invalidateParams: jest.fn(),\n resetParams: jest.fn(),\n invalidateSourceTags: jest.fn(),\n };\n\n const wrapper: React.FC<{children: React.ReactNode}> = ({children}) => (\n <DataManagerContext.Provider value={mockDataManager}>\n {children}\n </DataManagerContext.Provider>\n );\n\n const {result} = renderHook(() => useDataManager(), {wrapper});\n\n expect(result.current).toBe(mockDataManager);\n });\n\n it('should throw an error when dataManager is not provided', () => {\n try {\n renderHook(() => useDataManager());\n } catch (error) {\n expect(error).toBeInstanceOf(Error);\n // Just to be sure that the error is from the right place\n expect((error as Error).message).toBe(\n 'DataManager is not provided by context. Use DataManagerContext.Provider to do it',\n );\n }\n });\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,UAAU,QAAO,wBAAwB;AAGjD,SAAQC,kBAAkB,EAAEC,cAAc,QAAO,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEzEC,QAAQ,CAAC,gBAAgB,EAAE,YAAM;EAC7BC,EAAE,CAAC,wCAAwC,EAAE,YAAM;IAC/C,IAAMC,eAA4B,GAAG;MACjCC,aAAa,EAAEC,IAAI,CAACC,EAAE,CAAC,CAAC;MACxBC,cAAc,EAAEF,IAAI,CAACC,EAAE,CAAC,CAAC;MACzBE,gBAAgB,EAAEH,IAAI,CAACC,EAAE,CAAC,CAAC;MAC3BG,WAAW,EAAEJ,IAAI,CAACC,EAAE,CAAC,CAAC;MACtBI,gBAAgB,EAAEL,IAAI,CAACC,EAAE,CAAC,CAAC;MAC3BK,WAAW,EAAEN,IAAI,CAACC,EAAE,CAAC,CAAC;MACtBM,oBAAoB,EAAEP,IAAI,CAACC,EAAE,CAAC;IAClC,CAAC;IAED,IAAMO,OAA8C,GAAG,SAAjDA,OAA8CA,CAAAC,IAAA;MAAA,IAAKC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;MAAA,oBAC7Df,IAAA,CAACH,kBAAkB,CAACmB,QAAQ;QAACC,KAAK,EAAEd,eAAgB;QAAAY,QAAA,EAC/CA;MAAQ,CACgB,CAAC;IAAA,CACjC;IAED,IAAAG,WAAA,GAAiBtB,UAAU,CAAC;QAAA,OAAME,cAAc,CAAC,CAAC;MAAA,GAAE;QAACe,OAAO,EAAPA;MAAO,CAAC,CAAC;MAAvDM,MAAM,GAAAD,WAAA,CAANC,MAAM;IAEbC,MAAM,CAACD,MAAM,CAACE,OAAO,CAAC,CAACC,IAAI,CAACnB,eAAe,CAAC;EAChD,CAAC,CAAC;EAEFD,EAAE,CAAC,wDAAwD,EAAE,YAAM;IAC/D,IAAI;MACAN,UAAU,CAAC;QAAA,OAAME,cAAc,CAAC,CAAC;MAAA,EAAC;IACtC,CAAC,CAAC,OAAOyB,KAAK,EAAE;MACZH,MAAM,CAACG,KAAK,CAAC,CAACC,cAAc,CAACC,KAAK,CAAC;MACnC;MACAL,MAAM,CAAEG,KAAK,CAAWG,OAAO,CAAC,CAACJ,IAAI,CACjC,kFACJ,CAAC;IACL;EACJ,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render, screen } from '@testing-library/react';
|
|
4
|
+
import { useDataManager } from '../DataManagerContext';
|
|
5
|
+
import { withDataManager } from '../withDataManager';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
jest.mock('../DataManagerContext', function () {
|
|
8
|
+
var originalModule = jest.requireActual('../DataManagerContext');
|
|
9
|
+
return _objectSpread(_objectSpread({}, originalModule), {}, {
|
|
10
|
+
useDataManager: jest.fn()
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
describe('withDataManager', function () {
|
|
14
|
+
var mockDataManager = {
|
|
15
|
+
invalidateTag: jest.fn(),
|
|
16
|
+
invalidateTags: jest.fn(),
|
|
17
|
+
invalidateSource: jest.fn(),
|
|
18
|
+
resetSource: jest.fn(),
|
|
19
|
+
invalidateParams: jest.fn(),
|
|
20
|
+
resetParams: jest.fn(),
|
|
21
|
+
invalidateSourceTags: jest.fn()
|
|
22
|
+
};
|
|
23
|
+
beforeEach(function () {
|
|
24
|
+
jest.clearAllMocks();
|
|
25
|
+
useDataManager.mockReturnValue(mockDataManager);
|
|
26
|
+
});
|
|
27
|
+
it('should pass dataManager to wrapped component', function () {
|
|
28
|
+
var TestComponent = function TestComponent(_ref) {
|
|
29
|
+
var dataManager = _ref.dataManager;
|
|
30
|
+
return /*#__PURE__*/_jsx("div", {
|
|
31
|
+
"data-testid": "test-component",
|
|
32
|
+
children: dataManager ? 'DataManager provided' : 'No DataManager'
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
var WrappedComponent = withDataManager(TestComponent);
|
|
36
|
+
render(/*#__PURE__*/_jsx(WrappedComponent, {}));
|
|
37
|
+
expect(screen.getByTestId('test-component')).toHaveTextContent('DataManager provided');
|
|
38
|
+
});
|
|
39
|
+
it('should pass through additional props', function () {
|
|
40
|
+
var TestComponent = function TestComponent(_ref2) {
|
|
41
|
+
var dataManager = _ref2.dataManager,
|
|
42
|
+
testProp = _ref2.testProp;
|
|
43
|
+
return /*#__PURE__*/_jsx("div", {
|
|
44
|
+
"data-testid": "test-component",
|
|
45
|
+
children: dataManager ? "DataManager provided, testProp: ".concat(testProp) : 'No DataManager'
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
var WrappedComponent = withDataManager(TestComponent);
|
|
49
|
+
render(/*#__PURE__*/_jsx(WrappedComponent, {
|
|
50
|
+
testProp: "test value"
|
|
51
|
+
}));
|
|
52
|
+
expect(screen.getByTestId('test-component')).toHaveTextContent('DataManager provided, testProp: test value');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
// #sourceMappingURL=withDataManager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","render","screen","useDataManager","withDataManager","jsx","_jsx","jest","mock","originalModule","requireActual","_objectSpread","fn","describe","mockDataManager","invalidateTag","invalidateTags","invalidateSource","resetSource","invalidateParams","resetParams","invalidateSourceTags","beforeEach","clearAllMocks","mockReturnValue","it","TestComponent","_ref","dataManager","children","WrappedComponent","expect","getByTestId","toHaveTextContent","_ref2","testProp","concat"],"sources":["withDataManager.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {render, screen} from '@testing-library/react';\n\nimport type {DataManager} from '../../core';\nimport {useDataManager} from '../DataManagerContext';\nimport type {WithDataManagerProps} from '../withDataManager';\nimport {withDataManager} from '../withDataManager';\n\njest.mock('../DataManagerContext', () => {\n const originalModule = jest.requireActual('../DataManagerContext');\n return {\n ...originalModule,\n useDataManager: jest.fn(),\n };\n});\n\ndescribe('withDataManager', () => {\n const mockDataManager: DataManager = {\n invalidateTag: jest.fn(),\n invalidateTags: jest.fn(),\n invalidateSource: jest.fn(),\n resetSource: jest.fn(),\n invalidateParams: jest.fn(),\n resetParams: jest.fn(),\n invalidateSourceTags: jest.fn(),\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n (useDataManager as jest.Mock).mockReturnValue(mockDataManager);\n });\n\n it('should pass dataManager to wrapped component', () => {\n const TestComponent: React.FC<WithDataManagerProps> = ({dataManager}) => (\n <div data-testid=\"test-component\">\n {dataManager ? 'DataManager provided' : 'No DataManager'}\n </div>\n );\n const WrappedComponent = withDataManager(TestComponent);\n\n render(<WrappedComponent />);\n\n expect(screen.getByTestId('test-component')).toHaveTextContent('DataManager provided');\n });\n\n it('should pass through additional props', () => {\n const TestComponent: React.FC<WithDataManagerProps & {testProp: string}> = ({\n dataManager,\n testProp,\n }) => (\n <div data-testid=\"test-component\">\n {dataManager ? `DataManager provided, testProp: ${testProp}` : 'No DataManager'}\n </div>\n );\n const WrappedComponent = withDataManager(TestComponent);\n\n render(<WrappedComponent testProp=\"test value\" />);\n\n expect(screen.getByTestId('test-component')).toHaveTextContent(\n 'DataManager provided, testProp: test value',\n );\n });\n});\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,MAAM,EAAEC,MAAM,QAAO,wBAAwB;AAGrD,SAAQC,cAAc,QAAO,uBAAuB;AAEpD,SAAQC,eAAe,QAAO,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEnDC,IAAI,CAACC,IAAI,CAAC,uBAAuB,EAAE,YAAM;EACrC,IAAMC,cAAc,GAAGF,IAAI,CAACG,aAAa,CAAC,uBAAuB,CAAC;EAClE,OAAAC,aAAA,CAAAA,aAAA,KACOF,cAAc;IACjBN,cAAc,EAAEI,IAAI,CAACK,EAAE,CAAC;EAAC;AAEjC,CAAC,CAAC;AAEFC,QAAQ,CAAC,iBAAiB,EAAE,YAAM;EAC9B,IAAMC,eAA4B,GAAG;IACjCC,aAAa,EAAER,IAAI,CAACK,EAAE,CAAC,CAAC;IACxBI,cAAc,EAAET,IAAI,CAACK,EAAE,CAAC,CAAC;IACzBK,gBAAgB,EAAEV,IAAI,CAACK,EAAE,CAAC,CAAC;IAC3BM,WAAW,EAAEX,IAAI,CAACK,EAAE,CAAC,CAAC;IACtBO,gBAAgB,EAAEZ,IAAI,CAACK,EAAE,CAAC,CAAC;IAC3BQ,WAAW,EAAEb,IAAI,CAACK,EAAE,CAAC,CAAC;IACtBS,oBAAoB,EAAEd,IAAI,CAACK,EAAE,CAAC;EAClC,CAAC;EAEDU,UAAU,CAAC,YAAM;IACbf,IAAI,CAACgB,aAAa,CAAC,CAAC;IAEnBpB,cAAc,CAAeqB,eAAe,CAACV,eAAe,CAAC;EAClE,CAAC,CAAC;EAEFW,EAAE,CAAC,8CAA8C,EAAE,YAAM;IACrD,IAAMC,aAA6C,GAAG,SAAhDA,aAA6CA,CAAAC,IAAA;MAAA,IAAKC,WAAW,GAAAD,IAAA,CAAXC,WAAW;MAAA,oBAC/DtB,IAAA;QAAK,eAAY,gBAAgB;QAAAuB,QAAA,EAC5BD,WAAW,GAAG,sBAAsB,GAAG;MAAgB,CACvD,CAAC;IAAA,CACT;IACD,IAAME,gBAAgB,GAAG1B,eAAe,CAACsB,aAAa,CAAC;IAEvDzB,MAAM,cAACK,IAAA,CAACwB,gBAAgB,IAAE,CAAC,CAAC;IAE5BC,MAAM,CAAC7B,MAAM,CAAC8B,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAACC,iBAAiB,CAAC,sBAAsB,CAAC;EAC1F,CAAC,CAAC;EAEFR,EAAE,CAAC,sCAAsC,EAAE,YAAM;IAC7C,IAAMC,aAAkE,GAAG,SAArEA,aAAkEA,CAAAQ,KAAA;MAAA,IACpEN,WAAW,GAAAM,KAAA,CAAXN,WAAW;QACXO,QAAQ,GAAAD,KAAA,CAARC,QAAQ;MAAA,oBAER7B,IAAA;QAAK,eAAY,gBAAgB;QAAAuB,QAAA,EAC5BD,WAAW,sCAAAQ,MAAA,CAAsCD,QAAQ,IAAK;MAAgB,CAC9E,CAAC;IAAA,CACT;IACD,IAAML,gBAAgB,GAAG1B,eAAe,CAACsB,aAAa,CAAC;IAEvDzB,MAAM,cAACK,IAAA,CAACwB,gBAAgB;MAACK,QAAQ,EAAC;IAAY,CAAE,CAAC,CAAC;IAElDJ,MAAM,CAAC7B,MAAM,CAAC8B,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAACC,iBAAiB,CAC1D,4CACJ,CAAC;EACL,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
|
4
|
+
import { DataInfiniteLoader } from '../DataInfiniteLoader';
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
var MockLoadingView = function MockLoadingView() {
|
|
7
|
+
return /*#__PURE__*/_jsx("div", {
|
|
8
|
+
"data-testid": "loading-view",
|
|
9
|
+
children: "Loading..."
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var MockErrorView = function MockErrorView(_ref) {
|
|
13
|
+
var error = _ref.error,
|
|
14
|
+
action = _ref.action;
|
|
15
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
16
|
+
"data-testid": "error-view",
|
|
17
|
+
children: [error ? "Error: ".concat(error.message) : 'No error', action ? /*#__PURE__*/_jsx("button", {
|
|
18
|
+
"data-testid": "error-action",
|
|
19
|
+
onClick: action.handler,
|
|
20
|
+
children: action.children || 'Retry'
|
|
21
|
+
}) : null]
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
var MockMoreView = function MockMoreView(_ref2) {
|
|
25
|
+
var isLoading = _ref2.isLoading,
|
|
26
|
+
onClick = _ref2.onClick;
|
|
27
|
+
return /*#__PURE__*/_jsx("div", {
|
|
28
|
+
"data-testid": "more-view",
|
|
29
|
+
children: isLoading ? /*#__PURE__*/_jsx("span", {
|
|
30
|
+
"data-testid": "more-view-loading",
|
|
31
|
+
children: "Loading more..."
|
|
32
|
+
}) : /*#__PURE__*/_jsx("button", {
|
|
33
|
+
"data-testid": "more-view-button",
|
|
34
|
+
onClick: onClick,
|
|
35
|
+
children: "Load more"
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
describe('DataInfiniteLoader', function () {
|
|
40
|
+
var renderDataInfiniteLoader = function renderDataInfiniteLoader() {
|
|
41
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
42
|
+
var fetchNextPage = jest.fn();
|
|
43
|
+
var defaultProps = {
|
|
44
|
+
status: 'success',
|
|
45
|
+
error: null,
|
|
46
|
+
hasNextPage: true,
|
|
47
|
+
fetchNextPage: fetchNextPage,
|
|
48
|
+
isFetchingNextPage: false,
|
|
49
|
+
LoadingView: MockLoadingView,
|
|
50
|
+
ErrorView: MockErrorView,
|
|
51
|
+
MoreView: MockMoreView,
|
|
52
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
53
|
+
"data-testid": "content",
|
|
54
|
+
children: "Content"
|
|
55
|
+
})
|
|
56
|
+
};
|
|
57
|
+
return _objectSpread(_objectSpread({}, render(/*#__PURE__*/_jsx(DataInfiniteLoader, _objectSpread(_objectSpread({}, defaultProps), props)))), {}, {
|
|
58
|
+
fetchNextPage: fetchNextPage
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
it('should render children and MoreView when status is success and hasNextPage is true', function () {
|
|
62
|
+
renderDataInfiniteLoader({
|
|
63
|
+
status: 'success',
|
|
64
|
+
hasNextPage: true
|
|
65
|
+
});
|
|
66
|
+
expect(screen.getByTestId('content')).toBeInTheDocument();
|
|
67
|
+
expect(screen.getByTestId('more-view')).toBeInTheDocument();
|
|
68
|
+
expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();
|
|
69
|
+
expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();
|
|
70
|
+
});
|
|
71
|
+
it('should render only children when status is success and hasNextPage is false', function () {
|
|
72
|
+
renderDataInfiniteLoader({
|
|
73
|
+
status: 'success',
|
|
74
|
+
hasNextPage: false
|
|
75
|
+
});
|
|
76
|
+
expect(screen.getByTestId('content')).toBeInTheDocument();
|
|
77
|
+
expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();
|
|
78
|
+
expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();
|
|
79
|
+
expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();
|
|
80
|
+
});
|
|
81
|
+
it('should render LoadingView when status is loading', function () {
|
|
82
|
+
renderDataInfiniteLoader({
|
|
83
|
+
status: 'loading'
|
|
84
|
+
});
|
|
85
|
+
expect(screen.getByTestId('loading-view')).toBeInTheDocument();
|
|
86
|
+
expect(screen.queryByTestId('content')).not.toBeInTheDocument();
|
|
87
|
+
expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();
|
|
88
|
+
expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();
|
|
89
|
+
});
|
|
90
|
+
it('should render ErrorView when status is error', function () {
|
|
91
|
+
var error = new Error('Test error');
|
|
92
|
+
renderDataInfiniteLoader({
|
|
93
|
+
status: 'error',
|
|
94
|
+
error: error
|
|
95
|
+
});
|
|
96
|
+
expect(screen.getByTestId('error-view')).toBeInTheDocument();
|
|
97
|
+
expect(screen.queryByTestId('content')).not.toBeInTheDocument();
|
|
98
|
+
expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();
|
|
99
|
+
expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();
|
|
100
|
+
expect(screen.getByText(/Test error/)).toBeInTheDocument();
|
|
101
|
+
});
|
|
102
|
+
it('should call fetchNextPage when clicking on load more button', function () {
|
|
103
|
+
var _renderDataInfiniteLo = renderDataInfiniteLoader({
|
|
104
|
+
status: 'success',
|
|
105
|
+
hasNextPage: true,
|
|
106
|
+
isFetchingNextPage: false
|
|
107
|
+
}),
|
|
108
|
+
fetchNextPage = _renderDataInfiniteLo.fetchNextPage;
|
|
109
|
+
fireEvent.click(screen.getByTestId('more-view-button'));
|
|
110
|
+
expect(fetchNextPage).toHaveBeenCalledTimes(1);
|
|
111
|
+
});
|
|
112
|
+
it('should show loading state in MoreView when isFetchingNextPage is true', function () {
|
|
113
|
+
renderDataInfiniteLoader({
|
|
114
|
+
status: 'success',
|
|
115
|
+
hasNextPage: true,
|
|
116
|
+
isFetchingNextPage: true
|
|
117
|
+
});
|
|
118
|
+
expect(screen.getByTestId('more-view-loading')).toBeInTheDocument();
|
|
119
|
+
expect(screen.queryByTestId('more-view-button')).not.toBeInTheDocument();
|
|
120
|
+
});
|
|
121
|
+
it('should pass errorAction to ErrorView', function () {
|
|
122
|
+
var error = new Error('Test error');
|
|
123
|
+
var errorAction = jest.fn();
|
|
124
|
+
renderDataInfiniteLoader({
|
|
125
|
+
status: 'error',
|
|
126
|
+
error: error,
|
|
127
|
+
errorAction: errorAction
|
|
128
|
+
});
|
|
129
|
+
expect(screen.getByTestId('error-action')).toBeInTheDocument();
|
|
130
|
+
});
|
|
131
|
+
it('should pass errorAction with custom children to ErrorView', function () {
|
|
132
|
+
var error = new Error('Test error');
|
|
133
|
+
var errorAction = {
|
|
134
|
+
handler: jest.fn(),
|
|
135
|
+
children: 'Custom action'
|
|
136
|
+
};
|
|
137
|
+
renderDataInfiniteLoader({
|
|
138
|
+
status: 'error',
|
|
139
|
+
error: error,
|
|
140
|
+
errorAction: errorAction
|
|
141
|
+
});
|
|
142
|
+
expect(screen.getByText('Custom action')).toBeInTheDocument();
|
|
143
|
+
});
|
|
144
|
+
it('should pass loadingViewProps to LoadingView', function () {
|
|
145
|
+
var LoadingView = jest.fn(MockLoadingView);
|
|
146
|
+
var loadingViewProps = {
|
|
147
|
+
customProp: 'test'
|
|
148
|
+
};
|
|
149
|
+
renderDataInfiniteLoader({
|
|
150
|
+
status: 'loading',
|
|
151
|
+
LoadingView: LoadingView,
|
|
152
|
+
loadingViewProps: loadingViewProps
|
|
153
|
+
});
|
|
154
|
+
expect(LoadingView).toHaveBeenCalledWith(expect.objectContaining(loadingViewProps), undefined);
|
|
155
|
+
});
|
|
156
|
+
it('should pass errorViewProps to ErrorView', function () {
|
|
157
|
+
var ErrorView = jest.fn(MockErrorView);
|
|
158
|
+
var errorViewProps = {
|
|
159
|
+
customProp: 'test'
|
|
160
|
+
};
|
|
161
|
+
var error = new Error('Test error');
|
|
162
|
+
renderDataInfiniteLoader({
|
|
163
|
+
status: 'error',
|
|
164
|
+
error: error,
|
|
165
|
+
ErrorView: ErrorView,
|
|
166
|
+
errorViewProps: errorViewProps
|
|
167
|
+
});
|
|
168
|
+
expect(ErrorView).toHaveBeenCalledWith(expect.objectContaining(errorViewProps), undefined);
|
|
169
|
+
});
|
|
170
|
+
it('should pass moreViewProps to MoreView', function () {
|
|
171
|
+
var MoreView = jest.fn(MockMoreView);
|
|
172
|
+
var moreViewProps = {
|
|
173
|
+
customProp: 'test'
|
|
174
|
+
};
|
|
175
|
+
renderDataInfiniteLoader({
|
|
176
|
+
status: 'success',
|
|
177
|
+
hasNextPage: true,
|
|
178
|
+
MoreView: MoreView,
|
|
179
|
+
moreViewProps: moreViewProps
|
|
180
|
+
});
|
|
181
|
+
expect(MoreView).toHaveBeenCalledWith(expect.objectContaining(moreViewProps), undefined);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
// #sourceMappingURL=DataInfiniteLoader.test.js.map
|
package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","fireEvent","render","screen","DataInfiniteLoader","jsx","_jsx","jsxs","_jsxs","MockLoadingView","children","MockErrorView","_ref","error","action","concat","message","onClick","handler","MockMoreView","_ref2","isLoading","describe","renderDataInfiniteLoader","props","arguments","length","undefined","fetchNextPage","jest","fn","defaultProps","status","hasNextPage","isFetchingNextPage","LoadingView","ErrorView","MoreView","_objectSpread","it","expect","getByTestId","toBeInTheDocument","queryByTestId","not","Error","getByText","_renderDataInfiniteLo","click","toHaveBeenCalledTimes","errorAction","loadingViewProps","customProp","toHaveBeenCalledWith","objectContaining","errorViewProps","moreViewProps"],"sources":["DataInfiniteLoader.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {fireEvent, render, screen} from '@testing-library/react';\n\nimport type {ErrorViewProps} from '../../types';\nimport {DataInfiniteLoader} from '../DataInfiniteLoader';\nimport type {DataInfiniteLoaderProps, MoreViewProps} from '../types';\n\nconst MockLoadingView = () => <div data-testid=\"loading-view\">Loading...</div>;\nconst MockErrorView: React.FC<ErrorViewProps<Error>> = ({error, action}) => (\n <div data-testid=\"error-view\">\n {error ? `Error: ${error.message}` : 'No error'}\n {action ? (\n <button data-testid=\"error-action\" onClick={action.handler}>\n {action.children || 'Retry'}\n </button>\n ) : null}\n </div>\n);\nconst MockMoreView: React.FC<MoreViewProps> = ({isLoading, onClick}) => (\n <div data-testid=\"more-view\">\n {isLoading ? (\n <span data-testid=\"more-view-loading\">Loading more...</span>\n ) : (\n <button data-testid=\"more-view-button\" onClick={onClick}>\n Load more\n </button>\n )}\n </div>\n);\n\ndescribe('DataInfiniteLoader', () => {\n const renderDataInfiniteLoader = (props: Partial<DataInfiniteLoaderProps<Error>> = {}) => {\n const fetchNextPage = jest.fn();\n const defaultProps: DataInfiniteLoaderProps<Error> = {\n status: 'success',\n error: null,\n hasNextPage: true,\n fetchNextPage,\n isFetchingNextPage: false,\n LoadingView: MockLoadingView,\n ErrorView: MockErrorView,\n MoreView: MockMoreView,\n children: <div data-testid=\"content\">Content</div>,\n };\n\n return {\n ...render(<DataInfiniteLoader {...defaultProps} {...props} />),\n fetchNextPage,\n };\n };\n\n it('should render children and MoreView when status is success and hasNextPage is true', () => {\n renderDataInfiniteLoader({status: 'success', hasNextPage: true});\n expect(screen.getByTestId('content')).toBeInTheDocument();\n expect(screen.getByTestId('more-view')).toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render only children when status is success and hasNextPage is false', () => {\n renderDataInfiniteLoader({status: 'success', hasNextPage: false});\n expect(screen.getByTestId('content')).toBeInTheDocument();\n expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render LoadingView when status is loading', () => {\n renderDataInfiniteLoader({status: 'loading'});\n expect(screen.getByTestId('loading-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render ErrorView when status is error', () => {\n const error = new Error('Test error');\n renderDataInfiniteLoader({status: 'error', error});\n expect(screen.getByTestId('error-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('more-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.getByText(/Test error/)).toBeInTheDocument();\n });\n\n it('should call fetchNextPage when clicking on load more button', () => {\n const {fetchNextPage} = renderDataInfiniteLoader({\n status: 'success',\n hasNextPage: true,\n isFetchingNextPage: false,\n });\n fireEvent.click(screen.getByTestId('more-view-button'));\n expect(fetchNextPage).toHaveBeenCalledTimes(1);\n });\n\n it('should show loading state in MoreView when isFetchingNextPage is true', () => {\n renderDataInfiniteLoader({\n status: 'success',\n hasNextPage: true,\n isFetchingNextPage: true,\n });\n expect(screen.getByTestId('more-view-loading')).toBeInTheDocument();\n expect(screen.queryByTestId('more-view-button')).not.toBeInTheDocument();\n });\n\n it('should pass errorAction to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = jest.fn();\n renderDataInfiniteLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByTestId('error-action')).toBeInTheDocument();\n });\n\n it('should pass errorAction with custom children to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = {\n handler: jest.fn(),\n children: 'Custom action',\n };\n renderDataInfiniteLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByText('Custom action')).toBeInTheDocument();\n });\n\n it('should pass loadingViewProps to LoadingView', () => {\n const LoadingView = jest.fn(MockLoadingView);\n const loadingViewProps = {customProp: 'test'};\n renderDataInfiniteLoader({\n status: 'loading',\n LoadingView,\n loadingViewProps,\n });\n expect(LoadingView).toHaveBeenCalledWith(\n expect.objectContaining(loadingViewProps),\n undefined,\n );\n });\n\n it('should pass errorViewProps to ErrorView', () => {\n const ErrorView = jest.fn(MockErrorView);\n const errorViewProps = {customProp: 'test'};\n const error = new Error('Test error');\n renderDataInfiniteLoader({\n status: 'error',\n error,\n ErrorView,\n errorViewProps,\n });\n expect(ErrorView).toHaveBeenCalledWith(expect.objectContaining(errorViewProps), undefined);\n });\n\n it('should pass moreViewProps to MoreView', () => {\n const MoreView = jest.fn(MockMoreView);\n const moreViewProps = {customProp: 'test'};\n renderDataInfiniteLoader({\n status: 'success',\n hasNextPage: true,\n MoreView,\n moreViewProps,\n });\n expect(MoreView).toHaveBeenCalledWith(expect.objectContaining(moreViewProps), undefined);\n });\n});\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAAQC,SAAS,EAAEC,MAAM,EAAEC,MAAM,QAAO,wBAAwB;AAGhE,SAAQC,kBAAkB,QAAO,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGzD,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAA;EAAA,oBAASH,IAAA;IAAK,eAAY,cAAc;IAAAI,QAAA,EAAC;EAAU,CAAK,CAAC;AAAA;AAC9E,IAAMC,aAA8C,GAAG,SAAjDA,aAA8CA,CAAAC,IAAA;EAAA,IAAKC,KAAK,GAAAD,IAAA,CAALC,KAAK;IAAEC,MAAM,GAAAF,IAAA,CAANE,MAAM;EAAA,oBAClEN,KAAA;IAAK,eAAY,YAAY;IAAAE,QAAA,GACxBG,KAAK,aAAAE,MAAA,CAAaF,KAAK,CAACG,OAAO,IAAK,UAAU,EAC9CF,MAAM,gBACHR,IAAA;MAAQ,eAAY,cAAc;MAACW,OAAO,EAAEH,MAAM,CAACI,OAAQ;MAAAR,QAAA,EACtDI,MAAM,CAACJ,QAAQ,IAAI;IAAO,CACvB,CAAC,GACT,IAAI;EAAA,CACP,CAAC;AAAA,CACT;AACD,IAAMS,YAAqC,GAAG,SAAxCA,YAAqCA,CAAAC,KAAA;EAAA,IAAKC,SAAS,GAAAD,KAAA,CAATC,SAAS;IAAEJ,OAAO,GAAAG,KAAA,CAAPH,OAAO;EAAA,oBAC9DX,IAAA;IAAK,eAAY,WAAW;IAAAI,QAAA,EACvBW,SAAS,gBACNf,IAAA;MAAM,eAAY,mBAAmB;MAAAI,QAAA,EAAC;IAAe,CAAM,CAAC,gBAE5DJ,IAAA;MAAQ,eAAY,kBAAkB;MAACW,OAAO,EAAEA,OAAQ;MAAAP,QAAA,EAAC;IAEzD,CAAQ;EACX,CACA,CAAC;AAAA,CACT;AAEDY,QAAQ,CAAC,oBAAoB,EAAE,YAAM;EACjC,IAAMC,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAA,EAA4D;IAAA,IAAxDC,KAA8C,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IACjF,IAAMG,aAAa,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAC/B,IAAMC,YAA4C,GAAG;MACjDC,MAAM,EAAE,SAAS;MACjBnB,KAAK,EAAE,IAAI;MACXoB,WAAW,EAAE,IAAI;MACjBL,aAAa,EAAbA,aAAa;MACbM,kBAAkB,EAAE,KAAK;MACzBC,WAAW,EAAE1B,eAAe;MAC5B2B,SAAS,EAAEzB,aAAa;MACxB0B,QAAQ,EAAElB,YAAY;MACtBT,QAAQ,eAAEJ,IAAA;QAAK,eAAY,SAAS;QAAAI,QAAA,EAAC;MAAO,CAAK;IACrD,CAAC;IAED,OAAA4B,aAAA,CAAAA,aAAA,KACOpC,MAAM,cAACI,IAAA,CAACF,kBAAkB,EAAAkC,aAAA,CAAAA,aAAA,KAAKP,YAAY,GAAMP,KAAK,CAAG,CAAC,CAAC;MAC9DI,aAAa,EAAbA;IAAa;EAErB,CAAC;EAEDW,EAAE,CAAC,oFAAoF,EAAE,YAAM;IAC3FhB,wBAAwB,CAAC;MAACS,MAAM,EAAE,SAAS;MAAEC,WAAW,EAAE;IAAI,CAAC,CAAC;IAChEO,MAAM,CAACrC,MAAM,CAACsC,WAAW,CAAC,SAAS,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACzDF,MAAM,CAACrC,MAAM,CAACsC,WAAW,CAAC,WAAW,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAC3DF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,cAAc,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACpEF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,YAAY,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;EACtE,CAAC,CAAC;EAEFH,EAAE,CAAC,6EAA6E,EAAE,YAAM;IACpFhB,wBAAwB,CAAC;MAACS,MAAM,EAAE,SAAS;MAAEC,WAAW,EAAE;IAAK,CAAC,CAAC;IACjEO,MAAM,CAACrC,MAAM,CAACsC,WAAW,CAAC,SAAS,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACzDF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,WAAW,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACjEF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,cAAc,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACpEF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,YAAY,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;EACtE,CAAC,CAAC;EAEFH,EAAE,CAAC,kDAAkD,EAAE,YAAM;IACzDhB,wBAAwB,CAAC;MAACS,MAAM,EAAE;IAAS,CAAC,CAAC;IAC7CQ,MAAM,CAACrC,MAAM,CAACsC,WAAW,CAAC,cAAc,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAC9DF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,SAAS,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IAC/DF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,WAAW,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACjEF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,YAAY,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;EACtE,CAAC,CAAC;EAEFH,EAAE,CAAC,8CAA8C,EAAE,YAAM;IACrD,IAAM1B,KAAK,GAAG,IAAIgC,KAAK,CAAC,YAAY,CAAC;IACrCtB,wBAAwB,CAAC;MAACS,MAAM,EAAE,OAAO;MAAEnB,KAAK,EAALA;IAAK,CAAC,CAAC;IAClD2B,MAAM,CAACrC,MAAM,CAACsC,WAAW,CAAC,YAAY,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IAC5DF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,SAAS,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IAC/DF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,WAAW,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACjEF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,cAAc,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;IACpEF,MAAM,CAACrC,MAAM,CAAC2C,SAAS,CAAC,YAAY,CAAC,CAAC,CAACJ,iBAAiB,CAAC,CAAC;EAC9D,CAAC,CAAC;EAEFH,EAAE,CAAC,6DAA6D,EAAE,YAAM;IACpE,IAAAQ,qBAAA,GAAwBxB,wBAAwB,CAAC;QAC7CS,MAAM,EAAE,SAAS;QACjBC,WAAW,EAAE,IAAI;QACjBC,kBAAkB,EAAE;MACxB,CAAC,CAAC;MAJKN,aAAa,GAAAmB,qBAAA,CAAbnB,aAAa;IAKpB3B,SAAS,CAAC+C,KAAK,CAAC7C,MAAM,CAACsC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACvDD,MAAM,CAACZ,aAAa,CAAC,CAACqB,qBAAqB,CAAC,CAAC,CAAC;EAClD,CAAC,CAAC;EAEFV,EAAE,CAAC,uEAAuE,EAAE,YAAM;IAC9EhB,wBAAwB,CAAC;MACrBS,MAAM,EAAE,SAAS;MACjBC,WAAW,EAAE,IAAI;MACjBC,kBAAkB,EAAE;IACxB,CAAC,CAAC;IACFM,MAAM,CAACrC,MAAM,CAACsC,WAAW,CAAC,mBAAmB,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;IACnEF,MAAM,CAACrC,MAAM,CAACwC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAACC,GAAG,CAACF,iBAAiB,CAAC,CAAC;EAC5E,CAAC,CAAC;EAEFH,EAAE,CAAC,sCAAsC,EAAE,YAAM;IAC7C,IAAM1B,KAAK,GAAG,IAAIgC,KAAK,CAAC,YAAY,CAAC;IACrC,IAAMK,WAAW,GAAGrB,IAAI,CAACC,EAAE,CAAC,CAAC;IAC7BP,wBAAwB,CAAC;MACrBS,MAAM,EAAE,OAAO;MACfnB,KAAK,EAALA,KAAK;MACLqC,WAAW,EAAXA;IACJ,CAAC,CAAC;IACFV,MAAM,CAACrC,MAAM,CAACsC,WAAW,CAAC,cAAc,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC;EAClE,CAAC,CAAC;EAEFH,EAAE,CAAC,2DAA2D,EAAE,YAAM;IAClE,IAAM1B,KAAK,GAAG,IAAIgC,KAAK,CAAC,YAAY,CAAC;IACrC,IAAMK,WAAW,GAAG;MAChBhC,OAAO,EAAEW,IAAI,CAACC,EAAE,CAAC,CAAC;MAClBpB,QAAQ,EAAE;IACd,CAAC;IACDa,wBAAwB,CAAC;MACrBS,MAAM,EAAE,OAAO;MACfnB,KAAK,EAALA,KAAK;MACLqC,WAAW,EAAXA;IACJ,CAAC,CAAC;IACFV,MAAM,CAACrC,MAAM,CAAC2C,SAAS,CAAC,eAAe,CAAC,CAAC,CAACJ,iBAAiB,CAAC,CAAC;EACjE,CAAC,CAAC;EAEFH,EAAE,CAAC,6CAA6C,EAAE,YAAM;IACpD,IAAMJ,WAAW,GAAGN,IAAI,CAACC,EAAE,CAACrB,eAAe,CAAC;IAC5C,IAAM0C,gBAAgB,GAAG;MAACC,UAAU,EAAE;IAAM,CAAC;IAC7C7B,wBAAwB,CAAC;MACrBS,MAAM,EAAE,SAAS;MACjBG,WAAW,EAAXA,WAAW;MACXgB,gBAAgB,EAAhBA;IACJ,CAAC,CAAC;IACFX,MAAM,CAACL,WAAW,CAAC,CAACkB,oBAAoB,CACpCb,MAAM,CAACc,gBAAgB,CAACH,gBAAgB,CAAC,EACzCxB,SACJ,CAAC;EACL,CAAC,CAAC;EAEFY,EAAE,CAAC,yCAAyC,EAAE,YAAM;IAChD,IAAMH,SAAS,GAAGP,IAAI,CAACC,EAAE,CAACnB,aAAa,CAAC;IACxC,IAAM4C,cAAc,GAAG;MAACH,UAAU,EAAE;IAAM,CAAC;IAC3C,IAAMvC,KAAK,GAAG,IAAIgC,KAAK,CAAC,YAAY,CAAC;IACrCtB,wBAAwB,CAAC;MACrBS,MAAM,EAAE,OAAO;MACfnB,KAAK,EAALA,KAAK;MACLuB,SAAS,EAATA,SAAS;MACTmB,cAAc,EAAdA;IACJ,CAAC,CAAC;IACFf,MAAM,CAACJ,SAAS,CAAC,CAACiB,oBAAoB,CAACb,MAAM,CAACc,gBAAgB,CAACC,cAAc,CAAC,EAAE5B,SAAS,CAAC;EAC9F,CAAC,CAAC;EAEFY,EAAE,CAAC,uCAAuC,EAAE,YAAM;IAC9C,IAAMF,QAAQ,GAAGR,IAAI,CAACC,EAAE,CAACX,YAAY,CAAC;IACtC,IAAMqC,aAAa,GAAG;MAACJ,UAAU,EAAE;IAAM,CAAC;IAC1C7B,wBAAwB,CAAC;MACrBS,MAAM,EAAE,SAAS;MACjBC,WAAW,EAAE,IAAI;MACjBI,QAAQ,EAARA,QAAQ;MACRmB,aAAa,EAAbA;IACJ,CAAC,CAAC;IACFhB,MAAM,CAACH,QAAQ,CAAC,CAACgB,oBAAoB,CAACb,MAAM,CAACc,gBAAgB,CAACE,aAAa,CAAC,EAAE7B,SAAS,CAAC;EAC5F,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render, screen } from '@testing-library/react';
|
|
4
|
+
import { DataLoader } from '../DataLoader';
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
var MockLoadingView = function MockLoadingView() {
|
|
7
|
+
return /*#__PURE__*/_jsx("div", {
|
|
8
|
+
"data-testid": "loading-view",
|
|
9
|
+
children: "Loading..."
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
var MockErrorView = function MockErrorView(_ref) {
|
|
13
|
+
var error = _ref.error,
|
|
14
|
+
action = _ref.action;
|
|
15
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
16
|
+
"data-testid": "error-view",
|
|
17
|
+
children: [error ? "Error: ".concat(error.message) : 'No error', action ? /*#__PURE__*/_jsx("button", {
|
|
18
|
+
"data-testid": "error-action",
|
|
19
|
+
onClick: action.handler,
|
|
20
|
+
children: action.children || 'Retry'
|
|
21
|
+
}) : null]
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
describe('DataLoader', function () {
|
|
25
|
+
var renderDataLoader = function renderDataLoader() {
|
|
26
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
27
|
+
var defaultProps = {
|
|
28
|
+
status: 'success',
|
|
29
|
+
error: null,
|
|
30
|
+
LoadingView: MockLoadingView,
|
|
31
|
+
ErrorView: MockErrorView,
|
|
32
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
33
|
+
"data-testid": "content",
|
|
34
|
+
children: "Content"
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
return render(/*#__PURE__*/_jsx(DataLoader, _objectSpread(_objectSpread({}, defaultProps), props)));
|
|
38
|
+
};
|
|
39
|
+
it('should render children when status is success', function () {
|
|
40
|
+
renderDataLoader({
|
|
41
|
+
status: 'success'
|
|
42
|
+
});
|
|
43
|
+
expect(screen.getByTestId('content')).toBeInTheDocument();
|
|
44
|
+
expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();
|
|
45
|
+
expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();
|
|
46
|
+
});
|
|
47
|
+
it('should render LoadingView when status is loading', function () {
|
|
48
|
+
renderDataLoader({
|
|
49
|
+
status: 'loading'
|
|
50
|
+
});
|
|
51
|
+
expect(screen.getByTestId('loading-view')).toBeInTheDocument();
|
|
52
|
+
expect(screen.queryByTestId('content')).not.toBeInTheDocument();
|
|
53
|
+
expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();
|
|
54
|
+
});
|
|
55
|
+
it('should render ErrorView when status is error', function () {
|
|
56
|
+
var error = new Error('Test error');
|
|
57
|
+
renderDataLoader({
|
|
58
|
+
status: 'error',
|
|
59
|
+
error: error
|
|
60
|
+
});
|
|
61
|
+
expect(screen.getByTestId('error-view')).toBeInTheDocument();
|
|
62
|
+
expect(screen.queryByTestId('content')).not.toBeInTheDocument();
|
|
63
|
+
expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();
|
|
64
|
+
expect(screen.getByText(/Test error/)).toBeInTheDocument();
|
|
65
|
+
});
|
|
66
|
+
it('should pass errorAction to ErrorView', function () {
|
|
67
|
+
var error = new Error('Test error');
|
|
68
|
+
var errorAction = jest.fn();
|
|
69
|
+
renderDataLoader({
|
|
70
|
+
status: 'error',
|
|
71
|
+
error: error,
|
|
72
|
+
errorAction: errorAction
|
|
73
|
+
});
|
|
74
|
+
expect(screen.getByTestId('error-action')).toBeInTheDocument();
|
|
75
|
+
});
|
|
76
|
+
it('should pass errorAction with custom children to ErrorView', function () {
|
|
77
|
+
var error = new Error('Test error');
|
|
78
|
+
var errorAction = {
|
|
79
|
+
handler: jest.fn(),
|
|
80
|
+
children: 'Custom action'
|
|
81
|
+
};
|
|
82
|
+
renderDataLoader({
|
|
83
|
+
status: 'error',
|
|
84
|
+
error: error,
|
|
85
|
+
errorAction: errorAction
|
|
86
|
+
});
|
|
87
|
+
expect(screen.getByText('Custom action')).toBeInTheDocument();
|
|
88
|
+
});
|
|
89
|
+
it('should pass loadingViewProps to LoadingView', function () {
|
|
90
|
+
var LoadingView = jest.fn(MockLoadingView);
|
|
91
|
+
var loadingViewProps = {
|
|
92
|
+
customProp: 'test'
|
|
93
|
+
};
|
|
94
|
+
renderDataLoader({
|
|
95
|
+
status: 'loading',
|
|
96
|
+
LoadingView: LoadingView,
|
|
97
|
+
loadingViewProps: loadingViewProps
|
|
98
|
+
});
|
|
99
|
+
expect(LoadingView).toHaveBeenCalledWith(expect.objectContaining(loadingViewProps), undefined);
|
|
100
|
+
});
|
|
101
|
+
it('should pass errorViewProps to ErrorView', function () {
|
|
102
|
+
var ErrorView = jest.fn(MockErrorView);
|
|
103
|
+
var errorViewProps = {
|
|
104
|
+
customProp: 'test'
|
|
105
|
+
};
|
|
106
|
+
var error = new Error('Test error');
|
|
107
|
+
renderDataLoader({
|
|
108
|
+
status: 'error',
|
|
109
|
+
error: error,
|
|
110
|
+
ErrorView: ErrorView,
|
|
111
|
+
errorViewProps: errorViewProps
|
|
112
|
+
});
|
|
113
|
+
expect(ErrorView).toHaveBeenCalledWith(expect.objectContaining(errorViewProps), undefined);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
// #sourceMappingURL=DataLoader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","render","screen","DataLoader","jsx","_jsx","jsxs","_jsxs","MockLoadingView","children","MockErrorView","_ref","error","action","concat","message","onClick","handler","describe","renderDataLoader","props","arguments","length","undefined","defaultProps","status","LoadingView","ErrorView","_objectSpread","it","expect","getByTestId","toBeInTheDocument","queryByTestId","not","Error","getByText","errorAction","jest","fn","loadingViewProps","customProp","toHaveBeenCalledWith","objectContaining","errorViewProps"],"sources":["DataLoader.test.tsx"],"sourcesContent":["import React from 'react';\n\nimport {render, screen} from '@testing-library/react';\n\nimport type {ErrorViewProps} from '../../types';\nimport {DataLoader} from '../DataLoader';\nimport type {DataLoaderProps} from '../types';\n\nconst MockLoadingView = () => <div data-testid=\"loading-view\">Loading...</div>;\nconst MockErrorView: React.FC<ErrorViewProps<Error>> = ({error, action}) => (\n <div data-testid=\"error-view\">\n {error ? `Error: ${error.message}` : 'No error'}\n {action ? (\n <button data-testid=\"error-action\" onClick={action.handler}>\n {action.children || 'Retry'}\n </button>\n ) : null}\n </div>\n);\n\ndescribe('DataLoader', () => {\n const renderDataLoader = (props: Partial<DataLoaderProps<Error>> = {}) => {\n const defaultProps: DataLoaderProps<Error> = {\n status: 'success',\n error: null,\n LoadingView: MockLoadingView,\n ErrorView: MockErrorView,\n children: <div data-testid=\"content\">Content</div>,\n };\n\n return render(<DataLoader {...defaultProps} {...props} />);\n };\n\n it('should render children when status is success', () => {\n renderDataLoader({status: 'success'});\n expect(screen.getByTestId('content')).toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render LoadingView when status is loading', () => {\n renderDataLoader({status: 'loading'});\n expect(screen.getByTestId('loading-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('error-view')).not.toBeInTheDocument();\n });\n\n it('should render ErrorView when status is error', () => {\n const error = new Error('Test error');\n renderDataLoader({status: 'error', error});\n expect(screen.getByTestId('error-view')).toBeInTheDocument();\n expect(screen.queryByTestId('content')).not.toBeInTheDocument();\n expect(screen.queryByTestId('loading-view')).not.toBeInTheDocument();\n expect(screen.getByText(/Test error/)).toBeInTheDocument();\n });\n\n it('should pass errorAction to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = jest.fn();\n renderDataLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByTestId('error-action')).toBeInTheDocument();\n });\n\n it('should pass errorAction with custom children to ErrorView', () => {\n const error = new Error('Test error');\n const errorAction = {\n handler: jest.fn(),\n children: 'Custom action',\n };\n renderDataLoader({\n status: 'error',\n error,\n errorAction,\n });\n expect(screen.getByText('Custom action')).toBeInTheDocument();\n });\n\n it('should pass loadingViewProps to LoadingView', () => {\n const LoadingView = jest.fn(MockLoadingView);\n const loadingViewProps = {customProp: 'test'};\n renderDataLoader({\n status: 'loading',\n LoadingView,\n loadingViewProps,\n });\n expect(LoadingView).toHaveBeenCalledWith(\n expect.objectContaining(loadingViewProps),\n undefined,\n );\n });\n\n it('should pass errorViewProps to ErrorView', () => {\n const ErrorView = jest.fn(MockErrorView);\n const errorViewProps = {customProp: 'test'};\n const error = new Error('Test error');\n renderDataLoader({\n status: 'error',\n error,\n ErrorView,\n errorViewProps,\n });\n expect(ErrorView).toHaveBeenCalledWith(expect.objectContaining(errorViewProps), undefined);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,4 +3,4 @@ import type { DataManager } from '../core';
|
|
|
3
3
|
export interface WithDataManagerProps {
|
|
4
4
|
dataManager: DataManager;
|
|
5
5
|
}
|
|
6
|
-
export declare const withDataManager: <T
|
|
6
|
+
export declare const withDataManager: <T>(Component: React.ComponentType<T & WithDataManagerProps>) => React.FC<T>;
|
|
@@ -2,14 +2,14 @@ import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { useDataManager } from './DataManagerContext';
|
|
4
4
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
-
export var withDataManager = function withDataManager(
|
|
5
|
+
export var withDataManager = function withDataManager(Component) {
|
|
6
6
|
var ComponentWithDataManager = function ComponentWithDataManager(props) {
|
|
7
7
|
var dataManager = useDataManager();
|
|
8
|
-
return /*#__PURE__*/_jsx(
|
|
8
|
+
return /*#__PURE__*/_jsx(Component, _objectSpread(_objectSpread({}, props), {}, {
|
|
9
9
|
dataManager: dataManager
|
|
10
10
|
}));
|
|
11
11
|
};
|
|
12
|
-
ComponentWithDataManager.displayName = "WithDataManager".concat(
|
|
12
|
+
ComponentWithDataManager.displayName = "WithDataManager".concat(Component.displayName || Component.name || 'Component');
|
|
13
13
|
return ComponentWithDataManager;
|
|
14
14
|
};
|
|
15
15
|
// #sourceMappingURL=withDataManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useDataManager","jsx","_jsx","withDataManager","
|
|
1
|
+
{"version":3,"names":["React","useDataManager","jsx","_jsx","withDataManager","Component","ComponentWithDataManager","props","dataManager","_objectSpread","displayName","concat","name"],"sources":["withDataManager.tsx"],"sourcesContent":["import React from 'react';\n\nimport type {DataManager} from '../core';\n\nimport {useDataManager} from './DataManagerContext';\n\nexport interface WithDataManagerProps {\n dataManager: DataManager;\n}\n\nexport const withDataManager = <T,>(Component: React.ComponentType<T & WithDataManagerProps>) => {\n const ComponentWithDataManager: React.FC<T> = (props) => {\n const dataManager = useDataManager();\n\n return <Component {...props} dataManager={dataManager} />;\n };\n\n ComponentWithDataManager.displayName = `WithDataManager${\n Component.displayName || Component.name || 'Component'\n }`;\n\n return ComponentWithDataManager;\n};\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAIzB,SAAQC,cAAc,QAAO,sBAAsB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMpD,OAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAQC,SAAwD,EAAK;EAC7F,IAAMC,wBAAqC,GAAG,SAAxCA,wBAAqCA,CAAIC,KAAK,EAAK;IACrD,IAAMC,WAAW,GAAGP,cAAc,CAAC,CAAC;IAEpC,oBAAOE,IAAA,CAACE,SAAS,EAAAI,aAAA,CAAAA,aAAA,KAAKF,KAAK;MAAEC,WAAW,EAAEA;IAAY,EAAE,CAAC;EAC7D,CAAC;EAEDF,wBAAwB,CAACI,WAAW,qBAAAC,MAAA,CAChCN,SAAS,CAACK,WAAW,IAAIL,SAAS,CAACO,IAAI,IAAI,WAAW,CACxD;EAEF,OAAON,wBAAwB;AACnC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["undefinedSymbol","Symbol","nullSymbol"],"sources":["constants.ts"],"sourcesContent":["export const undefinedSymbol = Symbol('undefined');\nexport const nullSymbol = Symbol('null');\n"],"mappings":"AAAA,OAAO,IAAMA,eAAe,GAAGC,MAAM,CAAC,WAAW,CAAC;AAClD,OAAO,IAAMC,UAAU,GAAGD,MAAM,CAAC,MAAM,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
import { QueryClient, useQueryClient } from '@tanstack/react-query';
|
|
3
|
+
import { renderHook } from '@testing-library/react';
|
|
4
|
+
import { useQueryContext } from '../useQueryContext';
|
|
5
|
+
jest.mock('@tanstack/react-query', function () {
|
|
6
|
+
var originalModule = jest.requireActual('@tanstack/react-query');
|
|
7
|
+
return _objectSpread(_objectSpread({}, originalModule), {}, {
|
|
8
|
+
useQueryClient: jest.fn()
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
describe('useQueryContext', function () {
|
|
12
|
+
var mockQueryClient = new QueryClient();
|
|
13
|
+
beforeEach(function () {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
useQueryClient.mockReturnValue(mockQueryClient);
|
|
16
|
+
});
|
|
17
|
+
it('should return context with queryClient', function () {
|
|
18
|
+
var _renderHook = renderHook(function () {
|
|
19
|
+
return useQueryContext();
|
|
20
|
+
}),
|
|
21
|
+
result = _renderHook.result;
|
|
22
|
+
expect(result.current).toEqual({
|
|
23
|
+
queryClient: mockQueryClient
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
it('should memoize the context', function () {
|
|
27
|
+
var _renderHook2 = renderHook(function () {
|
|
28
|
+
return useQueryContext();
|
|
29
|
+
}),
|
|
30
|
+
result = _renderHook2.result,
|
|
31
|
+
rerender = _renderHook2.rerender;
|
|
32
|
+
var firstResult = result.current;
|
|
33
|
+
rerender();
|
|
34
|
+
expect(result.current).toBe(firstResult);
|
|
35
|
+
});
|
|
36
|
+
it('should update context when queryClient changes', function () {
|
|
37
|
+
var _renderHook3 = renderHook(function () {
|
|
38
|
+
return useQueryContext();
|
|
39
|
+
}),
|
|
40
|
+
result = _renderHook3.result,
|
|
41
|
+
rerender = _renderHook3.rerender;
|
|
42
|
+
var firstResult = result.current;
|
|
43
|
+
var newMockQueryClient = new QueryClient();
|
|
44
|
+
useQueryClient.mockReturnValue(newMockQueryClient);
|
|
45
|
+
rerender();
|
|
46
|
+
expect(result.current).not.toBe(firstResult);
|
|
47
|
+
expect(result.current).toEqual({
|
|
48
|
+
queryClient: newMockQueryClient
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
// #sourceMappingURL=useQueryContext.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["QueryClient","useQueryClient","renderHook","useQueryContext","jest","mock","originalModule","requireActual","_objectSpread","fn","describe","mockQueryClient","beforeEach","clearAllMocks","mockReturnValue","it","_renderHook","result","expect","current","toEqual","queryClient","_renderHook2","rerender","firstResult","toBe","_renderHook3","newMockQueryClient","not"],"sources":["useQueryContext.test.ts"],"sourcesContent":["import {QueryClient, useQueryClient} from '@tanstack/react-query';\nimport {renderHook} from '@testing-library/react';\n\nimport {useQueryContext} from '../useQueryContext';\n\njest.mock('@tanstack/react-query', () => {\n const originalModule = jest.requireActual('@tanstack/react-query');\n return {\n ...originalModule,\n useQueryClient: jest.fn(),\n };\n});\n\ndescribe('useQueryContext', () => {\n const mockQueryClient = new QueryClient();\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n (useQueryClient as jest.Mock).mockReturnValue(mockQueryClient);\n });\n\n it('should return context with queryClient', () => {\n const {result} = renderHook(() => useQueryContext());\n\n expect(result.current).toEqual({queryClient: mockQueryClient});\n });\n\n it('should memoize the context', () => {\n const {result, rerender} = renderHook(() => useQueryContext());\n\n const firstResult = result.current;\n\n rerender();\n\n expect(result.current).toBe(firstResult);\n });\n\n it('should update context when queryClient changes', () => {\n const {result, rerender} = renderHook(() => useQueryContext());\n\n const firstResult = result.current;\n\n const newMockQueryClient = new QueryClient();\n\n (useQueryClient as jest.Mock).mockReturnValue(newMockQueryClient);\n\n rerender();\n\n expect(result.current).not.toBe(firstResult);\n expect(result.current).toEqual({queryClient: newMockQueryClient});\n });\n});\n"],"mappings":";AAAA,SAAQA,WAAW,EAAEC,cAAc,QAAO,uBAAuB;AACjE,SAAQC,UAAU,QAAO,wBAAwB;AAEjD,SAAQC,eAAe,QAAO,oBAAoB;AAElDC,IAAI,CAACC,IAAI,CAAC,uBAAuB,EAAE,YAAM;EACrC,IAAMC,cAAc,GAAGF,IAAI,CAACG,aAAa,CAAC,uBAAuB,CAAC;EAClE,OAAAC,aAAA,CAAAA,aAAA,KACOF,cAAc;IACjBL,cAAc,EAAEG,IAAI,CAACK,EAAE,CAAC;EAAC;AAEjC,CAAC,CAAC;AAEFC,QAAQ,CAAC,iBAAiB,EAAE,YAAM;EAC9B,IAAMC,eAAe,GAAG,IAAIX,WAAW,CAAC,CAAC;EAEzCY,UAAU,CAAC,YAAM;IACbR,IAAI,CAACS,aAAa,CAAC,CAAC;IAEnBZ,cAAc,CAAea,eAAe,CAACH,eAAe,CAAC;EAClE,CAAC,CAAC;EAEFI,EAAE,CAAC,wCAAwC,EAAE,YAAM;IAC/C,IAAAC,WAAA,GAAiBd,UAAU,CAAC;QAAA,OAAMC,eAAe,CAAC,CAAC;MAAA,EAAC;MAA7Cc,MAAM,GAAAD,WAAA,CAANC,MAAM;IAEbC,MAAM,CAACD,MAAM,CAACE,OAAO,CAAC,CAACC,OAAO,CAAC;MAACC,WAAW,EAAEV;IAAe,CAAC,CAAC;EAClE,CAAC,CAAC;EAEFI,EAAE,CAAC,4BAA4B,EAAE,YAAM;IACnC,IAAAO,YAAA,GAA2BpB,UAAU,CAAC;QAAA,OAAMC,eAAe,CAAC,CAAC;MAAA,EAAC;MAAvDc,MAAM,GAAAK,YAAA,CAANL,MAAM;MAAEM,QAAQ,GAAAD,YAAA,CAARC,QAAQ;IAEvB,IAAMC,WAAW,GAAGP,MAAM,CAACE,OAAO;IAElCI,QAAQ,CAAC,CAAC;IAEVL,MAAM,CAACD,MAAM,CAACE,OAAO,CAAC,CAACM,IAAI,CAACD,WAAW,CAAC;EAC5C,CAAC,CAAC;EAEFT,EAAE,CAAC,gDAAgD,EAAE,YAAM;IACvD,IAAAW,YAAA,GAA2BxB,UAAU,CAAC;QAAA,OAAMC,eAAe,CAAC,CAAC;MAAA,EAAC;MAAvDc,MAAM,GAAAS,YAAA,CAANT,MAAM;MAAEM,QAAQ,GAAAG,YAAA,CAARH,QAAQ;IAEvB,IAAMC,WAAW,GAAGP,MAAM,CAACE,OAAO;IAElC,IAAMQ,kBAAkB,GAAG,IAAI3B,WAAW,CAAC,CAAC;IAE3CC,cAAc,CAAea,eAAe,CAACa,kBAAkB,CAAC;IAEjEJ,QAAQ,CAAC,CAAC;IAEVL,MAAM,CAACD,MAAM,CAACE,OAAO,CAAC,CAACS,GAAG,CAACH,IAAI,CAACD,WAAW,CAAC;IAC5CN,MAAM,CAACD,MAAM,CAACE,OAAO,CAAC,CAACC,OAAO,CAAC;MAACC,WAAW,EAAEM;IAAkB,CAAC,CAAC;EACrE,CAAC,CAAC;AACN,CAAC,CAAC","ignoreList":[]}
|