UNPKG

@applicaster/zapp-react-native-ui-components

Version:

Applicaster Zapp React Native ui components for the Quick Brick App

141 lines (121 loc) 3.67 kB
import * as R from "ramda"; import { entryContext, river, riverDataSources, screenContext, screenData, searchContext, } from "./fixtures"; jest.mock("@applicaster/zapp-react-native-redux/ZappPipes", () => ({ loadPipesData: jest.fn((value) => Promise.resolve(value)), })); const { riverIsCurrentRoute, getDatasourceUrl, ignoreComponentsWithClearCacheFlag, } = require("../utils"); describe("riverIsCurrentRoute", () => { const route = "/river/homeId/river/screenId"; const riverId = "screenId"; it("returns true if the riverId is the current active route", () => { expect(riverIsCurrentRoute(riverId, route)).toBe(true); }); it("returns false otherwise", () => { expect(riverIsCurrentRoute("someId", route)).toBe(false); }); it("returns false if riverId is undefined", () => { expect(riverIsCurrentRoute(undefined, route)); }); }); describe("ignoreComponentsWithClearCacheFlag", () => { it("rejects the components which have the clear_cache_on_reload flag set to true", () => { expect(ignoreComponentsWithClearCacheFlag(river.ui_components).length).toBe( R.flatten(riverDataSources).length ); }); }); describe("getDatasourceUrl", () => { const defaultArgs = (args = {}) => R.mergeRight( { screenData, entryContext, screenContext, searchContext }, args ); it("is a curried function", () => { const fn = getDatasourceUrl(defaultArgs()); expect(typeof fn).toBe("function"); }); it("returns the url", () => { const datasourceUrl = "http://api.com/path"; const component = { data: { source: datasourceUrl }, }; expect(getDatasourceUrl(defaultArgs(), component)).toEqual(datasourceUrl); }); it("returns the url with mapped params if defined", () => { const datasourceUrl = `http://api.com/path?id=${entryContext.id}&screen=${ screenContext.id }&query=${encodeURIComponent(searchContext)}&ext=${ entryContext.extensions.prop }`; const component = { data: { source: "http://api.com/path?id={{entryId}}&screen={{screenId}}&query={{searchQ}}&ext={{extensionProp}}", mapping: { entryId: { source: "entry", property: "id", }, extensionProp: { source: "entry", property: "extensions.prop", }, screenId: { source: "screen", property: "id", }, searchQ: { source: "search", property: "query", }, }, }, }; expect(getDatasourceUrl(defaultArgs(), component)).toBe(datasourceUrl); }); it("uses screenData from route provider if screenContext is undefined", () => { const datasourceUrl = `http://api.com/path?id=${entryContext.id}&screen=${ screenData.id }&query=${encodeURIComponent(searchContext)}&ext=${ entryContext.extensions.prop }`; const component = { data: { source: "http://api.com/path?id={{entryId}}&screen={{screenId}}&query={{searchQ}}&ext={{extensionProp}}", mapping: { entryId: { source: "entry", property: "id", }, extensionProp: { source: "entry", property: "extensions.prop", }, screenId: { source: "screen", property: "id", }, searchQ: { source: "search", property: "query", }, }, }, }; expect( getDatasourceUrl(defaultArgs({ screenContext: undefined }), component) ).toBe(datasourceUrl); }); });