UNPKG

frontitygit

Version:

A Frontity source package for the REST API of self-hosted and WordPress.com sites

650 lines (540 loc) 23.8 kB
import { createStore } from "@frontity/connect"; import clone from "clone-deep"; import wpSource from "../"; import merge from "deepmerge"; describe("state.source.get", () => { const initStore = (data = {}) => { const config = clone(wpSource()); // replace data by the one passed as argument config.state.source.data = data; return createStore(config); }; test("returns an object with isReady/isFetching = false if not found", () => { const store = initStore(); expect(store.state.source.get("/some-post/")).toEqual({ isFetching: false, isReady: false, link: "/some-post/", page: 1, query: {}, route: "/some-post/", }); }); test("returns the correct object (path)", () => { const post = { type: "post", id: 1, isPostType: true, isReady: true, isFetching: false, }; const { source } = initStore({ "/some-post/": post }).state; expect(source.get("/some-post")).toEqual(post); expect(source.get("/some-post/")).toEqual(post); expect(source.get("https://wp.site.test/some-post/")).toEqual(post); }); test("returns the correct object (path, page)", () => { const archive = { taxonomy: "tag", id: 2, items: [], isArchive: true, isTaxonomy: true, isTag: true, isReady: true, isFetching: false, }; const { source } = initStore({ "/tag/some-tag/page/2/": archive }).state; expect(source.get("/tag/some-tag/page/2")).toEqual(archive); expect(source.get("/tag/some-tag/page/2/")).toEqual(archive); expect(source.get("https://wp.site.test/tag/some-tag/page/2/")).toEqual( archive ); }); test("returns the correct object (path, query)", () => { const archive = { taxonomy: "tag", id: 2, items: [], isArchive: true, isTaxonomy: true, isTag: true, isReady: true, isFetching: false, }; const { source } = initStore({ "/tag/some-tag/?s=search": archive }).state; expect(source.get("/tag/some-tag?s=search")).toEqual(archive); expect(source.get("/tag/some-tag/?s=search")).toEqual(archive); expect(source.get("https://wp.site.test/tag/some-tag/?s=search")).toEqual( archive ); }); test("returns the correct object (path, unordered query)", () => { const archive = { taxonomy: "tag", id: 2, items: [], isArchive: true, isTaxonomy: true, isTag: true, isReady: true, isFetching: false, }; const { source } = initStore({ "/tag/some-tag/?k1=v1&k2=v2": archive, }).state; expect(source.get("/tag/some-tag?k2=v2&k1=v1")).toEqual(archive); expect(source.get("/tag/some-tag/?k2=v2&k1=v1")).toEqual(archive); expect( source.get("https://wp.site.test/tag/some-tag/?k2=v2&k1=v1") ).toEqual(archive); }); test("returns the correct object (path, page, query)", () => { const archive = { taxonomy: "tag", id: 2, items: [], isArchive: true, isTaxonomy: true, isTag: true, isReady: true, isFetching: false, }; const { source } = initStore({ "/tag/some-tag/page/2/?s=search": archive, }).state; expect(source.get("/tag/some-tag/page/2/?s=search")).toEqual(archive); expect(source.get("/tag/some-tag/page/2?s=search")).toEqual(archive); expect( source.get("https://wp.site.test/tag/some-tag/page/2?s=search") ).toEqual(archive); }); }); describe("state.wpSource.isWpCom (state.source.isWpCom)", () => { const initStore = () => { const config = clone(merge(wpSource(), { state: { frontity: {} } })); return createStore(config); }; it("should be false (state.frontity.url, state.source.url not WP com subdomain)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; state.source.url = "https://wp-domain.com/"; expect(state.wpSource.isWpCom).toBe(false); expect(state.source.isWpCom).toBe(false); }); it("should be false (state.frontity.url, state.wpSource.api not WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.wpSource.api = "https://wp-domain.com/wp-json/"; expect(state.wpSource.isWpCom).toBe(false); expect(state.source.isWpCom).toBe(false); // Without trailing slash. state.wpSource.api = "https://wp-domain.com/wp-json"; expect(state.wpSource.isWpCom).toBe(false); expect(state.source.isWpCom).toBe(false); }); it("should be false (state.frontity.url, state.source.api not WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.source.api = "https://wp-domain.com/wp-json/"; expect(state.wpSource.isWpCom).toBe(false); expect(state.source.isWpCom).toBe(false); // Without trailing slash. state.source.api = "https://wp-domain.com/wp-json"; expect(state.wpSource.isWpCom).toBe(false); expect(state.source.isWpCom).toBe(false); }); it("should be true (state.frontity.url, state.source.url is WP com subdomain)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; state.source.url = "https://sub.wordpress.com/"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); }); it("should be true (state.frontity.url, state.wpSource.api is WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.wpSource.api = "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com/"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); // Without trailing slash. state.wpSource.api = "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); }); it("should be true (state.frontity.url, state.source.api is WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.source.api = "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com/"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); // Without trailing slash. state.source.api = "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); }); it("should be true (state.frontity.url, state.wpSource.api is WP com, custom domain)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.wpSource.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); // Without trailing slash. state.wpSource.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); }); it("should be true (state.frontity.url, state.source.api is WP com, custom domain)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.source.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); // Without trailing slash. state.source.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com"; expect(state.wpSource.isWpCom).toBe(true); expect(state.source.isWpCom).toBe(true); }); }); describe("state.wpSource.api (state.source.api)", () => { const initStore = () => { const config = clone(merge(wpSource(), { state: { frontity: {} } })); return createStore(config); }; it("should return a WP org and Business WP com API (state.frontity.url)", () => { const { state } = initStore(); // With trailing slash. state.frontity.url = "https://final-domain.com/"; expect(state.wpSource.api).toBe("https://final-domain.com/wp-json/"); expect(state.source.api).toBe("https://final-domain.com/wp-json/"); // Without trailing slash. state.frontity.url = "https://final-domain.com"; expect(state.wpSource.api).toBe("https://final-domain.com/wp-json/"); expect(state.source.api).toBe("https://final-domain.com/wp-json/"); }); it("should return a WP org and Business WP com API (state.source.url)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.source.url = "https://wp-domain.com/"; expect(state.wpSource.api).toBe("https://wp-domain.com/wp-json/"); expect(state.source.api).toBe("https://wp-domain.com/wp-json/"); // Without trailing slash. state.source.url = "https://wp-domain.com"; expect(state.wpSource.api).toBe("https://wp-domain.com/wp-json/"); expect(state.source.api).toBe("https://wp-domain.com/wp-json/"); }); it("should return a WP org and Business WP com API (state.frontity.url, prefix)", () => { const { state } = initStore(); // With a trailing slash and different combinations of `prefix`. state.frontity.url = "https://final-domain.com/"; state.wpSource.prefix = "api"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); state.wpSource.prefix = "api/"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); state.wpSource.prefix = "/api"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); state.wpSource.prefix = "/api/"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); // Without a trailing slash. state.frontity.url = "https://final-domain.com"; state.wpSource.prefix = "api"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); state.wpSource.prefix = "api/"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); state.wpSource.prefix = "/api"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); state.wpSource.prefix = "/api/"; expect(state.wpSource.api).toBe("https://final-domain.com/api/"); expect(state.source.api).toBe("https://final-domain.com/api/"); }); it("should return a WP org and Business WP com API (state.source.url, prefix)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash and different combinations of `prefix`. state.source.url = "https://wp-domain.com/"; state.wpSource.prefix = "api"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); state.wpSource.prefix = "api/"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); state.wpSource.prefix = "/api"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); state.wpSource.prefix = "/api/"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); // Without a trailing slash. state.source.url = "https://wp-domain.com"; state.wpSource.prefix = "api"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); state.wpSource.prefix = "api/"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); state.wpSource.prefix = "/api"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); state.wpSource.prefix = "/api/"; expect(state.wpSource.api).toBe("https://wp-domain.com/api/"); expect(state.source.api).toBe("https://wp-domain.com/api/"); }); it("should return a WP com API (state.frontity.url, state.wpSource.isWpCom)", () => { const { state } = initStore(); state.wpSource.isWpCom = true; // With final slash. state.frontity.url = "https://final-domain.com/"; expect(state.wpSource.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/final-domain.com/" ); expect(state.source.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/final-domain.com/" ); // Without final slash. state.frontity.url = "https://final-domain.com"; expect(state.wpSource.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/final-domain.com/" ); expect(state.source.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/final-domain.com/" ); }); it("should return a WP com API (state.source.url - Free WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With trailing slash. state.source.url = "https://sub.wordpress.com/"; expect(state.wpSource.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com/" ); expect(state.source.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com/" ); // Without trailing slash. state.source.url = "https://sub.wordpress.com"; expect(state.wpSource.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com/" ); expect(state.source.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/sub.wordpress.com/" ); }); it("should return a WP com API (state.source.url, state.wpSource.isWpCom)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; state.wpSource.isWpCom = true; // With final slash. state.source.url = "https://wp-domain.com/"; expect(state.wpSource.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/" ); expect(state.source.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/" ); // Without final slash. state.source.url = "https://wp-domain.com"; expect(state.wpSource.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/" ); expect(state.source.api).toBe( "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/" ); }); }); describe("state.source.url", () => { const initStore = () => { const config = clone(merge(wpSource(), { state: { frontity: {} } })); return createStore(config); }; it("should return state.frontity.url if no other props are set (embedded)", () => { const { state } = initStore(); // With a trailing slash. state.frontity.url = "https://final-domain.com/"; expect(state.source.url).toBe("https://final-domain.com/"); // Without a trailing slash. state.frontity.url = "https://final-domain.com"; expect(state.source.url).toBe("https://final-domain.com/"); }); it("should derive from state.wpSource.api (WP org and Business WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash. state.wpSource.api = "https://wp-domain.com/wp-json/"; expect(state.source.url).toBe("https://wp-domain.com/"); // Without a trailing slash. state.wpSource.api = "https://wp-domain.com/wp-json"; expect(state.source.url).toBe("https://wp-domain.com/"); }); it("should derive from state.source.api (WP org and Business WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash. state.source.api = "https://wp-domain.com/wp-json/"; expect(state.source.url).toBe("https://wp-domain.com/"); // Without a trailing slash. state.source.api = "https://wp-domain.com/wp-json"; expect(state.source.url).toBe("https://wp-domain.com/"); }); it("should derive from state.wpSource.api (WP org and Business WP com, w/ subdirectory)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash. state.wpSource.api = "https://wp-domain.com/subdir/wp-json/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); // Without a trailing slash. state.wpSource.api = "https://wp-domain.com/subdir/wp-json"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); }); it("should derive from state.source.api (WP org and Business WP com, w/ subdirectory)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash. state.source.api = "https://wp-domain.com/subdir/wp-json/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); // Without a trailing slash. state.source.api = "https://wp-domain.com/subdir/wp-json"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); }); it("should derive from state.wpSource.api and prefix (WP org and Business WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash and different combinations of `prefix`. state.wpSource.api = "https://wp-domain.com/api/"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/"); // Without a trailing slash. state.wpSource.api = "https://wp-domain.com/api"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/"); }); it("should derive from state.source.api and prefix (WP org and Business WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash and different combinations of `prefix`. state.source.api = "https://wp-domain.com/api/"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/"); // Without a trailing slash. state.source.api = "https://wp-domain.com/api"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/"); }); it("should derive from state.wpSource.api and prefix (WP org and Business WP com, w/ subdirectory)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash and different combinations of `prefix`. state.wpSource.api = "https://wp-domain.com/subdir/api/"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); // Without a trailing slash. state.wpSource.api = "https://wp-domain.com/subdir/api"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); }); it("should derive from state.source.api and prefix (WP org and Business WP com, w/ subdirectory)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash and different combinations of `prefix`. state.source.api = "https://wp-domain.com/subdir/api/"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); // Without a trailing slash. state.source.api = "https://wp-domain.com/subdir/api"; state.wpSource.prefix = "api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); state.wpSource.prefix = "/api/"; expect(state.source.url).toBe("https://wp-domain.com/subdir/"); }); it("should derive from state.wpSource.api (Free, Personal and Premium WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash. state.wpSource.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/"; expect(state.source.url).toBe("https://wp-domain.com/"); // Without a trailing slash. state.wpSource.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com"; expect(state.source.url).toBe("https://wp-domain.com/"); }); it("should derive from state.source.api (Free, Personal and Premium WP com)", () => { const { state } = initStore(); state.frontity.url = "https://final-domain.com/"; // With a trailing slash. state.source.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com/"; expect(state.source.url).toBe("https://wp-domain.com/"); // Without a trailing slash. state.source.api = "https://public-api.wordpress.com/wp/v2/sites/wp-domain.com"; expect(state.source.url).toBe("https://wp-domain.com/"); }); });