@applicaster/zapp-react-native-utils 12.0.0-alpha.5468407101 → 12.0.0-alpha.5471145113

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 (49) hide show
  1. package/analyticsUtils/AnalyticsEvents/index.ts +13 -0
  2. package/analyticsUtils/AnalyticsEvents/searchEvents.ts +21 -0
  3. package/analyticsUtils/AnalyticsEvents/sendShareEvent.ts +21 -0
  4. package/analyticsUtils/analyticsPlugins.ts +25 -0
  5. package/analyticsUtils/events.ts +12 -0
  6. package/analyticsUtils/index.tsx +12 -0
  7. package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +2 -3
  8. package/appUtils/focusManager/__tests__/focusManager.test.js +4 -24
  9. package/appUtils/focusManager/__tests__/index.test.ts +2 -3
  10. package/appUtils/focusManager/index.ts +76 -56
  11. package/appUtils/focusManager/treeDataStructure/Utils/index.js +74 -43
  12. package/appUtils/focusManager/utils/index.ts +100 -0
  13. package/appUtils/focusManagerAux/index.ts +76 -0
  14. package/appUtils/focusManagerAux/utils/index.ts +100 -0
  15. package/appUtils/keyCodes/keys.web.js +8 -0
  16. package/appUtils/keyCodes/keysByPlatform.js +11 -1
  17. package/appUtils/platform/const.ts +18 -0
  18. package/appUtils/platform/index.ts +1 -0
  19. package/appUtils/platform/platformUtils.ts +1 -0
  20. package/appUtils/platform/platformUtils.web.ts +49 -0
  21. package/appUtils/playerManager/index.ts +6 -0
  22. package/appUtils/playerManager/nativePlayerManager.ts +12 -0
  23. package/appUtils/playerManager/playerNative.ts +3 -12
  24. package/appUtils/playerManager/usePlayerControllerSetup.tsx +6 -1
  25. package/arrayUtils/__tests__/isFilledArray.test.ts +63 -0
  26. package/arrayUtils/index.ts +5 -0
  27. package/booleanUtils/index.ts +4 -4
  28. package/dateUtils/index.ts +11 -0
  29. package/keyboardState/index.ts +0 -0
  30. package/localizationUtils/__tests__/localizationUtils.test.ts +72 -53
  31. package/localizationUtils/index.ts +13 -22
  32. package/numberUtils/__tests__/isLikeNumber.test.ts +18 -0
  33. package/numberUtils/index.ts +9 -18
  34. package/package.json +2 -2
  35. package/reactHooks/cell-click/__tests__/index.test.js +10 -1
  36. package/reactHooks/cell-click/index.ts +12 -12
  37. package/reactHooks/feed/__tests__/useBuildPipesUrl.test.tsx +30 -70
  38. package/reactHooks/feed/__tests__/useFeedRefresh.test.tsx +6 -2
  39. package/reactHooks/feed/__tests__/useInflatedUrl.test.ts +4 -3
  40. package/reactHooks/feed/useBuildPipesUrl.ts +7 -10
  41. package/reactHooks/feed/useFeedRefresh.tsx +9 -7
  42. package/reactHooks/feed/useInflatedUrl.ts +1 -16
  43. package/reactHooks/navigation/__tests__/index.test.tsx +11 -8
  44. package/reactHooks/navigation/index.ts +56 -67
  45. package/reactHooks/screen/__tests__/useCurrentScreenData.test.tsx +21 -23
  46. package/reactHooks/screen/index.ts +2 -0
  47. package/reactHooks/screen/useScreenBackgroundColor.ts +23 -0
  48. package/reactHooks/screen/useScreenContext.ts +2 -2
  49. package/reactUtils/index.ts +102 -0
@@ -1,59 +1,59 @@
1
- import * as ReactNative from "react-native";
2
-
3
- const mocked_state = {
4
- remoteConfigurations: { localizations: {} },
5
- appData: {
6
- languageCode: "en",
7
- countryCode: "US",
8
- },
9
- };
10
-
11
- let mocked_locale = ["en-US"];
12
-
13
- jest.doMock("react-redux", () => ({
14
- useSelector: jest.fn((fn) => fn(mocked_state)),
15
- }));
1
+ import { NativeModules } from "react-native";
16
2
 
