import { load } from "./testAppDef"; describe("initialiseApp", () => { it("should populate root element prop from store value", async () => { const {dom} = await load({ _component: "testlib/div", className: { "##bbstate": "divClassName", "##bbsource": "store", "##bbstatefallback":"default" } }); const rootDiv = dom.window.document.body.children[0]; expect(rootDiv.className).toBe("default"); }); it("should update root element from store", async () => { const {dom, app} = await load({ _component: "testlib/div", className: { "##bbstate": "divClassName", "##bbsource": "store", "##bbstatefallback":"default" } }); app.store.update(s => { s.divClassName = "newvalue"; return s; }); const rootDiv = dom.window.document.body.children[0]; expect(rootDiv.className).toBe("newvalue"); }); it("should populate child component with store value", async () => { const {dom} = await load({ _component: "testlib/div", _children: [ { _component: "testlib/h1", text: { "##bbstate": "headerOneText", "##bbsource": "store", "##bbstatefallback":"header one" } }, { _component: "testlib/h1", text: { "##bbstate": "headerTwoText", "##bbsource": "store", "##bbstatefallback":"header two" } } ] }); const rootDiv = dom.window.document.body.children[0]; expect(rootDiv.children.length).toBe(2); expect(rootDiv.children[0].tagName).toBe("H1"); expect(rootDiv.children[0].innerText).toBe("header one"); expect(rootDiv.children[1].tagName).toBe("H1"); expect(rootDiv.children[1].innerText).toBe("header two"); }); it("should populate child component with store value", async () => { const {dom, app} = await load({ _component: "testlib/div", _children: [ { _component: "testlib/h1", text: { "##bbstate": "headerOneText", "##bbsource": "store", "##bbstatefallback":"header one" } }, { _component: "testlib/h1", text: { "##bbstate": "headerTwoText", "##bbsource": "store", "##bbstatefallback":"header two" } } ] }); app.store.update(s => { s.headerOneText = "header 1 - new val"; s.headerTwoText = "header 2 - new val"; return s; }); const rootDiv = dom.window.document.body.children[0]; expect(rootDiv.children.length).toBe(2); expect(rootDiv.children[0].tagName).toBe("H1"); expect(rootDiv.children[0].innerText).toBe("header 1 - new val"); expect(rootDiv.children[1].tagName).toBe("H1"); expect(rootDiv.children[1].innerText).toBe("header 2 - new val"); }); });