@applicaster/zapp-react-native-ui-components 13.0.0-alpha.6525006318 → 13.0.0-alpha.6944415045
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/Components/AppContainer/__tests__/__snapshots__/AppContainer.test.js.snap +1 -1
- package/Components/AudioPlayer/__tests__/__snapshots__/Runtime.test.js.snap +4 -4
- package/Components/AudioPlayer/__tests__/__snapshots__/artWork.test.js.snap +3 -3
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +6 -6
- package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +7 -7
- package/Components/AudioPlayer/__tests__/__snapshots__/channel.test.js.snap +3 -3
- package/Components/AudioPlayer/__tests__/__snapshots__/summary.test.js.snap +2 -2
- package/Components/AudioPlayer/__tests__/__snapshots__/title.test.js.snap +2 -2
- package/Components/BaseFocusable/index.tsx +65 -28
- package/Components/Cell/Cell.tsx +11 -9
- package/Components/Cell/CellWithFocusable.tsx +1 -1
- package/Components/Cell/TvOSCellComponent.tsx +23 -30
- package/Components/Cell/index.js +3 -1
- package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +20 -20
- package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +5 -3
- package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +5 -5
- package/Components/ComponentResolver/__tests__/componentResolver.test.js +11 -9
- package/Components/DisplayState/__tests__/__snapshots__/displayState.test.js.snap +2 -2
- package/Components/Focusable/Focusable.tsx +0 -54
- package/Components/Focusable/FocusableTvOS.tsx +6 -2
- package/Components/FocusableList/index.tsx +25 -10
- package/Components/FocusableScrollView/index.tsx +39 -12
- package/Components/GeneralContentScreen/utils/__tests__/useCurationAPI.test.js +76 -7
- package/Components/GeneralContentScreen/utils/useCurationAPI.ts +53 -9
- package/Components/Layout/TV/NavBarContainer.tsx +8 -7
- package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +1 -0
- package/Components/Layout/TV/__tests__/__snapshots__/LayoutContainer.test.tsx.snap +1 -1
- package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -3
- package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +9 -9
- package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +1 -1
- package/Components/Layout/TV/__tests__/index.test.tsx +7 -3
- package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +1 -1
- package/Components/MasterCell/DefaultComponents/SecondaryImage/__tests__/__snapshots__/Image.test.tsx.snap +3 -3
- package/Components/MasterCell/SharedUI/CollapsibleTextContainer/__tests__/__snapshots__/index.test.tsx.snap +1 -1
- package/Components/MasterCell/__tests__/__snapshots__/dataAdapter.test.js.snap +180 -180
- package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +7 -7
- package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +34 -34
- package/Components/MasterCell/hooks/useAsyncRendering/index.ts +2 -2
- package/Components/NativeFocusables/{index.js → index.ts} +4 -2
- package/Components/OfflineHandler/__tests__/__snapshots__/index.test.tsx.snap +7 -7
- package/Components/OfflineHandler/__tests__/index.test.tsx +28 -25
- package/Components/PlayerContainer/PlayerContainer.tsx +5 -11
- package/Components/PlayerContainer/PlayerContainerContext.tsx +9 -0
- package/Components/River/RefreshControl.tsx +1 -1
- package/Components/River/TV/index.tsx +6 -1
- package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +17 -17
- package/Components/River/__tests__/__snapshots__/river.test.js.snap +12 -12
- package/Components/River/__tests__/componentsMap.test.js +47 -12
- package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +1 -1
- package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +1 -1
- package/Components/Screen/__tests__/Screen.test.tsx +41 -27
- package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +4 -4
- package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +2 -2
- package/Components/ScreenResolver/__tests__/screenResolver.test.js +31 -27
- package/Components/Tabs/Tab.tsx +1 -0
- package/Components/TextInputTv/__tests__/TextInputTv.test.js +42 -42
- package/Components/TextInputTv/__tests__/__snapshots__/TextInputTv.test.js.snap +7 -0
- package/Components/TextInputTv/index.tsx +2 -2
- package/Components/Touchable/__tests__/__snapshots__/touchable.test.tsx.snap +2 -2
- package/Components/Transitioner/__tests__/__snapshots__/AnimationManager.test.js.snap +26 -26
- package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +9 -9
- package/Components/Transitioner/__tests__/__snapshots__/config.test.js.snap +20 -20
- package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +2 -2
- package/Components/VideoLive/__tests__/PlayerLiveImageComponent.test.tsx +12 -7
- package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +6 -6
- package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +5 -1
- package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +5 -1
- package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +1 -1
- package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +4 -10
- package/Components/VideoModal/ModalAnimation/index.ts +2 -1
- package/Components/VideoModal/ModalAnimation/useModalAnimationContext.ts +6 -0
- package/Components/VideoModal/__tests__/PlayerDetails.test.tsx +5 -2
- package/Components/VideoModal/__tests__/PlayerWrapper.test.tsx +12 -9
- package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +4 -4
- package/Components/VideoModal/__tests__/__snapshots__/PlayerWrapper.test.tsx.snap +78 -78
- package/Components/VideoModal/utils.ts +2 -4
- package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +2 -2
- package/Components/Viewport/ViewportTracker/__tests__/__snapshots__/viewportTracker.test.js.snap +1 -1
- package/Components/ZappFrameworkComponents/BarView/BarView.tsx +1 -0
- package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +11 -11
- package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +30 -30
- package/Contexts/ComponentsMapOffsetContext/index.tsx +46 -0
- package/Contexts/ConfigutaionContext/__tests__/__snapshots__/ConfigurationProvider.test.tsx.snap +1 -1
- package/Contexts/FocusableGroupContext/withFocusableContext.tsx +18 -11
- package/Decorators/Analytics/{index.js → index.tsx} +11 -11
- package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +2 -2
- package/Decorators/RiverFeedLoader/__tests__/__snapshots__/riverFeedLoader.test.tsx.snap +77 -77
- package/Decorators/RiverFeedLoader/__tests__/riverFeedLoader.test.tsx +34 -39
- package/Decorators/RiverFeedLoader/__tests__/utils.test.ts +0 -9
- package/Decorators/RiverFeedLoader/index.tsx +1 -1
- package/Decorators/RiverFeedLoader/utils/getDatasourceUrl.ts +39 -0
- package/Decorators/RiverFeedLoader/utils/index.ts +29 -0
- package/Decorators/RiverFeedLoader/utils/usePipesContexts.ts +40 -0
- package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +5 -5
- package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +16 -10
- package/Decorators/ZappPipesDataConnector/index.tsx +1 -1
- package/package.json +12 -6
- package/Decorators/RiverFeedLoader/utils.ts +0 -100
|
@@ -6,42 +6,42 @@ exports[`When River has a general_content type <River /> renders correctly 1`] =
|
|
|
6
6
|
>
|
|
7
7
|
<RiverWithData
|
|
8
8
|
appData={
|
|
9
|
-
|
|
9
|
+
{
|
|
10
10
|
"layoutVersion": "v1",
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
dispatch={[Function]}
|
|
14
14
|
rivers={
|
|
15
|
-
|
|
16
|
-
"A1234":
|
|
15
|
+
{
|
|
16
|
+
"A1234": {
|
|
17
17
|
"home": true,
|
|
18
18
|
"id": "A1234",
|
|
19
19
|
"name": "foo",
|
|
20
20
|
"type": "general_content",
|
|
21
|
-
"ui_components":
|
|
22
|
-
|
|
21
|
+
"ui_components": [
|
|
22
|
+
{
|
|
23
23
|
"component_type": "hero",
|
|
24
24
|
},
|
|
25
|
-
|
|
25
|
+
{
|
|
26
26
|
"component_type": "grid",
|
|
27
27
|
},
|
|
28
28
|
],
|
|
29
29
|
},
|
|
30
|
-
"B4567":
|
|
30
|
+
"B4567": {
|
|
31
31
|
"id": "B4567",
|
|
32
32
|
},
|
|
33
|
-
"C0987":
|
|
33
|
+
"C0987": {
|
|
34
34
|
"home": false,
|
|
35
35
|
"id": "C0987",
|
|
36
36
|
"name": "Some-Screen-Plugin",
|
|
37
37
|
"type": "some-screen-plugin",
|
|
38
|
-
"ui_components":
|
|
38
|
+
"ui_components": [],
|
|
39
39
|
},
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
screenId="A1234"
|
|
43
43
|
store={
|
|
44
|
-
|
|
44
|
+
{
|
|
45
45
|
"clearActions": [Function],
|
|
46
46
|
"dispatch": [Function],
|
|
47
47
|
"getActions": [Function],
|
|
@@ -64,13 +64,13 @@ exports[`When River has a general_content type <RiverComponent /> renders correc
|
|
|
64
64
|
exports[`When River has any other type other than general_content <RiverComponent /> renders correctly 1`] = `
|
|
65
65
|
<WithProvider
|
|
66
66
|
screenData={
|
|
67
|
-
|
|
67
|
+
{
|
|
68
68
|
"groupId": undefined,
|
|
69
69
|
"home": false,
|
|
70
70
|
"id": "C0987",
|
|
71
71
|
"name": "Some-Screen-Plugin",
|
|
72
72
|
"type": "some-screen-plugin",
|
|
73
|
-
"ui_components":
|
|
73
|
+
"ui_components": [],
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
screenId="C0987"
|
|
@@ -75,7 +75,7 @@ const riverComponents = [
|
|
|
75
75
|
},
|
|
76
76
|
];
|
|
77
77
|
|
|
78
|
-
const
|
|
78
|
+
const mockScreenData = {
|
|
79
79
|
ui_components: riverComponents,
|
|
80
80
|
rules: { pull_to_refresh_enabled: false },
|
|
81
81
|
id: "A1234",
|
|
@@ -85,18 +85,53 @@ jest.mock("@applicaster/zapp-react-native-utils/localizationUtils", () => ({
|
|
|
85
85
|
useIsRTL: jest.fn(() => mock_rtl_flag),
|
|
86
86
|
}));
|
|
87
87
|
|
|
88
|
-
jest.mock(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
jest.mock(
|
|
89
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation",
|
|
90
|
+
() => ({
|
|
91
|
+
useNavigation: jest.fn(() => ({ currentRoute: "/river/A1234" })),
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
94
|
|
|
95
|
-
jest.mock(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
jest.mock(
|
|
96
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useRoute",
|
|
97
|
+
() => ({
|
|
98
|
+
useRoute: jest.fn(() => ({
|
|
99
|
+
pathname: "/river/A1234",
|
|
100
|
+
screenData: mockScreenData,
|
|
101
|
+
})),
|
|
102
|
+
})
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
jest.mock(
|
|
106
|
+
"@applicaster/zapp-react-native-utils/reactHooks/navigation/useIsScreenActive",
|
|
107
|
+
() => ({
|
|
108
|
+
useIsScreenActive: jest.fn().mockReturnValue(true),
|
|
109
|
+
})
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
jest.mock(
|
|
113
|
+
"@applicaster/zapp-react-native-utils/reactHooks/screen/useCurrentScreenData",
|
|
114
|
+
() => ({
|
|
115
|
+
useCurrentScreenData: jest.fn(() => mockScreenData),
|
|
116
|
+
})
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
jest.mock(
|
|
120
|
+
"@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenData",
|
|
121
|
+
() => ({
|
|
122
|
+
useScreenData: jest.fn(() => mockScreenData),
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
jest.mock(
|
|
127
|
+
"@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext",
|
|
128
|
+
() => ({
|
|
129
|
+
...jest.requireActual(
|
|
130
|
+
"@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenContext"
|
|
131
|
+
),
|
|
132
|
+
useScreenContext: jest.fn(() => mockScreenData),
|
|
133
|
+
})
|
|
134
|
+
);
|
|
100
135
|
|
|
101
136
|
const { View } = require("react-native");
|
|
102
137
|
const { ComponentsMap } = require("../ComponentsMap/ComponentsMap");
|
|
@@ -46,27 +46,37 @@ jest.mock("@applicaster/zapp-react-native-utils/theme", () => ({
|
|
|
46
46
|
})),
|
|
47
47
|
}));
|
|
48
48
|
|
|
49
|
-
const
|
|
49
|
+
const mockNavBar = jest.fn((props) => {
|
|
50
|
+
const View = jest.requireActual("react-native").View;
|
|
51
|
+
|
|
52
|
+
return <View testID="navBar" {...props} />;
|
|
53
|
+
});
|
|
50
54
|
|
|
51
55
|
jest.mock(
|
|
52
56
|
"@applicaster/zapp-react-native-app/App/Layout/layoutHelpers",
|
|
53
57
|
() => ({
|
|
54
|
-
getNavigationPluginModule: () =>
|
|
58
|
+
getNavigationPluginModule: () => mockNavBar,
|
|
55
59
|
})
|
|
56
60
|
);
|
|
57
61
|
|
|
58
|
-
jest.mock(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
62
|
+
jest.mock(
|
|
63
|
+
"@applicaster/zapp-react-native-utils/reactHooks/screen/useCurrentScreenData",
|
|
64
|
+
() => ({
|
|
65
|
+
useCurrentScreenData: jest.fn(() => ({
|
|
66
|
+
id: "testId",
|
|
67
|
+
})),
|
|
68
|
+
})
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
jest.mock(
|
|
72
|
+
"@applicaster/zapp-react-native-utils/reactHooks/screen/useScreenData",
|
|
73
|
+
() => ({
|
|
74
|
+
useScreenData: jest.fn(() => ({
|
|
75
|
+
id: "testId",
|
|
76
|
+
navigations: [{ id: "testId", category: "nav_bar" }],
|
|
77
|
+
})),
|
|
78
|
+
})
|
|
79
|
+
);
|
|
70
80
|
|
|
71
81
|
jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
|
|
72
82
|
isNavBarVisible: mockIsNavBarVisible,
|
|
@@ -84,20 +94,24 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
|
|
|
84
94
|
useIsScreenActive: jest.fn().mockReturnValue(true),
|
|
85
95
|
}));
|
|
86
96
|
|
|
87
|
-
jest.mock("@applicaster/zapp-react-native-redux/hooks", () =>
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
97
|
+
jest.mock("@applicaster/zapp-react-native-redux/hooks/usePickFromState", () => {
|
|
98
|
+
const View = jest.requireActual("react-native").View;
|
|
99
|
+
|
|
100
|
+
return {
|
|
101
|
+
usePickFromState: () => ({
|
|
102
|
+
plugins: [
|
|
103
|
+
{
|
|
104
|
+
name: "Offline Plugin",
|
|
105
|
+
identifier: "offline-experience",
|
|
106
|
+
type: "general",
|
|
107
|
+
module: {
|
|
108
|
+
OfflineFallbackScreen: ({ children }) => <View>{children}</View>, // eslint-disable-line
|
|
109
|
+
},
|
|
96
110
|
},
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
})
|
|
111
|
+
],
|
|
112
|
+
}),
|
|
113
|
+
};
|
|
114
|
+
});
|
|
101
115
|
|
|
102
116
|
const {
|
|
103
117
|
allowedOrientationsForScreen,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
exports[`<Screen Component /> when the navbar should be hidden renders correctly 1`] = `
|
|
4
4
|
<View
|
|
5
5
|
style={
|
|
6
|
-
|
|
6
|
+
{
|
|
7
7
|
"backgroundColor": "blue",
|
|
8
8
|
"flex": 1,
|
|
9
9
|
"paddingTop": 0,
|
|
@@ -22,7 +22,7 @@ exports[`<Screen Component /> when the navbar should be hidden renders correctly
|
|
|
22
22
|
<View
|
|
23
23
|
pathname="/river/testId"
|
|
24
24
|
screenData={
|
|
25
|
-
|
|
25
|
+
{
|
|
26
26
|
"id": "testId",
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -35,7 +35,7 @@ exports[`<Screen Component /> when the navbar should be hidden renders correctly
|
|
|
35
35
|
exports[`<Screen Component /> when the navbar should show renders correctly 1`] = `
|
|
36
36
|
<View
|
|
37
37
|
style={
|
|
38
|
-
|
|
38
|
+
{
|
|
39
39
|
"backgroundColor": "blue",
|
|
40
40
|
"flex": 1,
|
|
41
41
|
"paddingTop": 0,
|
|
@@ -54,7 +54,7 @@ exports[`<Screen Component /> when the navbar should show renders correctly 1`]
|
|
|
54
54
|
<View
|
|
55
55
|
pathname="/river/testId"
|
|
56
56
|
screenData={
|
|
57
|
-
|
|
57
|
+
{
|
|
58
58
|
"id": "testId",
|
|
59
59
|
}
|
|
60
60
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
exports[`<ScreenResolver /> renders correctly 1`] = `
|
|
4
4
|
<mockConstructor
|
|
5
|
-
screenData={
|
|
5
|
+
screenData={{}}
|
|
6
6
|
screenId="1234"
|
|
7
7
|
screenType="screen_type_1"
|
|
8
8
|
/>
|
|
@@ -11,7 +11,7 @@ exports[`<ScreenResolver /> renders correctly 1`] = `
|
|
|
11
11
|
exports[`<ScreenResolver /> wraps the player with the playerController component when the screenType is playable 1`] = `
|
|
12
12
|
<HandlePlayable
|
|
13
13
|
isModal={false}
|
|
14
|
-
item={
|
|
14
|
+
item={{}}
|
|
15
15
|
mode="FULLSCREEN"
|
|
16
16
|
/>
|
|
17
17
|
`;
|
|
@@ -2,42 +2,39 @@ import React from "react";
|
|
|
2
2
|
import { View } from "react-native";
|
|
3
3
|
import { shallow } from "enzyme";
|
|
4
4
|
import { shallowToJson } from "enzyme-to-json";
|
|
5
|
-
import { connect as realConnect } from "react-redux";
|
|
6
|
-
|
|
7
5
|
const pluginConfiguration = { foo: "bar" };
|
|
8
6
|
|
|
9
7
|
const ScreenType1 = jest.fn(() => <View />);
|
|
10
8
|
const ScreenType2 = jest.fn(() => <View />);
|
|
9
|
+
const PlayerController = jest.fn(() => <View />);
|
|
11
10
|
|
|
12
|
-
const
|
|
11
|
+
const mockScreenType3 = {
|
|
13
12
|
module: jest.fn(() => <View />),
|
|
14
13
|
name: "ScreenType3",
|
|
15
14
|
type: "screen_type_3",
|
|
16
15
|
configuration: pluginConfiguration,
|
|
17
16
|
};
|
|
18
17
|
|
|
19
|
-
const
|
|
18
|
+
const mockScreenType4 = {
|
|
20
19
|
module: jest.fn(() => <View />),
|
|
21
20
|
name: "ScreenType4",
|
|
22
21
|
type: "screen_type_4",
|
|
23
22
|
};
|
|
24
23
|
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
const playerPlugin = {
|
|
24
|
+
const mockPlayerPlugin = {
|
|
28
25
|
module: jest.fn(() => <View />),
|
|
29
26
|
name: "playerPlugin",
|
|
30
27
|
type: "player",
|
|
31
28
|
};
|
|
32
29
|
|
|
33
|
-
const
|
|
30
|
+
const mockScreenPlugin = {
|
|
34
31
|
module: jest.fn(() => <View />),
|
|
35
32
|
type: "general",
|
|
36
33
|
name: "Screen plugin",
|
|
37
34
|
identifier: "screen-plugin",
|
|
38
35
|
};
|
|
39
36
|
|
|
40
|
-
const
|
|
37
|
+
const mockPluginWithConfig = {
|
|
41
38
|
module: jest.fn(() => <View />),
|
|
42
39
|
type: "general",
|
|
43
40
|
name: "Plugin with config",
|
|
@@ -47,15 +44,7 @@ const PluginWithConfig = {
|
|
|
47
44
|
|
|
48
45
|
const components = { ScreenType1, ScreenType2, PlayerController };
|
|
49
46
|
|
|
50
|
-
const
|
|
51
|
-
ScreenType3,
|
|
52
|
-
ScreenType4,
|
|
53
|
-
playerPlugin,
|
|
54
|
-
ScreenPlugin,
|
|
55
|
-
PluginWithConfig,
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const withAnalytics = {
|
|
47
|
+
const mockWithAnalytics = {
|
|
59
48
|
sendOnClickEvent: jest.fn(),
|
|
60
49
|
sendMenuClickEvent: jest.fn(),
|
|
61
50
|
sendMenuToggleEvent: jest.fn(),
|
|
@@ -66,24 +55,39 @@ const withAnalytics = {
|
|
|
66
55
|
sendScreenEvent: jest.fn(),
|
|
67
56
|
};
|
|
68
57
|
|
|
58
|
+
const mockUsePickFromState = jest.fn(() => {
|
|
59
|
+
return {
|
|
60
|
+
components,
|
|
61
|
+
plugins: {
|
|
62
|
+
ScreenType3: mockScreenType3,
|
|
63
|
+
ScreenType4: mockScreenType4,
|
|
64
|
+
playerPlugin: mockPlayerPlugin,
|
|
65
|
+
ScreenPlugin: mockScreenPlugin,
|
|
66
|
+
PluginWithConfig: mockPluginWithConfig,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
|
|
69
71
|
jest.mock("@applicaster/zapp-react-native-utils/analyticsUtils", () => ({
|
|
70
|
-
useAnalytics: jest.fn().mockReturnValue(
|
|
72
|
+
useAnalytics: jest.fn().mockReturnValue(mockWithAnalytics),
|
|
71
73
|
}));
|
|
72
74
|
|
|
73
75
|
jest.mock("@applicaster/zapp-react-native-redux/hooks", () => ({
|
|
74
|
-
usePickFromState:
|
|
76
|
+
usePickFromState: mockUsePickFromState,
|
|
75
77
|
}));
|
|
76
78
|
|
|
79
|
+
const mockUseScreenAnalytics = jest.fn();
|
|
80
|
+
|
|
77
81
|
jest.mock(
|
|
78
82
|
"@applicaster/zapp-react-native-utils/analyticsUtils/helpers/hooks",
|
|
79
83
|
() => ({
|
|
80
|
-
useScreenAnalytics:
|
|
84
|
+
useScreenAnalytics: mockUseScreenAnalytics,
|
|
81
85
|
})
|
|
82
86
|
);
|
|
83
87
|
|
|
84
88
|
jest.mock("react-redux", () => ({
|
|
89
|
+
...jest.requireActual("react-redux"),
|
|
85
90
|
useDispatch: jest.fn(() => () => {}),
|
|
86
|
-
connect: realConnect,
|
|
87
91
|
}));
|
|
88
92
|
|
|
89
93
|
jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
|
|
@@ -118,13 +122,13 @@ describe("<ScreenResolver />", () => {
|
|
|
118
122
|
it("picks screen from plugins if it exists", () => {
|
|
119
123
|
const wrapper = getWrapper("A1234", "screen_type_3", {});
|
|
120
124
|
|
|
121
|
-
expect(wrapper.find(
|
|
125
|
+
expect(wrapper.find(mockScreenType3.module)).toHaveProperty("length", 1);
|
|
122
126
|
});
|
|
123
127
|
|
|
124
128
|
it("picks the screen from its identifier if it exists", () => {
|
|
125
129
|
const wrapper = getWrapper("A1234", "screen-plugin", {});
|
|
126
130
|
|
|
127
|
-
expect(wrapper.find(
|
|
131
|
+
expect(wrapper.find(mockScreenPlugin.module)).toHaveProperty("length", 1);
|
|
128
132
|
});
|
|
129
133
|
|
|
130
134
|
it("picks screen from components if it doesn't exist in plugins", () => {
|
|
@@ -136,7 +140,7 @@ describe("<ScreenResolver />", () => {
|
|
|
136
140
|
it("renders the screen and passes screenId & locationState as props", () => {
|
|
137
141
|
const wrapper = getWrapper("A1234", "screen_type_3", "foo");
|
|
138
142
|
|
|
139
|
-
const screenWrapper = wrapper.find(
|
|
143
|
+
const screenWrapper = wrapper.find(mockScreenType3.module);
|
|
140
144
|
|
|
141
145
|
expect(screenWrapper.prop("screenId")).toEqual("A1234");
|
|
142
146
|
expect(screenWrapper.prop("screenData")).toEqual("foo");
|
|
@@ -151,7 +155,7 @@ describe("<ScreenResolver />", () => {
|
|
|
151
155
|
it("injects the plugin configuration if it exists", () => {
|
|
152
156
|
const wrapper = getWrapper("A1234", "plugin-with-config", {});
|
|
153
157
|
|
|
154
|
-
expect(wrapper.find(
|
|
158
|
+
expect(wrapper.find(mockPluginWithConfig.module).props()).toHaveProperty(
|
|
155
159
|
"configuration",
|
|
156
160
|
expect.objectContaining(pluginConfiguration)
|
|
157
161
|
);
|
|
@@ -160,7 +164,7 @@ describe("<ScreenResolver />", () => {
|
|
|
160
164
|
it("injects the plugin configuration if it exists, even when plugin is resolved by type", () => {
|
|
161
165
|
const wrapper = getWrapper("A1234", "screen_type_3", {});
|
|
162
166
|
|
|
163
|
-
expect(wrapper.find(
|
|
167
|
+
expect(wrapper.find(mockScreenType3.module).props()).toHaveProperty(
|
|
164
168
|
"configuration",
|
|
165
169
|
expect.objectContaining(pluginConfiguration)
|
|
166
170
|
);
|
package/Components/Tabs/Tab.tsx
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Platform: {
|
|
12
|
-
OS: "samsung_tv",
|
|
13
|
-
isTV: true,
|
|
14
|
-
},
|
|
15
|
-
};
|
|
2
|
+
import { Platform } from "react-native";
|
|
3
|
+
import { render } from "@testing-library/react-native";
|
|
4
|
+
|
|
5
|
+
Platform.OS = "samsung_tv";
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(Platform, "isTV", {
|
|
8
|
+
get() {
|
|
9
|
+
return true;
|
|
10
|
+
},
|
|
16
11
|
});
|
|
17
12
|
|
|
18
13
|
jest.mock("@applicaster/zapp-react-native-utils/localizationUtils", () => ({
|
|
@@ -20,12 +15,12 @@ jest.mock("@applicaster/zapp-react-native-utils/localizationUtils", () => ({
|
|
|
20
15
|
}));
|
|
21
16
|
|
|
22
17
|
const { TextInputTv } = require("../");
|
|
23
|
-
const
|
|
18
|
+
const testIDToTest = "TextInput-tv";
|
|
24
19
|
|
|
25
20
|
describe("<TextInputTv />", () => {
|
|
26
21
|
it("renders", () => {
|
|
27
|
-
const
|
|
28
|
-
expect(
|
|
22
|
+
const { toJSON } = render(<TextInputTv />);
|
|
23
|
+
expect(toJSON()).toMatchSnapshot();
|
|
29
24
|
});
|
|
30
25
|
|
|
31
26
|
describe("on native", () => {
|
|
@@ -34,8 +29,8 @@ describe("<TextInputTv />", () => {
|
|
|
34
29
|
});
|
|
35
30
|
|
|
36
31
|
it("returns React-Native TextInput component if not on samsung", () => {
|
|
37
|
-
const
|
|
38
|
-
expect(
|
|
32
|
+
const { getByTestId } = render(<TextInputTv />);
|
|
33
|
+
expect(getByTestId(testIDToTest)).toBeTruthy();
|
|
39
34
|
});
|
|
40
35
|
});
|
|
41
36
|
|
|
@@ -45,29 +40,30 @@ describe("<TextInputTv />", () => {
|
|
|
45
40
|
});
|
|
46
41
|
|
|
47
42
|
it("returns React input component if on samsung", () => {
|
|
48
|
-
const
|
|
49
|
-
expect(
|
|
43
|
+
const { getByTestId } = render(<TextInputTv type="samsung" />);
|
|
44
|
+
expect(getByTestId(testIDToTest)).toBeTruthy();
|
|
50
45
|
});
|
|
51
46
|
|
|
52
47
|
it("flattens styles", () => {
|
|
53
48
|
Platform.OS = "samsung_tv";
|
|
54
49
|
const style = [{ width: 200 }, { height: 200 }];
|
|
55
|
-
const testInstance = TestRenderer.create(<TextInputTv style={style} />);
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
"
|
|
51
|
+
const { getByTestId } = render(
|
|
52
|
+
<TextInputTv type="samsung" style={style} />
|
|
59
53
|
);
|
|
54
|
+
|
|
55
|
+
expect(getByTestId(testIDToTest).props.style).toBeObject();
|
|
60
56
|
});
|
|
61
57
|
|
|
62
58
|
it("maps onChangeText to onChange", () => {
|
|
63
59
|
Platform.OS = "samsung_tv";
|
|
64
60
|
const onChangeText = jest.fn();
|
|
65
61
|
|
|
66
|
-
const
|
|
67
|
-
<TextInputTv onChangeText={onChangeText} />
|
|
62
|
+
const { getByTestId } = render(
|
|
63
|
+
<TextInputTv type="samsung" onChangeText={onChangeText} />
|
|
68
64
|
);
|
|
69
65
|
|
|
70
|
-
const inputInstance =
|
|
66
|
+
const inputInstance = getByTestId(testIDToTest);
|
|
71
67
|
expect(inputInstance.props.onChange).toBeDefined();
|
|
72
68
|
expect(inputInstance.props.onChangeText).toBeUndefined();
|
|
73
69
|
});
|
|
@@ -76,11 +72,11 @@ describe("<TextInputTv />", () => {
|
|
|
76
72
|
Platform.OS = "samsung_tv";
|
|
77
73
|
const onChangeText = jest.fn();
|
|
78
74
|
|
|
79
|
-
const
|
|
80
|
-
<TextInputTv onChangeText={onChangeText} />
|
|
75
|
+
const { getByTestId } = render(
|
|
76
|
+
<TextInputTv type="samsung" onChangeText={onChangeText} />
|
|
81
77
|
);
|
|
82
78
|
|
|
83
|
-
const inputInstance =
|
|
79
|
+
const inputInstance = getByTestId(testIDToTest);
|
|
84
80
|
const value = "foobar";
|
|
85
81
|
inputInstance.props.onChange({ target: { value: value } });
|
|
86
82
|
expect(onChangeText).toBeCalledWith(value);
|
|
@@ -89,11 +85,12 @@ describe("<TextInputTv />", () => {
|
|
|
89
85
|
it("maps onEndEditing to onBlur", () => {
|
|
90
86
|
Platform.OS = "samsung_tv";
|
|
91
87
|
|
|
92
|
-
const
|
|
93
|
-
<TextInputTv onEndEditing={() => null} />
|
|
88
|
+
const { getByTestId } = render(
|
|
89
|
+
<TextInputTv type="samsung" onEndEditing={() => null} />
|
|
94
90
|
);
|
|
95
91
|
|
|
96
|
-
const inputInstance =
|
|
92
|
+
const inputInstance = getByTestId(testIDToTest);
|
|
93
|
+
|
|
97
94
|
expect(inputInstance.props.onBlur).toBeDefined();
|
|
98
95
|
expect(inputInstance.props.onEndEditing).toBeUndefined();
|
|
99
96
|
});
|
|
@@ -101,11 +98,12 @@ describe("<TextInputTv />", () => {
|
|
|
101
98
|
it("maps onPress to onClick", () => {
|
|
102
99
|
Platform.OS = "samsung_tv";
|
|
103
100
|
|
|
104
|
-
const
|
|
105
|
-
<TextInputTv onPress={() => null} />
|
|
101
|
+
const { getByTestId } = render(
|
|
102
|
+
<TextInputTv type="samsung" onPress={() => null} />
|
|
106
103
|
);
|
|
107
104
|
|
|
108
|
-
const inputInstance =
|
|
105
|
+
const inputInstance = getByTestId(testIDToTest);
|
|
106
|
+
|
|
109
107
|
expect(inputInstance.props.onClick).toBeDefined();
|
|
110
108
|
expect(inputInstance.props.onPress).toBeUndefined();
|
|
111
109
|
});
|
|
@@ -113,22 +111,24 @@ describe("<TextInputTv />", () => {
|
|
|
113
111
|
it("replaces secureTextEntry with type:'password'", () => {
|
|
114
112
|
Platform.OS = "samsung_tv";
|
|
115
113
|
|
|
116
|
-
const
|
|
117
|
-
<TextInputTv
|
|
114
|
+
const { getByTestId } = render(
|
|
115
|
+
<TextInputTv type="samsung" secureTextEntry />
|
|
118
116
|
);
|
|
119
117
|
|
|
120
|
-
const inputInstance =
|
|
118
|
+
const inputInstance = getByTestId(testIDToTest);
|
|
119
|
+
|
|
121
120
|
expect(inputInstance.props.type).toBe("password");
|
|
122
121
|
});
|
|
123
122
|
|
|
124
123
|
it("removes 'onChangeText', 'secureTextEntry', 'onEndEditing', 'onPress' props", () => {
|
|
125
124
|
Platform.OS = "samsung_tv";
|
|
126
125
|
|
|
127
|
-
const
|
|
128
|
-
<TextInputTv onChangeText secureTextEntry onEndEditing />
|
|
126
|
+
const { getByTestId } = render(
|
|
127
|
+
<TextInputTv type="samsung" onChangeText secureTextEntry onEndEditing />
|
|
129
128
|
);
|
|
130
129
|
|
|
131
|
-
const inputInstance =
|
|
130
|
+
const inputInstance = getByTestId(testIDToTest);
|
|
131
|
+
|
|
132
132
|
expect(inputInstance.props.onChangeText).toBeUndefined();
|
|
133
133
|
expect(inputInstance.props.secureTextEntry).toBeUndefined();
|
|
134
134
|
expect(inputInstance.props.onEndEditing).toBeUndefined();
|
|
@@ -175,10 +175,10 @@ function TextInputTV(props: Props, ref) {
|
|
|
175
175
|
return isWebPlatform ? (
|
|
176
176
|
<>
|
|
177
177
|
{additional && additional()}
|
|
178
|
-
<input ref={ref} {...inputProps} />
|
|
178
|
+
<input testID="TextInput-tv" ref={ref} {...inputProps} />
|
|
179
179
|
</>
|
|
180
180
|
) : (
|
|
181
|
-
<TextInput ref={ref} {...inputProps} />
|
|
181
|
+
<TextInput testID="TextInput-tv" ref={ref} {...inputProps} />
|
|
182
182
|
);
|
|
183
183
|
}
|
|
184
184
|
|