17
- const SettingsManager = {
3
+ const settingsManagerMock = {
18
4
  getConstants: jest.fn(() => ({
19
- settings: { AppleLanguages: mocked_locale },
5
+ settings: { AppleLanguages: ["en-US"] },
20
6
  })),
21
7
  };
22
8
 
23
- const QuickBrickCommunicationModule = {
9
+ const qbCommunicationModuleMock = {
24
10
  languageLocale: "en",
25
11
  countryLocale: "US",
12
+ uiLanguage: "en-US",
26
13
  };
27
14
 
28
- ReactNative.NativeModules.SettingsManager = SettingsManager;
29
-
30
- ReactNative.NativeModules.QuickBrickCommunicationModule =
31
- QuickBrickCommunicationModule;
32
-
33
- const { useIsRTL } = require("../index");
15
+ NativeModules.SettingsManager = settingsManagerMock;
16
+ NativeModules.QuickBrickCommunicationModule = qbCommunicationModuleMock;
34
17
 
35
18
  describe("localizationUtils", () => {
19
+ beforeEach(() => {
20
+ jest.resetModules();
21
+ });
22
+
36
23
  describe("when the app has a single locale", () => {
37
24
  describe("when the app has only a RTL language as locale", () => {
38
25
  beforeEach(() => {
39
- mocked_state.remoteConfigurations.localizations = {
40
- he: "http://url.com",
26
+ jest.resetModules();
27
+ const RN = require("react-native");
28
+
29
+ RN.NativeModules.QuickBrickCommunicationModule = {
30
+ languageLocale: "he",
31
+ countryLocale: "IL",
32
+ uiLanguage: "he-HE",
41
33
  };
42
34
  });
43
35
 
44
36
  it("useIsRTL returns true", () => {
37
+ const { useIsRTL } = require("../index");
45
38
  expect(useIsRTL()).toBe(true);
46
39
  });
47
40
  });
48
41
 
49
42
  describe("when the app has only a LTR language as locale", () => {
50
43
  beforeEach(() => {
51
- mocked_state.remoteConfigurations.localizations = {
52
- en: "http://url.com",
44
+ jest.resetModules();
45
+
46
+ const RN = require("react-native");
47
+
48
+ RN.NativeModules.QuickBrickCommunicationModule = {
49
+ languageLocale: "en",
50
+ countryLocale: "US",
51
+ uiLanguage: "en",
53
52
  };
54
53
  });
55
54
 
56
55
  it("useIsRTL returns false", () => {
56
+ const { useIsRTL } = require("../index");
57
57
  expect(useIsRTL()).toBe(false);
58
58
  });
59
59
  });
@@ -63,45 +63,56 @@ describe("localizationUtils", () => {
63
63
  describe("when device locale is in the app's locales", () => {
64
64
  describe("when device locale is LTR", () => {
65
65
  beforeEach(() => {
66
- mocked_state.remoteConfigurations.localizations = {
67
- he: "http://url.com",
68
- en: "http://url.com",
69
- };
66
+ jest.resetModules();
67
+
68
+ const RN = require("react-native");
70
69
 
71
- mocked_locale = ["en-US"];
70
+ RN.NativeModules.QuickBrickCommunicationModule = {
71
+ languageLocale: "en",
72
+ countryLocale: "US",
73
+ uiLanguage: "en-US",
74
+ };
72
75
  });
73
76
 
74
77
  it("useIsRTL returns false", () => {
78
+ const { useIsRTL } = require("../index");
75
79
  expect(useIsRTL()).toBe(false);
76
80
  });
77
81
  });
78
82
 
79
83
  describe("when device locale is RTL", () => {
80
84
  beforeEach(() => {
81
- mocked_state.remoteConfigurations.localizations = {
82
- he: "http://url.com",
83
- en: "http://url.com",
84
- };
85
+ jest.resetModules();
86
+ const RN = require("react-native");
85
87
 
86
- mocked_locale = ["he-HE"];
88
+ RN.NativeModules.QuickBrickCommunicationModule = {
89
+ languageLocale: "he",
90
+ countryLocale: "IL",
91
+ uiLanguage: "he",
92
+ };
87
93
  });
88
94
 
89
95
  it("useIsRTL returns true", () => {
96
+ const { useIsRTL } = require("../index");
90
97
  expect(useIsRTL()).toBe(true);
91
98
  });
92
99
  });
93
100
 
94
101
  describe("when a device has a secondary language in a supported language", () => {
95
102
  beforeEach(() => {
96
- mocked_state.remoteConfigurations.localizations = {
97
- en: "http://url.com",
98
- he: "http://url.com",
99
- };
103
+ jest.resetModules();
104
+
105
+ const RN = require("react-native");
100
106
 
101
- mocked_locale = ["es-SP", "he-HE"];
107
+ RN.NativeModules.QuickBrickCommunicationModule = {
108
+ languageLocale: "he",
109
+ countryLocale: "IL",
110
+ uiLanguage: "he",
111
+ };
102
112
  });
103
113
 
104
114
  it("useIsRTL returns true", () => {
115
+ const { useIsRTL } = require("../index");
105
116
  expect(useIsRTL()).toBe(true);
106
117
  });
107
118
  });
@@ -110,30 +121,38 @@ describe("localizationUtils", () => {
110
121
  describe("when device locale is not in the app's locales", () => {
111
122
  describe("when first app locale is LTR", () => {
112
123
  beforeEach(() => {
113
- mocked_state.remoteConfigurations.localizations = {
114
- en: "http://url.com",
115
- he: "http://url.com",
116
- };
124
+ jest.resetModules();
125
+
126
+ const RN = require("react-native");
117
127
 
118
- mocked_locale = ["fr-FR"];
128
+ RN.NativeModules.QuickBrickCommunicationModule = {
129
+ languageLocale: "fr",
130
+ countryLocale: "FR",
131
+ uiLanguage: "fr-FR",
132
+ };
119
133
  });
120
134
 
121
135
  it("useIsRTL returns false", () => {
136
+ const { useIsRTL } = require("../index");
122
137
  expect(useIsRTL()).toBe(false);
123
138
  });
124
139
  });
125
140
 
126
141
  describe("when first app locale is RTL", () => {
127
142
  beforeEach(() => {
128
- mocked_state.remoteConfigurations.localizations = {
129
- he: "http://url.com",
130
- en: "http://url.com",
131
- };
143
+ jest.resetModules();
144
+
145
+ const RN = require("react-native");
132
146
 
133
- mocked_locale = ["fr-FR"];
147
+ RN.NativeModules.QuickBrickCommunicationModule = {
148
+ languageLocale: "he",
149
+ countryLocale: "HE",
150
+ uiLanguage: "he",
151
+ };
134
152
  });
135
153
 
136
154
  it("useIsRTL returns true", () => {
155
+ const { useIsRTL } = require("../index");
137
156
  expect(useIsRTL()).toBe(true);
138
157
  });
139
158
  });
@@ -1,10 +1,9 @@
1
1
  import * as R from "ramda";
2
2
  import { ViewStyle } from "react-native";
3
- import { useSelector } from "react-redux";
4
3
 
5
- import { getDeviceLocales } from "./deviceLocales";
6
4
  import { useMemo } from "react";
7
5
  import { getUILanguage } from "../appUtils/localizationsHelper";
6
+ import { utilsLogger } from "../logger";
8
7
 
9
8
  export {
10
9
  getLocale,
@@ -45,34 +44,26 @@ export function useLocalizedStrings({ localizations }) {
45
44
  return result;
46
45
  }
47
46
 
48
- function getLocaleToUse(languageCodes, localizations) {
49
- const matchingLanguages = languageCodes.filter(
50
- R.contains(R.__, localizations)
51
- );
47
+ export function getIsRTL(): boolean {
48
+ const uiLanguage = getUILanguage();
49
+
50
+ if (!uiLanguage) {
51
+ utilsLogger.error({ message: "getUILanguage returned null or undefined" });
52
52
 
53
- if (matchingLanguages?.length) {
54
- return R.head(matchingLanguages);
53
+ return false;
55
54
  }
56
55
 
57
- return R.head(localizations);
58
- }
56
+ const [languageCode] = uiLanguage.split("-");
59
57
 
60
- export function getIsRTLFromLocalizations(localizations): boolean {
61
- const deviceLocales = getDeviceLocales() || [];
62
- const localeToUse = getLocaleToUse(deviceLocales, R.keys(localizations));
58
+ const lowerCaseLanguageCode = languageCode.toLocaleLowerCase();
63
59
 
64
- return R.contains(localeToUse, RTL_LOCALES);
65
- }
60
+ const isRTL = R.contains(lowerCaseLanguageCode, RTL_LOCALES);
66
61
 
67
- const remoteConfigLocalizationSelector = R.path([
68
- "remoteConfigurations",
69
- "localizations",
70
- ]);
62
+ return isRTL;
63
+ }
71
64
 
72
65
  export function useIsRTL(): boolean {
73
- const localizations = useSelector(remoteConfigLocalizationSelector);
74
-
75
- return getIsRTLFromLocalizations(localizations);
66
+ return getIsRTL();
76
67
  }
77
68
 
78
69
  export const applyRTLStylesIfNeeded = (
@@ -7,12 +7,24 @@ describe("isLikeNumber", () => {
7
7
  expect(isLikeNumber(value)).toBe(true);
8
8
  });
9
9
 
10
+ it("value is a number", () => {
11
+ const value = 123.45;
12
+
13
+ expect(isLikeNumber(value)).toBe(true);
14
+ });
15
+
10
16
  it("value is a string as number", () => {
11
17
  const value = "123";
12
18
 
13
19
  expect(isLikeNumber(value)).toBe(true);
14
20
  });
15
21
 
22
+ it("value is a string as number", () => {
23
+ const value = "123.45";
24
+
25
+ expect(isLikeNumber(value)).toBe(true);
26
+ });
27
+
16
28
  it("value is empty string", () => {
17
29
  const value = "";
18
30
 
@@ -54,4 +66,10 @@ describe("isLikeNumber", () => {
54
66
 
55
67
  expect(isLikeNumber(value)).toBe(false);
56
68
  });
69
+
70
+ it("NaN is not a number", () => {
71
+ const value = NaN;
72
+
73
+ expect(isLikeNumber(value)).toBe(false);
74
+ });
57
75
  });
@@ -50,28 +50,19 @@ export const toFiniteNumberWithDefault = (
50
50
  return possibleNumber;
51
51
  };
52
52
 
53
- export const isLikeNumber = (value: any): boolean => {
54
- if (R.isEmpty(value)) {
55
- return false;
56
- }
57
-
58
- if (R.is(Number, value)) {
59
- return true;
60
- }
53
+ export const isLikeNumber = (value: unknown): boolean => {
54
+ const possibleNumber = toNumber(value);
61
55
 
62
- if (R.is(String, value)) {
63
- const onlyDigit = value
64
- .split("")
65
- .filter((char) =>
66
- ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].includes(char)
67
- )
68
- .join("");
69
-
70
- return value === onlyDigit;
56
+ if (R.isNil(possibleNumber)) {
57
+ return false;
71
58
  }
72
59
 
73
- return false;
60
+ return true;
74
61
  };
75
62
 
76
63
  export const isZero = (value: unknown): boolean =>
77
64
  Object.is(value, -0) || Object.is(value, 0);
65
+
66
+ export const isMinusZero = (value: number) => {
67
+ return 1 / value === -Infinity;
68
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applicaster/zapp-react-native-utils",
3
- "version": "12.0.0-alpha.5468407101",
3
+ "version": "12.0.0-alpha.5471145113",
4
4
  "description": "Applicaster Zapp React Native utilities package",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "homepage": "https://github.com/applicaster/quickbrick#readme",
30
30
  "dependencies": {
31
- "@applicaster/applicaster-types": "12.0.0-alpha.5468407101",
31
+ "@applicaster/applicaster-types": "12.0.0-alpha.5471145113",
32
32
  "buffer": "^5.2.1",
33
33
  "camelize": "^1.0.0",
34
34
  "create-react-context": "^0.2.3",
@@ -1,11 +1,14 @@
1
1
  import * as React from "react";
2
2
  import { cleanup, renderHook } from "@testing-library/react-hooks";
3
3
  import { CellTapContext } from "@applicaster/zapp-react-native-ui-components/Contexts/CellTapContext";
4
+ import { ActionExecutorContext } from "@applicaster/zapp-react-native-utils/actionsExecutor/ActionExecutorContext";
5
+
4
6
  import { waitFor } from "@testing-library/react-native";
5
7
 
6
8
  const navigator = {
7
9
  getPathname: () => "pathnameMock",
8
10
  push: jest.fn(),
11
+ data: {},
9
12
  };
10
13
 
11
14
  jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
@@ -42,9 +45,15 @@ const mockProps = {
42
45
 
43
46
  const onCellTap = jest.fn();
44
47
 
48
+ const actionExecutor = {
49
+ handleEntryActions: jest.fn(() => Promise.resolve()),
50
+ };
51
+
45
52
  const wrapper = ({ children }) => (
46
53
  <CellTapContext.Provider value={onCellTap}>
47
- {children}
54
+ <ActionExecutorContext.Provider value={actionExecutor}>
55
+ {children}
56
+ </ActionExecutorContext.Provider>
48
57
  </CellTapContext.Provider>
49
58
  );
50
59
 
@@ -11,9 +11,9 @@ import {
11
11
  } from "@applicaster/zapp-react-native-utils/reactHooks/navigation";
12
12
  import { ZappPipesEntryContext } from "@applicaster/zapp-react-native-ui-components/Contexts";
13
13
  import { toBooleanWithDefaultTrue } from "@applicaster/zapp-react-native-utils/booleanUtils";
14
- import { noop } from "../../functionUtils";
15
- import { useContext } from "react";
16
- import { ActionExecutorContext } from "../../actionsExecutor/ActionExecutorContext";
14
+ import { ActionExecutorContext } from "@applicaster/zapp-react-native-utils/actionsExecutor/ActionExecutorContext";
15
+
16
+ import { isFunction, noop } from "../../functionUtils";
17
17
  import { useSendAnalyticsOnPress } from "../analytics";
18
18
  import { logOnPress, warnEmptyContentType } from "./helpers";
19
19
 
@@ -30,12 +30,12 @@ type Props = {
30
30
  zappPipesData?: ZappPipesData;
31
31
  };
32
32
 
33
- export const useCellClick = (props: Props) => {
34
- const { component, zappPipesData } = props;
33
+ export const useCellClick = ({ component, zappPipesData, item }: Props) => {
35
34
  const { push, currentRoute } = useNavigation();
36
35
  const { pathname } = useRoute();
37
- const onCellTap = React.useContext(CellTapContext);
38
- const actionExecutor = useContext(ActionExecutorContext);
36
+
37
+ const onCellTap: Option<Function> = React.useContext(CellTapContext);
38
+ const actionExecutor = React.useContext(ActionExecutorContext);
39
39
 
40
40
  const cellSelectable = toBooleanWithDefaultTrue(
41
41
  component?.rules?.component_cells_selectable
@@ -47,7 +47,7 @@ export const useCellClick = (props: Props) => {
47
47
  const logTimestamp = useProfilerLogging();
48
48
 
49
49
  const sendAnalyticsOnPress = useSendAnalyticsOnPress(
50
- props.item,
50
+ item,
51
51
  component,
52
52
  zappPipesData
53
53
  );
@@ -56,7 +56,7 @@ export const useCellClick = (props: Props) => {
56
56
  async (_item?: ZappEntry | any, _index?: number) => {
57
57
  // Making sure we are not getting GestureResponderEvent in here.
58
58
  const isZappEntry = _item?.id && _item?.type;
59
- const selectedItem = isZappEntry ? _item : props.item;
59
+ const selectedItem = isZappEntry ? _item : item;
60
60
  setEntryContext?.(selectedItem);
61
61
 
62
62
  if (!selectedItem?.type?.value) {
@@ -80,10 +80,10 @@ export const useCellClick = (props: Props) => {
80
80
  });
81
81
  }
82
82
  } else {
83
- if (typeof onCellTap === "function") {
84
- onCellTap(selectedItem, _index);
83
+ if (isFunction(onCellTap)) {
84
+ onCellTap?.(selectedItem, _index);
85
85
  } else {
86
- if (currentRoute === pathname || pathname === "videoModal") {
86
+ if (currentRoute === pathname || pathname.includes("video-modal")) {
87
87
  const targetScreen = component?.data?.target;
88
88
 
89
89
  push(
@@ -1,77 +1,26 @@
1
- import React from "react";
2
1
  import { renderHook } from "@testing-library/react-hooks";
3
- import configureStore from "redux-mock-store";
4
- import thunk from "redux-thunk";
5
- import { Provider } from "react-redux";
6
-
7
2
  import { encodeParams } from "@applicaster/zapp-pipes-v2-client/src/utils";
8
3
 
9
- const mockStore = configureStore([thunk]);
10
-
11
- jest.useFakeTimers();
12
-
13
4
  const appData = {
14
5
  platform: "foo",
15
6
  version_name: "1.2.0",
16
7
  sdk_version: "2.0.0",
17
8
  };
18
9
 
19
- const pipesEndpoints = {
20
- "http://foo.com/show": {
21
- context_obj: [
22
- { type: "ctx", key: "platform" },
23
- { type: "query", mapper: "version", key: "appVersion" },
24
- { type: "header", mapper: "SDK", key: "sdkVersion" },
25
- ],
26
- },
27
- };
28
-
29
- const store_mock = { appData, pipesEndpoints };
30
-
31
- const defaultStore = mockStore({
32
- pipesEndpoints,
33
- appData,
34
- });
10
+ let INFLATED_URL;
35
11
 
36
- const wrapper: React.FC<any> = ({ children, store }) => (
37
- <Provider store={store}>{children}</Provider>
12
+ jest.mock(
13
+ "@applicaster/zapp-react-native-utils/reactHooks/feed/useInflatedUrl",
14
+ () => ({
15
+ useInflatedUrl: () => INFLATED_URL,
16
+ })
38
17
  );
39
18
 
40
- const navigator = {
41
- currentRoute: "/river/A1234",
42
- };
43
-
44
- jest.mock("../../navigation", () => ({
45
- useNavigation: jest.fn(() => navigator),
46
- useRoute: jest.fn(() => ({})),
47
- }));
48
-
49
- const contexts = {
50
- entry: { id: "show-1" },
51
- search: {},
52
- screen: {},
53
- };
54
-
55
- const contextMock = (type) => ({
56
- useZappPipesContext: () => [contexts[type] || {}],
57
- });
58
-
59
- jest.mock("@applicaster/zapp-react-native-ui-components/Contexts", () => ({
60
- ZappPipesEntryContext: contextMock("entry"),
61
- ZappPipesSearchContext: contextMock("search"),
62
- ZappPipesScreenContext: contextMock("screen"),
63
- }));
64
-
65
- jest.mock("@applicaster/zapp-react-native-redux/AppStore", () => ({
66
- appStore: {
67
- get: jest.fn((prop) => store_mock[prop]),
68
- },
69
- }));
70
-
71
19
  const { useBuildPipesUrl } = require("../useBuildPipesUrl");
72
20
 
73
21
  describe("useBuildPipesUrl", () => {
74
22
  it("returns the proper url", async () => {
23
+ INFLATED_URL = "http://foo.com/show/show-1";
75
24
  const url = "http://foo.com/show/{{showId}}";
76
25
 
77
26
  const mapping = {
@@ -81,12 +30,20 @@ describe("useBuildPipesUrl", () => {
81
30
  },
82
31
  };
83
32
 
84
- const { result, waitForNextUpdate } = renderHook(
85
- () => useBuildPipesUrl({ url, mapping }),
86
- {
87
- wrapper,
88
- initialProps: { store: defaultStore },
89
- }
33
+ const buildResult = {
34
+ params: {
35
+ ctx: encodeParams({ platform: appData.platform }),
36
+ version: appData.version_name,
37
+ },
38
+ headers: { SDK: appData.sdk_version },
39
+ };
40
+
41
+ const mockedRequestBuilder = {
42
+ build: jest.fn(() => Promise.resolve(buildResult)),
43
+ };
44
+
45
+ const { result, waitForNextUpdate } = renderHook(() =>
46
+ useBuildPipesUrl({ url, mapping, requestBuilder: mockedRequestBuilder })
90
47
  );
91
48
 
92
49
  expect(result.current.url).toBe("http://foo.com/show/show-1");
@@ -108,6 +65,7 @@ describe("useBuildPipesUrl", () => {
108
65
  });
109
66
 
110
67
  it("returns empty object if url is not in endpoints", async () => {
68
+ INFLATED_URL = "http://foobar.com/show-1";
111
69
  const url = "http://foobar.com/{{showId}}";
112
70
 
113
71
  const mapping = {
@@ -117,12 +75,14 @@ describe("useBuildPipesUrl", () => {
117
75
  },
118
76
  };
119
77
 
120
- const { result, waitForNextUpdate } = renderHook(
121
- () => useBuildPipesUrl({ url, mapping }),
122
- {
123
- wrapper,
124
- initialProps: { store: defaultStore },
125
- }
78
+ const buildResult = {};
79
+
80
+ const mockedRequestBuilder = {
81
+ build: jest.fn(() => Promise.resolve(buildResult)),
82
+ };
83
+
84
+ const { result, waitForNextUpdate } = renderHook(() =>
85
+ useBuildPipesUrl({ url, mapping, requestBuilder: mockedRequestBuilder })
126
86
  );
127
87
 
128
88
  expect(result.current.url).toBe("http://foobar.com/show-1");
@@ -1,9 +1,13 @@
1
1
  import { renderHook } from "@testing-library/react-hooks";
2
2
 
3
- import { useFeedRefresh, feedRefreshLogger } from "../";
4
-
5
3
  jest.useFakeTimers();
6
4
 
5
+ jest.mock("@applicaster/zapp-react-native-utils/reactHooks/navigation", () => ({
6
+ useIsScreenActive: () => true,
7
+ }));
8
+
9
+ const { useFeedRefresh, feedRefreshLogger } = require("..");
10
+
7
11
  describe("useFeedRefresh", () => {
8
12
  const reloadData = jest.fn();
9
13
 
@@ -84,7 +84,8 @@ describe("getInflatedDataSourceUrl", () => {
84
84
  expect(reactHooksLogger.warning).toHaveBeenCalledTimes(1);
85
85
 
86
86
  expect(reactHooksLogger.warning).toHaveBeenCalledWith({
87
- message: "Not enough data to fully inflate url: {{entry.id}}",
87
+ message:
88
+ "Not enough data to fully inflate url: {{entry.id}} source: http://foo.com/show/seriesId={{seriesId}}",
88
89
  data: { source, contexts, mapping },
89
90
  });
90
91
  });
@@ -120,7 +121,7 @@ describe("getInflatedDataSourceUrl", () => {
120
121
 
121
122
  expect(reactHooksLogger.warning).toHaveBeenCalledWith({
122
123
  message:
123
- "Not enough data to fully inflate url: {{entry.extensions.groupName}}",
124
+ "Not enough data to fully inflate url: {{entry.extensions.groupName}} source: https://zapp-1689-emmys.web.app/emmys/group-categories/{{groupName}}",
124
125
  data: { source, contexts, mapping },
125
126
  });
126
127
  });
@@ -162,7 +163,7 @@ describe("getInflatedDataSourceUrl", () => {
162
163
 
163
164
  expect(reactHooksLogger.warning).toHaveBeenCalledWith({
164
165
  message:
165
- "Not enough data to fully inflate url: {{entry.extensions.groupName2}}",
166
+ "Not enough data to fully inflate url: {{entry.extensions.groupName2}} source: https://zapp-1689-emmys.web.app/emmys/group-categories/{{groupName1}}?test={{groupName2}}",
166
167
  data: { source, contexts, mapping },
167
168
  });
168
169
  });