@applicaster/zapp-react-native-ui-components 13.0.0-alpha.1124981321 → 13.0.0-alpha.1173186260

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.
Files changed (157) hide show
  1. package/Components/AppContainer/__tests__/AppContainer.test.js +4 -6
  2. package/Components/AudioPlayer/AudioPlayer.tsx +7 -4
  3. package/Components/AudioPlayer/__tests__/Runtime.test.js +5 -8
  4. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayer.test.js.snap +54 -111
  5. package/Components/AudioPlayer/__tests__/__snapshots__/audioPlayerLayout.test.js.snap +36 -20
  6. package/Components/AudioPlayer/__tests__/artWork.test.js +3 -5
  7. package/Components/AudioPlayer/__tests__/audioPlayer.test.js +3 -5
  8. package/Components/AudioPlayer/__tests__/audioPlayerLayout.test.js +7 -8
  9. package/Components/AudioPlayer/__tests__/channel.test.js +3 -5
  10. package/Components/AudioPlayer/__tests__/summary.test.js +3 -5
  11. package/Components/AudioPlayer/__tests__/title.test.js +3 -5
  12. package/Components/AudioPlayer/helpers.tsx +1 -1
  13. package/Components/BaseFocusable/index.tsx +1 -2
  14. package/Components/Cell/Cell.tsx +4 -13
  15. package/Components/Cell/CellWithFocusable.tsx +50 -59
  16. package/Components/Cell/CellWrapper.tsx +18 -0
  17. package/Components/Cell/TvOSCellComponent.tsx +20 -22
  18. package/Components/Cell/__tests__/CellWIthFocusable.test.js +13 -6
  19. package/Components/Cell/index.js +3 -1
  20. package/Components/Cell/styles.ts +17 -0
  21. package/Components/CellRendererResolver/__tests__/cellRendererResolver.test.js +46 -48
  22. package/Components/CellRendererResolver/index.ts +2 -1
  23. package/Components/ComponentResolver/__tests__/__snapshots__/componentResolver.test.js.snap +1 -42
  24. package/Components/ComponentResolver/__tests__/componentResolver.test.js +16 -22
  25. package/Components/ContentScreen/__tests__/contentScreen.test.js +3 -3
  26. package/Components/ErrorScreen/index.tsx +14 -6
  27. package/Components/Focusable/Focusable.tsx +1 -0
  28. package/Components/Focusable/FocusableTvOS.tsx +5 -1
  29. package/Components/Focusable/index.android.tsx +10 -3
  30. package/Components/FocusableCell/index.tsx +1 -1
  31. package/Components/FocusableGroup/FocusableTvOS.tsx +34 -86
  32. package/Components/FocusableGroup/index.tsx +0 -3
  33. package/Components/FocusableList/index.tsx +26 -9
  34. package/Components/FocusableScrollView/index.tsx +43 -13
  35. package/Components/GeneralContentScreen/GeneralContentScreen.tsx +3 -0
  36. package/Components/GeneralContentScreen/utils/useCurationAPI.ts +4 -2
  37. package/Components/GeneralContentScreen/utils/useEventAlerts.ts +30 -0
  38. package/Components/HandlePlayable/HandlePlayable.tsx +21 -27
  39. package/Components/Layout/TV/LayoutBackground.tsx +28 -0
  40. package/Components/Layout/TV/NavBarContainer.tsx +19 -23
  41. package/Components/Layout/TV/ScreenContainer.tsx +8 -2
  42. package/Components/Layout/TV/ScreenLayoutContextProvider.tsx +5 -0
  43. package/Components/Layout/TV/__tests__/ScreenContainer.test.tsx +2 -1
  44. package/Components/Layout/TV/__tests__/__snapshots__/NavBarContainer.test.tsx.snap +3 -2
  45. package/Components/Layout/TV/__tests__/__snapshots__/ScreenContainer.test.tsx.snap +3 -2
  46. package/Components/Layout/TV/__tests__/__snapshots__/index.test.tsx.snap +15 -10
  47. package/Components/Layout/TV/__tests__/index.test.tsx +8 -2
  48. package/Components/Layout/TV/index.tsx +6 -20
  49. package/Components/Layout/TV/index.web.tsx +4 -1
  50. package/Components/MasterCell/DefaultComponents/ActionButton.tsx +2 -3
  51. package/Components/MasterCell/DefaultComponents/Image/Image.ios.tsx +4 -3
  52. package/Components/MasterCell/DefaultComponents/Image/hooks/useImage.ts +11 -7
  53. package/Components/MasterCell/DefaultComponents/LiveImage/index.tsx +2 -2
  54. package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/const.ts +3 -0
  55. package/Components/MasterCell/DefaultComponents/tv/TvActionButtons/index.ts +6 -6
  56. package/Components/MasterCell/SharedUI/ProgressBar/hooks/useFillInPercent.ts +2 -8
  57. package/Components/MasterCell/__tests__/__snapshots__/elementMapper.test.js.snap +4 -12
  58. package/Components/MasterCell/__tests__/__snapshots__/masterCell.test.js.snap +0 -229
  59. package/Components/MasterCell/__tests__/elementMapper.test.js +18 -5
  60. package/Components/MasterCell/__tests__/masterCell.test.js +26 -26
  61. package/Components/MasterCell/hooks/useAsyncRendering/MasterCellAsyncRenderManager.ts +2 -2
  62. package/Components/MasterCell/utils/behaviorProvider.ts +136 -0
  63. package/Components/MasterCell/utils/index.ts +8 -134
  64. package/Components/ModalComponent/BottomSheetModalContent.tsx +59 -43
  65. package/Components/ModalComponent/Button/Item.tsx +6 -5
  66. package/Components/ModalComponent/Button/assets.ts +1 -1
  67. package/Components/ModalComponent/Button/index.tsx +45 -62
  68. package/Components/ModalComponent/Header/index.tsx +12 -11
  69. package/Components/ModalComponent/utils.ts +55 -7
  70. package/Components/OfflineHandler/NotificationView/NotificationView.lg.tsx +2 -2
  71. package/Components/OfflineHandler/NotificationView/NotificationView.samsung.tsx +2 -2
  72. package/Components/OfflineHandler/NotificationView/__tests__/index.test.tsx +0 -5
  73. package/Components/OfflineHandler/utils/index.ts +1 -1
  74. package/Components/PlayerContainer/PlayerContainer.tsx +42 -15
  75. package/Components/PlayerContainer/ProgramInfo/index.tsx +2 -2
  76. package/Components/PlayerImageBackground/index.tsx +1 -1
  77. package/Components/River/ComponentsMap/ComponentsMap.tsx +42 -65
  78. package/Components/River/ComponentsMap/hooks/useLoadingState.ts +78 -51
  79. package/Components/River/RiverFooter.tsx +39 -9
  80. package/Components/River/RiverItem.tsx +39 -3
  81. package/Components/River/TV/index.tsx +6 -1
  82. package/Components/River/__tests__/__snapshots__/componentsMap.test.js.snap +100 -31
  83. package/Components/River/__tests__/__snapshots__/river.test.js.snap +20 -82
  84. package/Components/River/__tests__/componentsMap.test.js +3 -4
  85. package/Components/River/__tests__/river.test.js +75 -40
  86. package/Components/RouteManager/__tests__/__snapshots__/routeManager.test.js.snap +11 -4
  87. package/Components/RouteManager/__tests__/routeManager.test.js +29 -14
  88. package/Components/RouteManager/__tests__/testId.test.js +8 -6
  89. package/Components/Screen/TV/__tests__/index.web.test.tsx +26 -0
  90. package/Components/Screen/TV/index.web.tsx +5 -6
  91. package/Components/Screen/__tests__/Screen.test.tsx +22 -14
  92. package/Components/Screen/__tests__/__snapshots__/Screen.test.tsx.snap +2 -2
  93. package/Components/Screen/hooks.ts +3 -6
  94. package/Components/Screen/index.tsx +4 -4
  95. package/Components/ScreenResolver/__tests__/screenResolver.test.js +91 -70
  96. package/Components/Tabs/Tab.tsx +5 -3
  97. package/Components/TextInputTv/index.tsx +2 -1
  98. package/Components/TopMarginApplicator/TopMarginApplicator.tsx +2 -3
  99. package/Components/TrackedView/index.tsx +1 -0
  100. package/Components/Transitioner/AnimationManager.js +15 -15
  101. package/Components/Transitioner/Scene.tsx +1 -1
  102. package/Components/Transitioner/Transitioner.tsx +3 -3
  103. package/Components/Transitioner/__tests__/Scene.test.js +25 -14
  104. package/Components/Transitioner/__tests__/__snapshots__/Scene.test.js.snap +12 -68
  105. package/Components/Transitioner/__tests__/__snapshots__/transitioner.test.js.snap +2 -2
  106. package/Components/Transitioner/__tests__/transitioner.test.js +13 -4
  107. package/Components/VideoLive/PlayerLiveImageComponent.tsx +7 -3
  108. package/Components/VideoLive/__tests__/__snapshots__/PlayerLiveImageComponent.test.tsx.snap +1 -0
  109. package/Components/VideoModal/ModalAnimation/AnimatedPlayerModalWrapper.tsx +1 -1
  110. package/Components/VideoModal/ModalAnimation/AnimatedScrollModal.tsx +46 -30
  111. package/Components/VideoModal/ModalAnimation/AnimatedVideoPlayerComponent.tsx +3 -3
  112. package/Components/VideoModal/ModalAnimation/AnimationComponent.tsx +45 -21
  113. package/Components/VideoModal/ModalAnimation/ModalAnimationContext.tsx +12 -6
  114. package/Components/VideoModal/ModalAnimation/__tests__/getMoveUpValue.test.ts +108 -0
  115. package/Components/VideoModal/ModalAnimation/const.ts +5 -0
  116. package/Components/VideoModal/ModalAnimation/index.ts +2 -0
  117. package/Components/VideoModal/ModalAnimation/utils.ts +30 -0
  118. package/Components/VideoModal/PlayerDetails.tsx +18 -10
  119. package/Components/VideoModal/PlayerWrapper.tsx +37 -24
  120. package/Components/VideoModal/VideoModal.tsx +19 -4
  121. package/Components/VideoModal/__tests__/__snapshots__/PlayerDetails.test.tsx.snap +2 -40
  122. package/Components/VideoModal/utils.ts +3 -4
  123. package/Components/Viewport/ViewportAware/__tests__/__snapshots__/viewportAware.test.js.snap +24 -36
  124. package/Components/Viewport/ViewportAware/__tests__/viewportAware.test.js +12 -18
  125. package/Components/Viewport/__tests__/utils.test.js +5 -4
  126. package/Components/ZappUIComponent/Placeholder.tsx +3 -1
  127. package/Components/ZappUIComponent/__tests__/{ZappUIComponent.test.js → ZappUIComponent.test.tsx} +26 -10
  128. package/Components/ZappUIComponent/index.tsx +4 -17
  129. package/Components/default-cell-renderer/__tests__/defaultCellRenderer.test.tsx +20 -17
  130. package/Components/default-cell-renderer/viewTrees/tv/DefaultCell/__tests__/DefaultCell.test.tsx +15 -11
  131. package/Contexts/ComponentsMapOffsetContext/index.tsx +49 -0
  132. package/Contexts/FocusableGroupContext/withFocusableContext.tsx +4 -10
  133. package/Contexts/HeaderOffsetContext/index.tsx +4 -6
  134. package/Contexts/ScreenContext/index.tsx +3 -10
  135. package/Contexts/ScreenLayoutContext/index.tsx +5 -3
  136. package/Decorators/Navigator/__tests__/navigator.test.js +16 -16
  137. package/Decorators/Navigator/index.tsx +1 -1
  138. package/Decorators/RiverResolver/__tests__/riverResolver.test.tsx +18 -24
  139. package/Decorators/RiverResolver/index.tsx +6 -8
  140. package/Decorators/ZappPipesDataConnector/__tests__/zappPipesDataConnector.test.js +29 -22
  141. package/Decorators/ZappPipesDataConnector/index.tsx +4 -30
  142. package/package.json +7 -11
  143. package/tsconfig.json +2 -3
  144. package/.babelrc +0 -8
  145. package/Components/Cell/CellStyles/FallbackCellStyle/index.js +0 -157
  146. package/Components/Cell/CellStyles/Hero/index.js +0 -111
  147. package/Components/Cell/CellStyles/ScreenSelector/index.js +0 -68
  148. package/Components/Cell/CellStyles/cellStylesResolver.ts +0 -19
  149. package/Components/Cell/CellStyles/colors.js +0 -40
  150. package/Components/Cell/CellStyles/index.js +0 -15
  151. package/Components/CellRendererResolver/__tests__/__snapshots__/cellRendererResolver.test.js.snap +0 -53
  152. package/Components/RouteManager/__tests__/__snapshots__/testId.test.js.snap +0 -17
  153. package/Components/ScreenResolver/__tests__/__snapshots__/screenResolver.test.js.snap +0 -17
  154. package/Components/ZappUIComponent/__tests__/__snapshots__/ZappUIComponent.test.js.snap +0 -91
  155. package/Components/default-cell-renderer/__tests__/__snapshots__/defaultCellRenderer.test.tsx.snap +0 -338
  156. package/Decorators/Navigator/__tests__/__snapshots__/navigator.test.js.snap +0 -18
  157. package/Decorators/RiverResolver/__tests__/__snapshots__/riverResolver.test.tsx.snap +0 -28
