@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
172 lines (144 loc) • 6.75 kB
JavaScript
import {
SCREEN_TYPES,
getTypeMatcher,
itemIsOfType,
getIdResolver,
} from "../itemTypes";
import {
river,
article,
riverFeed,
menuItem,
content,
vod,
audio,
channel,
playable,
urlScheme,
} from "./fixtures";
const itemIdResolvers = require("../itemIdResolvers");
const itemTypeMatchers = require("../itemTypeMatchers");
describe("SCREEN_TYPES", () => {
it("registers the screen types", () => {
expect(SCREEN_TYPES).toHaveProperty("RIVER", "river");
expect(SCREEN_TYPES).toHaveProperty("ARTICLE", "article");
expect(SCREEN_TYPES).toHaveProperty("MENU_ITEM", "menu_item");
expect(SCREEN_TYPES).toHaveProperty("CONTENT_SCREEN", "content_screen");
expect(SCREEN_TYPES).toHaveProperty("PLAYABLE", "playable");
expect(SCREEN_TYPES).toHaveProperty("URL_SCHEME", "url_scheme");
});
});
describe("getTypeMatcher", () => {
it("returns the matcher for the type", () => {
expect(getTypeMatcher(SCREEN_TYPES.RIVER)).toEqual(
itemTypeMatchers.isRiver
);
expect(getTypeMatcher(SCREEN_TYPES.ARTICLE)).toEqual(
itemTypeMatchers.isArticle
);
expect(getTypeMatcher(SCREEN_TYPES.MENU_ITEM)).toEqual(
itemTypeMatchers.isMenuItem
);
expect(getTypeMatcher(SCREEN_TYPES.CONTENT_SCREEN)).toEqual(
itemTypeMatchers.isContentScreen
);
expect(getTypeMatcher(SCREEN_TYPES.PLAYABLE)).toEqual(
itemTypeMatchers.isPlayable
);
expect(getTypeMatcher(SCREEN_TYPES.URL_SCHEME)).toEqual(
itemTypeMatchers.isUrlScheme
);
});
});
describe("isItemOfType", () => {
it("is a curried function", () => {
expect(itemIsOfType(river, SCREEN_TYPES.RIVER)).toBeBoolean();
expect(itemIsOfType(river)).toBeFunction();
});
it("returns true if the item is of the given type", () => {
expect(itemIsOfType(river, SCREEN_TYPES.RIVER)).toBe(true);
expect(itemIsOfType(riverFeed, SCREEN_TYPES.RIVER)).toBe(true);
expect(itemIsOfType(article, SCREEN_TYPES.ARTICLE)).toBe(true);
expect(itemIsOfType(menuItem, SCREEN_TYPES.MENU_ITEM)).toBe(true);
expect(itemIsOfType(content, SCREEN_TYPES.CONTENT_SCREEN)).toBe(true);
expect(itemIsOfType(playable, SCREEN_TYPES.PLAYABLE)).toBe(true);
expect(itemIsOfType(vod, SCREEN_TYPES.PLAYABLE)).toBe(true);
expect(itemIsOfType(audio, SCREEN_TYPES.PLAYABLE)).toBe(true);
expect(itemIsOfType(channel, SCREEN_TYPES.PLAYABLE)).toBe(true);
expect(itemIsOfType(urlScheme, SCREEN_TYPES.URL_SCHEME)).toBe(true);
});
it("returns false otherwise", () => {
// content screen expectations are commented out cause they will yield true
// for all types, as a fallback scenario
expect(itemIsOfType(river, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(river, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(river, SCREEN_TYPES.PLAYABLE)).toBe(false);
expect(itemIsOfType(river, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(river, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(riverFeed, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(riverFeed, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(riverFeed, SCREEN_TYPES.PLAYABLE)).toBe(false);
expect(itemIsOfType(riverFeed, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(riverFeed, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(article, SCREEN_TYPES.RIVER)).toBe(false);
expect(itemIsOfType(article, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(article, SCREEN_TYPES.PLAYABLE)).toBe(false);
expect(itemIsOfType(article, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(article, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(menuItem, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(menuItem, SCREEN_TYPES.RIVER)).toBe(false);
expect(itemIsOfType(menuItem, SCREEN_TYPES.PLAYABLE)).toBe(false);
expect(itemIsOfType(menuItem, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(menuItem, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(playable, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(playable, SCREEN_TYPES.RIVER)).toBe(false);
expect(itemIsOfType(playable, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(playable, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(playable, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(vod, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(vod, SCREEN_TYPES.RIVER)).toBe(false);
expect(itemIsOfType(vod, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(vod, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(vod, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(audio, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(audio, SCREEN_TYPES.RIVER)).toBe(false);
expect(itemIsOfType(audio, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(audio, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(audio, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(channel, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(channel, SCREEN_TYPES.RIVER)).toBe(false);
expect(itemIsOfType(channel, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(channel, SCREEN_TYPES.URL_SCHEME)).toBe(false);
// expect(itemIsOfType(playable, SCREEN_TYPES.CONTENT_SCREEN)).toBe(false);
expect(itemIsOfType(content, SCREEN_TYPES.ARTICLE)).toBe(false);
expect(itemIsOfType(content, SCREEN_TYPES.MENU_ITEM)).toBe(false);
expect(itemIsOfType(content, SCREEN_TYPES.RIVER)).toBe(false);
expect(itemIsOfType(content, SCREEN_TYPES.PLAYABLE)).toBe(false);
expect(itemIsOfType(content, SCREEN_TYPES.URL_SCHEME)).toBe(false);
});
});
describe("getIdResolver", () => {
it("returns the id resolver function based on the type", () => {
expect(getIdResolver(SCREEN_TYPES.RIVER)).toEqual(
itemIdResolvers.getRiverId
);
expect(getIdResolver(SCREEN_TYPES.ARTICLE)).toEqual(
itemIdResolvers.getArticleId
);
expect(getIdResolver(SCREEN_TYPES.MENU_ITEM)).toEqual(
itemIdResolvers.getMenuItemId
);
expect(getIdResolver(SCREEN_TYPES.CONTENT_SCREEN)).toEqual(
itemIdResolvers.getContentScreenId
);
expect(getIdResolver(SCREEN_TYPES.PLAYABLE)).toEqual(
itemIdResolvers.getPlayableId
);
expect(getIdResolver(SCREEN_TYPES.URL_SCHEME)).toEqual(
itemIdResolvers.getUrlSchemeId
);
});
it("returns getIdProp if the id resolver can't be found", () => {
expect(getIdResolver("foo")).toEqual(itemIdResolvers.getIdProp);
});
});