UNPKG

@applicaster/quick-brick-core

Version:

Core package for Applicaster's Quick Brick App

119 lines (94 loc) 2.84 kB
const { targetShouldOpenExternally } = require("../utils"); const mockedOpenUrl = jest.fn(); jest.mock("react-native", () => { const RN = jest.requireActual("react-native"); RN.Linking = { openUrl: mockedOpenUrl, }; return RN; }); const riversWithoutWebview = { river2: { type: "general_content", }, }; const riversWithWebview = { ...riversWithoutWebview, river2: { type: "webview_screen_qb", }, }; const targetScreen = { screenType: "cotent_screen", }; const targetScreenLink = { screenType: "link", }; describe("targetShouldOpenExternally", () => { describe("when entry has the external_url type", () => { it("returns true", () => { const entry = { type: { value: "external_url" }, link: { href: "https://www.google.com" }, }; expect(targetShouldOpenExternally(entry)).toBe(true); }); }); describe("when entry has a url with open_external_url flag", () => { it("returns true", () => { const entry = { link: { href: "https://www.google.com?open_external_url=true" }, }; expect(targetShouldOpenExternally(entry)).toBe(true); }); }); describe("when entry has open_external_url flag in extensions", () => { it("returns true when extension is boolean true", () => { const entry = { link: { href: "https://www.google.com" }, extensions: { open_external_url: true }, }; expect(targetShouldOpenExternally(entry)).toBe(true); }); it("returns true when extension is the string true", () => { const entry = { link: { href: "https://www.google.com" }, extensions: { open_external_url: "true" }, }; expect(targetShouldOpenExternally(entry)).toBe(true); }); }); describe("when screen type is link", () => { it("returns true when no webview is present in rivers", () => { const entry = { type: { value: "internal_link" } }; expect( targetShouldOpenExternally( entry, targetScreenLink, riversWithoutWebview ) ).toBe(true); }); }); describe("otherwise", () => { it("returns false", () => { const entry1 = { type: { value: "internal_link" } }; expect( targetShouldOpenExternally(entry1, targetScreenLink, riversWithWebview) ).toBe(false); const entry2 = { type: { value: "internal_link" }, link: { href: "https://www.google.com" }, }; expect( targetShouldOpenExternally(entry2, targetScreenLink, riversWithWebview) ).toBe(false); expect( targetShouldOpenExternally(entry2, targetScreen, riversWithWebview) ).toBe(false); expect( targetShouldOpenExternally(entry2, targetScreen, riversWithoutWebview) ).toBe(false); }); }); });