@@ -17,7 +17,90 @@ exports[`componentsMap renders renders components map correctly 1`] = `
17
17
  }
18
18
  >
19
19
  <RCTScrollView
20
- ListFooterComponent={[Function]}
20
+ ListFooterComponent={
21
+ <Memo(RiverFooterComponent)
22
+ flatListHeight={null}
23
+ loadingState={
24
+ BehaviorSubject {
25
+ "_value": {
26
+ "done": false,
27
+ "index": -1,
28
+ "waitForAllComponents": false,
29
+ },
30
+ "closed": false,
31
+ "currentObservers": null,
32
+ "hasError": false,
33
+ "isStopped": false,
34
+ "observers": [
35
+ SafeSubscriber {
36
+ "_finalizers": [
37
+ Subscription {
38
+ "_finalizers": null,
39
+ "_parentage": [Circular],
40
+ "closed": false,
41
+ "initialTeardown": [Function],
42
+ },
43
+ ],
44
+ "_parentage": null,
45
+ "closed": false,
46
+ "destination": ConsumerObserver {
47
+ "partialObserver": {
48
+ "complete": undefined,
49
+ "error": undefined,
50
+ "next": [Function],
51
+ },
52
+ },
53
+ "initialTeardown": undefined,
54
+ "isStopped": false,
55
+ },
56
+ SafeSubscriber {
57
+ "_finalizers": [
58
+ Subscription {
59
+ "_finalizers": null,
60
+ "_parentage": [Circular],
61
+ "closed": false,
62
+ "initialTeardown": [Function],
63
+ },
64
+ ],
65
+ "_parentage": null,
66
+ "closed": false,
67
+ "destination": ConsumerObserver {
68
+ "partialObserver": {
69
+ "complete": undefined,
70
+ "error": undefined,
71
+ "next": [Function],
72
+ },
73
+ },
74
+ "initialTeardown": undefined,
75
+ "isStopped": false,
76
+ },
77
+ SafeSubscriber {
78
+ "_finalizers": [
79
+ Subscription {
80
+ "_finalizers": null,
81
+ "_parentage": [Circular],
82
+ "closed": false,
83
+ "initialTeardown": [Function],
84
+ },
85
+ ],
86
+ "_parentage": null,
87
+ "closed": false,
88
+ "destination": ConsumerObserver {
89
+ "partialObserver": {
90
+ "complete": undefined,
91
+ "error": undefined,
92
+ "next": [Function],
93
+ },
94
+ },
95
+ "initialTeardown": undefined,
96
+ "isStopped": false,
97
+ },
98
+ ],
99
+ "thrownError": null,
100
+ }
101
+ }
102
+ />
103
+ }
21
104
  contentContainerStyle={
22
105
  {
23
106
  "paddingBottom": undefined,
@@ -80,22 +163,14 @@ exports[`componentsMap renders renders components map correctly 1`] = `
80
163
  style={null}
