@applicaster/quick-brick-core
Version:
Core package for Applicaster's Quick Brick App
119 lines (94 loc) • 2.84 kB
text/typescript
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);
});
});
});