81
164
  >
82
165
  <View
166
+ onLayout={[Function]}
83
167
  style={
84
168
  {
85
- "display": "flex",
169
+ "flex": 1,
86
170
  }
87
171
  }
88
172
  >
89
- <View
90
- onLayout={[Function]}
91
- style={
92
- {
93
- "flex": 1,
94
- }
95
- }
96
- >
97
- <View />
98
- </View>
173
+ <View />
99
174
  </View>
100
175
  </View>
101
176
  <View
@@ -103,23 +178,13 @@ exports[`componentsMap renders renders components map correctly 1`] = `
103
178
  style={null}
104
179
  >
105
180
  <View
181
+ onLayout={[Function]}
106
182
  style={
107
183
  {
108
- "display": "none",
184
+ "flex": 1,
109
185
  }
110
186
  }
111
- >
112
- <View
113
- onLayout={[Function]}
114
- style={
115
- {
116
- "flex": 1,
117
- }
118
- }
119
- >
120
- <View />
121
- </View>
122
- </View>
187
+ />
123
188
  </View>
124
189
  <View
125
190
  onLayout={[Function]}
@@ -127,12 +192,16 @@ exports[`componentsMap renders renders components map correctly 1`] = `
127
192
  <View
128
193
  renderToHardwareTextureAndroid={true}
129
194
  style={
130
- {
131
- "alignItems": "center",
132
- "height": null,
133
- "justifyContent": "center",
134
- "width": "100%",
135
- }
195
+ [
196
+ {
197
+ "alignItems": "center",
198
+ "justifyContent": "center",
199
+ "width": "100%",
200
+ },
201
+ {
202
+ "height": null,
203
+ },
204
+ ]
136
205
  }
137
206
  >
138
207
  <ActivityIndicator
@@ -1,89 +1,27 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`When River has a general_content type <River /> renders correctly 1`] = `
4
- <ContextProvider
5
- value={null}
6
- >
7
- <RiverWithData
8
- appData={
9
- {
10
- "layoutVersion": "v1",
11
- }
12
- }
13
- dispatch={[Function]}
14
- rivers={
15
- {
16
- "A1234": {
17
- "home": true,
18
- "id": "A1234",
19
- "name": "foo",
20
- "type": "general_content",
21
- "ui_components": [
22
- {
23
- "component_type": "hero",
24
- },
25
- {
26
- "component_type": "grid",
27
- },
28
- ],
29
- },
30
- "B4567": {
31
- "id": "B4567",
32
- },
33
- "C0987": {
34
- "home": false,
35
- "id": "C0987",
36
- "name": "Some-Screen-Plugin",
37
- "type": "some-screen-plugin",
38
- "ui_components": [],
39
- },
40
- }
41
- }
42
- screenId="A1234"
43
- store={
44
- {
45
- "clearActions": [Function],
46
- "dispatch": [Function],
47
- "getActions": [Function],
48
- "getState": [Function],
49
- "replaceReducer": [Function],
50
- "subscribe": [Function],
51
- }
52
- }
53
- />
54
- </ContextProvider>
55
- `;
56
-
57
- exports[`When River has a general_content type <RiverComponent /> renders correctly 1`] = `
58
- <GeneralContentScreen
59
- groupId="ZF-C4"
60
- screenId="A1234"
61
- />
62
- `;
63
-
64
- exports[`When River has any other type other than general_content <RiverComponent /> renders correctly 1`] = `
65
- <WithProvider
66
- screenData={
3
+ exports[`When River has a general_content type renders River component correctly 1`] = `
4
+ <View
5
+ onLayout={[Function]}
6
+ style={
67
7
  {
68
- "groupId": undefined,
69
- "home": false,
70
- "id": "C0987",
71
- "name": "Some-Screen-Plugin",
72
- "type": "some-screen-plugin",
73
- "ui_components": [],
8
+ "flex": 1,
74
9
  }
75
10
  }
76
- screenId="C0987"
77
- screenType="some-screen-plugin"
78
- />
79
- `;
80
-
81
- exports[`When River has feed url <RiverComponent /> renders correctly 1`] = `
82
- <Connect(FeedLoaderComponent)
83
- feedUrl="https://some-feed-url.net"
84
- refreshCallback={[Function]}
85
- refreshing={false}
11
+ testID="on-layout-view"
86
12
  >
87
- <Component />
88
- </Connect(FeedLoaderComponent)>
13
+ <View
14
+ style={
15
+ {
16
+ "display": "none",
17
+ "flex": 1,
18
+ }
19
+ }
20
+ >
21
+ <View
22
+ screenId="A1234"
23
+ testID="general-content-screen"
24
+ />
25
+ </View>
26
+ </View>
89
27
  `;
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
- import TestRenderer from "react-test-renderer";
3
- import { cleanup } from "@testing-library/react-native";
2
+ import { cleanup, render } from "@testing-library/react-native";
4
3
  import { Provider } from "react-redux";
5
4
  import configureStore from "redux-mock-store";
6
5
 
@@ -183,12 +182,12 @@ describe("componentsMap", () => {
183
182
  .spyOn(themeUtils, "useTheme")
184
183
  .mockImplementation(() => () => theme);
185
184
 
186
- const wrapper = TestRenderer.create(
185
+ const { toJSON } = render(
187
186
  <Provider store={store}>
188
187
  <ComponentsMap {...props} />
189
188
  </Provider>
190
189
  );
191
190
 
192
- expect(wrapper.toJSON()).toMatchSnapshot();
191
+ expect(toJSON()).toMatchSnapshot();
193
192
  });
194
193
  });
@@ -1,13 +1,50 @@
1
1
  import React from "react";
2
- import { shallow } from "enzyme";
3
- import { shallowToJson } from "enzyme-to-json";
2
+ import { render, screen } from "@testing-library/react-native";
4
3
  import configureStore from "redux-mock-store";
4
+ import { renderWithProviders } from "@applicaster/zapp-react-native-utils/testUtils";
5
+ import { Provider } from "react-redux";
5
6
 
6
- import { GeneralContentScreen } from "../../GeneralContentScreen";
7
- import { FeedLoader } from "../../FeedLoader";
8
- import { River } from "../index";
9
- import { RiverComponent } from "../River";
7
+ import { River } from "../";
10
8
  import { ScreenResolver } from "../../ScreenResolver";
9
+ import { RiverComponent } from "../River";
10
+
11
+ jest.mock(
12
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useIsScreenActive",
13
+ () => ({
14
+ useIsScreenActive: jest.fn(() => true),
15
+ })
16
+ );
17
+
18
+ jest.mock(
19
+ "@applicaster/zapp-react-native-ui-components/Components/GeneralContentScreen",
20
+ () => {
21
+ const { View } = jest.requireActual("react-native");
22
+
23
+ return {
24
+ GeneralContentScreen: (props) => (
25
+ <View testID="general-content-screen" {...props} />
26
+ ),
27
+ };
28
+ }
29
+ );
30
+
31
+ jest.mock(
32
+ "@applicaster/zapp-react-native-utils/analyticsUtils/helpers/hooks",
33
+ () => ({
34
+ useScreenAnalytics: jest.fn(),
35
+ })
36
+ );
37
+
38
+ jest.mock(
39
+ "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation",
40
+ () => ({
41
+ useNavigation: jest.fn(() => ({
42
+ videoModalState: {
43
+ mode: "test",
44
+ },
45
+ })),
46
+ })
47
+ );
11
48
 
12
49
  const river = {
13
50
  home: true,
@@ -55,24 +92,24 @@ const appData = { layoutVersion: "v1" };
55
92
  const store = configureStore()({ rivers, appData });
56
93
 
57
94
  describe("When River has a general_content type", () => {
58
- const wrapper = shallow(<RiverComponent {...riverProps} />);
59
-
60
- describe("<RiverComponent />", () => {
61
- it("renders correctly", () => {
62
- expect(shallowToJson(wrapper)).toMatchSnapshot();
63
- });
64
-
65
- it("it returns a GeneralContentScreen", () => {
66
- expect(wrapper.find(GeneralContentScreen).length).toBe(1);
67
- });
95
+ it("renders GeneralContentScreen correctly", () => {
96
+ const { getByTestId } = render(
97
+ <Provider store={store}>
98
+ <RiverComponent {...riverProps} />
99
+ </Provider>
100
+ );
101
+
102
+ expect(getByTestId("general-content-screen")).toBeTruthy();
68
103
  });
69
104
 
70
- describe("<River />", () => {
71
- const wrapper = shallow(<River screenId="A1234" store={store} />);
105
+ it("renders River component correctly", () => {
106
+ const wrapper = render(
107
+ <Provider store={store}>
108
+ <River screenId="A1234" />
109
+ </Provider>
110
+ );
72
111
 
73
- it("renders correctly", () => {
74
- expect(shallowToJson(wrapper)).toMatchSnapshot();
75
- });
112
+ expect(wrapper.toJSON()).toMatchSnapshot();
76
113
  });
77
114
  });
78
115
 
@@ -83,16 +120,10 @@ describe("When River has any other type other than general_content", () => {
83
120
  appData,
84
121
  };
85
122
 
86
- const wrapper = shallow(<RiverComponent {...riverPropsWithScreenPlugin} />);
87
-
88
- describe("<RiverComponent />", () => {
89
- it("renders correctly", () => {
90
- expect(shallowToJson(wrapper)).toMatchSnapshot();
91
- });
123
+ it("renders ScreenResolver correctly", () => {
124
+ renderWithProviders(<RiverComponent {...riverPropsWithScreenPlugin} />);
92
125
 
93
- it("it returns a ScreenResolver", () => {
94
- expect(wrapper.find(ScreenResolver).length).toBe(1);
95
- });
126
+ expect(screen.UNSAFE_getByType(ScreenResolver)).toBeDefined();
96
127
  });
97
128
  });
98
129
 
@@ -104,15 +135,19 @@ describe("When River has feed url", () => {
104
135
  appData: { layoutVersion: "v1" },
105
136
  };
106
137
 
107
- const wrapper = shallow(<RiverComponent {...riverPropsWithFeedUrl} />);
108
-
109
- describe("<RiverComponent />", () => {
110
- it("renders correctly", () => {
111
- expect(shallowToJson(wrapper)).toMatchSnapshot();
112
- });
113
-
114
- it("it returns a FeedLoader if it's a v1 layout", () => {
115
- expect(wrapper.find(FeedLoader).length).toBe(1);
116
- });
138
+ it("renders FeedLoader when layout is v1", () => {
139
+ const wrapper = renderWithProviders(
140
+ <RiverComponent {...riverPropsWithFeedUrl} />,
141
+ {
142
+ zappPipes: {
143
+ "https://some-feed-url.net": {
144
+ loading: false,
145
+ data: { entry: [] },
146
+ },
147
+ },
148
+ }
149
+ );
150
+
151
+ expect(wrapper.getByTestId("general-content-screen")).toBeDefined();
117
152
  });
118
153
  });
@@ -1,10 +1,16 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
3
  exports[`<RouteManager /> renders correctly 1`] = `
4
- <TestId
5
- screenId="A1234"
4
+ <View
5
+ accessibilityLabel="A1234"
6
+ style={
7
+ {
8
+ "flex": 1,
9
+ }
10
+ }
11
+ testID="A1234"
6
12
  >
7
- <WithProvider
13
+ <View
8
14
  pathname="/river/A1234"
9
15
  screenData={
10
16
  {
@@ -13,6 +19,7 @@ exports[`<RouteManager /> renders correctly 1`] = `
13
19
  }
14
20
  screenId="A1234"
15
21
  screenType="river"
22
+ testID="screen-resolver"
16
23
  />
17
- </TestId>
24
+ </View>
18
25
  `;
@@ -1,31 +1,46 @@
1
1
  import React from "react";
2
- import { shallow } from "enzyme";
3
- import { shallowToJson } from "enzyme-to-json";
2
+ import { render } from "@testing-library/react-native";
4
3
 
5
- const pathname = "/river/A1234";
6
- const screenData = { id: "A1234" };
4
+ import { RouteManager } from "../";
5
+
6
+ const mockPathname = "/river/A1234";
7
+ const mockScreenData = { id: "A1234" };
7
8
 
8
9
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
9
- useRoute: jest.fn(() => ({ pathname: pathname, screenData: screenData })),
10
+ useRoute: jest.fn(() => ({
11
+ pathname: mockPathname,
12
+ screenData: mockScreenData,
13
+ })),
10
14
  }));
11
15
 
12
- const {
13
- ScreenResolver,
14
- } = require("@applicaster/zapp-react-native-ui-components/Components/ScreenResolver");
16
+ jest.mock(
17
+ "@applicaster/zapp-react-native-ui-components/Components/ScreenResolver",
18
+ () => {
19
+ const { View } = jest.requireActual("react-native");
15
20
 
16
- const { RouteManager } = require("../index");
21
+ return {
22
+ ScreenResolver: (props) => <View testID="screen-resolver" {...props} />,
23
+ };
24
+ }
25
+ );
17
26
 
18
27
  describe("<RouteManager />", () => {
19
- const wrapper = shallow(
20
- <RouteManager pathname={pathname} screenData={screenData} />
21
- );
28
+ let wrapper;
29
+
30
+ beforeEach(() => {
31
+ jest.clearAllMocks();
32
+
33
+ wrapper = render(
34
+ <RouteManager pathname={mockPathname} screenData={mockScreenData} />
35
+ );
36
+ });
22
37
 
23
38
  it("renders correctly", () => {
24
- expect(shallowToJson(wrapper)).toMatchSnapshot();
39
+ expect(wrapper.toJSON()).toMatchSnapshot();
25
40
  });
26
41
 
27
42
  it("passes the correct props to ScreenResolver", () => {
28
- expect(wrapper.find(ScreenResolver).props()).toEqual({
43
+ expect(wrapper.getByTestId("screen-resolver").props).toMatchObject({
29
44
  pathname: "/river/A1234",
30
45
  screenType: "river",
31
46
  screenId: "A1234",
@@ -2,8 +2,8 @@
2
2
  /* eslint-disable react/prop-types */
3
3
  import React from "react";
4
4
  import { View, Text } from "react-native";
5
- import { shallow } from "enzyme";
6
- import { shallowToJson } from "enzyme-to-json";
5
+
6
+ import { render } from "@testing-library/react-native";
7
7
 
8
8
  import { TestId } from "../TestId";
9
9
 
@@ -17,14 +17,16 @@ const screenId = "A1234";
17
17
 
18
18
  describe("TestId", () => {
19
19
  it("renders correctly and assigns the testID to a wrapping view", () => {
20
- const wrapper = shallow(
20
+ const wrapper = render(
21
21
  <TestId screenId={screenId}>
22
22
  <TestComponent name="dev test" />
23
23
  </TestId>
24
24
  );
25
25
 
26
- expect(shallowToJson(wrapper)).toMatchSnapshot();
27
- expect(wrapper.find(View).prop("testID")).toEqual(screenId);
28
- expect(wrapper.find(View).prop("accessibilityLabel")).toEqual(screenId);
26
+ expect(wrapper.getByTestId(screenId)).toBeTruthy();
27
+
28
+ expect(wrapper.getByTestId(screenId).props.accessibilityLabel).toEqual(
29
+ screenId
30
+ );
29
31
  });
30
32
  });
@@ -0,0 +1,26 @@
1
+ const {
2
+ useScreenBackgroundColor,
3
+ } = require("@applicaster/zapp-react-native-utils/reactHooks/screen");
4
+
5
+ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/screen", () => ({
6
+ useScreenBackgroundColor: jest.fn(),
7
+ useNavbarState: jest.fn().mockReturnValue({ visible: true }),
8
+ }));
9
+
10
+ describe("TV Screen Component", () => {
11
+ it("uses the useScreenBackgroundColor hook with the correct screen ID", () => {
12
+ useScreenBackgroundColor.mockReturnValue("#FF0000");
13
+
14
+ expect(useScreenBackgroundColor("test-screen-id")).toBe("#FF0000");
15
+
16
+ // Verify the hook was called with the correct screen ID
17
+ expect(useScreenBackgroundColor).toHaveBeenCalledWith("test-screen-id");
18
+ });
19
+
20
+ it("returns 'transparent' when the screen background color is not defined", () => {
21
+ useScreenBackgroundColor.mockReturnValue("transparent");
22
+
23
+ // Verify the hook returns 'transparent'
24
+ expect(useScreenBackgroundColor("test-screen-id")).toBe("transparent");
25
+ });
26
+ });
@@ -92,6 +92,10 @@ const getNavigations = ({
92
92
  return fallbackNavigations;
93
93
  };
94
94
 
95
+ const onRelease = () => {
96
+ focusManager.setInitialFocus();
97
+ };
98
+
95
99
  export const Screen = ({ route, Components }: Props) => {
96
100
  if (isNilOrEmpty(route)) {
97
101
  throw Error("Required props: route is missing");
@@ -152,12 +156,7 @@ export const Screen = ({ route, Components }: Props) => {
152
156
  const isScreenActive = useIsScreenActive();
153
157
 
154
158
  return (
155
- <FreezeWithCallback
156
- freeze={!isScreenActive}
157
- onRelease={() => {
158
- focusManager.setInitialFocus();
159
- }}
160
- >
159
+ <FreezeWithCallback freeze={!isScreenActive} onRelease={onRelease}>
161
160
  <View style={[styles.container, { backgroundColor }]}>
162
161
  <NavBarContainer isVisible={isNavBarVisible} onReady={noop}>
163
162
  <NavBar
@@ -68,21 +68,21 @@ jest.mock(
68
68
  })
69
69
  );
70
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
- );
80
-
81
71
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
82
72
  isNavBarVisible: mockIsNavBarVisible,
83
- useRoute: jest.fn(() => ({
84
- pathname: "/river/testId",
85
- screenData: { id: "testId" },
73
+ useIsScreenActive: jest.fn().mockReturnValue(true),
74
+ }));
75
+
76
+ jest.mock("@applicaster/zapp-react-native-utils/reactHooks", () => ({
77
+ useCurrentScreenData: jest.fn(() => ({
78
+ id: "testId",
79
+ })),
80
+ useNavbarState: jest.fn(() => ({
81
+ title: "Test Title",
82
+ })),
83
+ useScreenData: jest.fn(() => ({
84
+ id: "testId",
85
+ navigations: [{ id: "testId", category: "nav_bar" }],
86
86
  })),
87
87
  useNavigation: jest.fn(() => ({
88
88
  canGoBack: () => false,
@@ -91,7 +91,15 @@ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
91
91
  screenData: { id: "testId" },
92
92
  data: { screen: { id: "testId" } },
93
93
  })),
94
- useIsScreenActive: jest.fn().mockReturnValue(true),
94
+ useRoute: jest.fn(() => ({
95
+ pathname: "/river/testId",
96
+ screenData: { id: "testId" },
97
+ })),
98
+ useDimensions: jest.fn(() => ({
99
+ width: 1920,
100
+ height: 1080,
101
+ })),
102
+ useIsTablet: jest.fn(() => false),
95
103
  }));
96
104
 
97
105
  jest.mock("@applicaster/zapp-react-native-redux/hooks/usePickFromState", () => {