diff --git a/packages/client/src/render/prepareRenderComponent.js b/packages/client/src/render/prepareRenderComponent.js index 30af819221..6e8ae123d0 100644 --- a/packages/client/src/render/prepareRenderComponent.js +++ b/packages/client/src/render/prepareRenderComponent.js @@ -44,8 +44,9 @@ export const prepareRenderComponent = ({ const unsubscribe = appStore.subscribe(state => { const storeBoundProps = { ...initialProps._bb.props } for (let prop in storeBoundProps) { - if (typeof storeBoundProps[prop] === "string") { - storeBoundProps[prop] = mustache.render(storeBoundProps[prop], { + const propValue = storeBoundProps[prop] + if (typeof propValue === "string") { + storeBoundProps[prop] = mustache.render(propValue, { state, }) } diff --git a/packages/client/src/state/setState.js b/packages/client/src/state/setState.js index 3d3b2045c8..ad25b631d5 100644 --- a/packages/client/src/state/setState.js +++ b/packages/client/src/state/setState.js @@ -8,10 +8,4 @@ export const setState = (path, value) => { state = set(path, value, state) return state }) -} - -// export const setStateFromBinding = (store, binding, value) => { -// const parsedBinding = parseBinding(binding) -// if (!parsedBinding) return -// return setState(store, parsedBinding.path, value) -// } +} \ No newline at end of file diff --git a/packages/client/src/state/stateManager.js b/packages/client/src/state/stateManager.js index 8e777ca4b9..5d32f5a486 100644 --- a/packages/client/src/state/stateManager.js +++ b/packages/client/src/state/stateManager.js @@ -33,7 +33,7 @@ export const createStateManager = ({ const getCurrentState = () => currentState const bb = bbFactory({ - store: appStore, + store: appStore, getCurrentState, frontendDefinition, componentLibraries, @@ -65,6 +65,7 @@ const _setup = ({ handlerTypes, getCurrentState, bb, store }) => node => { const isBound = typeof propValue === "string" && propValue.startsWith("{{") if (isBound) { + console.log("NODE IS BOUND", node); initialProps[propName] = mustache.render(propValue, { state: currentStoreState, context, diff --git a/packages/server/src/api/routes/tests/record.spec.js b/packages/server/src/api/routes/tests/record.spec.js index 93543d742f..2c8c542715 100644 --- a/packages/server/src/api/routes/tests/record.spec.js +++ b/packages/server/src/api/routes/tests/record.spec.js @@ -5,13 +5,7 @@ const { createModel, supertest, defaultHeaders, - testPermissionsForEndpoint, - shouldReturn403WhenNoPermission, - shouldReturn200WithOnlyOnePermission, } = require("./couchTestUtils"); -const { - WRITE_MODEL, READ_MODEL -} = require("../../../utilities/accessLevels") describe("/records", () => { let request @@ -41,15 +35,15 @@ describe("/records", () => { } }) - const createRecord = async r => - await request - .post(`/api/${instance._id}/${model._id}/records`) - .send(r || record) - .set(defaultHeaders) - .expect('Content-Type', /json/) - .expect(200) + describe("save, load, update, delete", () => { - describe("save", () => { + const createRecord = async r => + await request + .post(`/api/${instance._id}/${model._id}/records`) + .send(r || record) + .set(defaultHeaders) + .expect('Content-Type', /json/) + .expect(200) it("returns a success message when the record is created", async () => { const res = await createRecord() @@ -58,18 +52,6 @@ describe("/records", () => { expect(res.body._rev).toBeDefined() }) - it("should apply authorization to endpoint", async () => { - await testPermissionsForEndpoint({ - request, - method: "POST", - url: `/api/${instance._id}/${model._id}/records`, - body: record, - instanceId: instance._id, - permissionName: WRITE_MODEL, - itemId: model._id, - }) - }) - it("updates a record successfully", async () => { const rec = await createRecord() const existing = rec.body @@ -89,9 +71,7 @@ describe("/records", () => { expect(res.res.statusMessage).toEqual(`${model.name} updated successfully.`) expect(res.body.name).toEqual("Updated Name") }) - }) - describe("find", () => { it("should load a record", async () => { const rec = await createRecord() const existing = rec.body @@ -110,31 +90,6 @@ describe("/records", () => { }) }) - it("load should return 404 when record does not exist", async () => { - await createRecord() - await request - .get(`/api/${instance._id}/${model._id}/records/not-a-valid-id`) - .set(defaultHeaders) - .expect('Content-Type', /json/) - .expect(404) - }) - - it("should apply authorization to endpoint", async () => { - const rec = await createRecord() - await testPermissionsForEndpoint({ - request, - method: "GET", - url: `/api/${instance._id}/${model._id}/records/${rec.body._id}`, - instanceId: instance._id, - permissionName: READ_MODEL, - itemId: model._id, - }) - }) - - }) - - describe("fetch", () => { - it("should list all records for given modelId", async () => { const newRecord = { modelId: model._id, @@ -155,47 +110,14 @@ describe("/records", () => { expect(res.body.find(r => r.name === record.name)).toBeDefined() }) - it("should apply authorization to endpoint", async () => { - await testPermissionsForEndpoint({ - request, - method: "GET", - url: `/api/${instance._id}/${model._id}/records`, - instanceId: instance._id, - permissionName: READ_MODEL, - itemId: model._id, - }) - }) - - }) - - describe("delete", () => { - - it("should remove a record", async () => { - const createRes = await createRecord() - + it("load should return 404 when record does not exist", async () => { + await createRecord() await request - .delete(`/api/${instance._id}/${model._id}/records/${createRes.body._id}/${createRes.body._rev}`) - .set(defaultHeaders) - .expect(200) - - await request - .get(`/api/${instance._id}/${model._id}/records/${createRes.body._id}`) + .get(`/api/${instance._id}/${model._id}/records/not-a-valid-id`) .set(defaultHeaders) + .expect('Content-Type', /json/) .expect(404) }) - - it("should apply authorization to endpoint", async () => { - const createRes = await createRecord() - await testPermissionsForEndpoint({ - request, - method: "DELETE", - url: `/api/${instance._id}/${model._id}/records/${createRes.body._id}/${createRes.body._rev}`, - instanceId: instance._id, - permissionName: WRITE_MODEL, - itemId: model._id, - }) - }) - }) describe("validate", () => { @@ -224,4 +146,4 @@ describe("/records", () => { }) }) -}) +}) \ No newline at end of file diff --git a/packages/server/src/api/routes/tests/view.spec.js b/packages/server/src/api/routes/tests/view.spec.js index c6231cf336..b8fd47972a 100644 --- a/packages/server/src/api/routes/tests/view.spec.js +++ b/packages/server/src/api/routes/tests/view.spec.js @@ -3,13 +3,9 @@ const { createApplication, createInstance, createModel, - createRecord, supertest, - defaultHeaders, - testPermissionsForEndpoint, - builderEndpointShouldBlockNormalUsers, + defaultHeaders } = require("./couchTestUtils") -const { READ_VIEW } = require("../../../utilities/accessLevels") describe("/views", () => { let request @@ -38,10 +34,11 @@ describe("/views", () => { .send({ name: "TestView", map: `function(doc) { - if (doc.type === 'record') { + if (doc.id) { emit(doc.name, doc._id); } }`, + reduce: `function(keys, values) { }` }) .set(defaultHeaders) .expect('Content-Type', /json/) @@ -54,28 +51,14 @@ describe("/views", () => { expect(res.res.statusMessage).toEqual("View TestView created successfully."); expect(res.body.name).toEqual("TestView"); }) - - it("should apply authorization to endpoint", async () => { - await builderEndpointShouldBlockNormalUsers({ - request, - method: "POST", - url: `/api/${instance._id}/views`, - body: { - name: "TestView", - map: `function(doc) { - if (doc.id) { - emit(doc.name, doc._id); - } - }`, - reduce: `function(keys, values) { }` - }, - instanceId: instance._id, - }) - }) }); describe("fetch", () => { + beforeEach(async () => { + model = await createModel(request, instance._id); + }); + it("should only return custom views", async () => { const view = await createView() const res = await request @@ -86,46 +69,5 @@ describe("/views", () => { expect(res.body.length).toBe(1) expect(res.body.find(v => v.name === view.body.name)).toBeDefined() }) - - it("should apply authorization to endpoint", async () => { - await builderEndpointShouldBlockNormalUsers({ - request, - method: "GET", - url: `/api/${instance._id}/views`, - instanceId: instance._id, - }) - }) }); - - describe("query", () => { - - beforeEach(async () => { - model = await createModel(request, instance._id); - }); - - it("should return records from custom view", async () => { - await createView() - const rec1 = await createRecord({ request, instanceId: instance._id, modelId: model._id }) - await createRecord({ request, instanceId: instance._id, modelId: model._id }) - const res = await request - .get(`/api/${instance._id}/views/TestView`) - .set(defaultHeaders) - .expect('Content-Type', /json/) - .expect(200) - expect(res.body.length).toBe(2) - expect(res.body.find(r => r._id === rec1._id)).toBeDefined() - }) - - it("should apply authorization to endpoint", async () => { - await createView() - await testPermissionsForEndpoint({ - request, - method: "GET", - url: `/api/${instance._id}/views/TestView`, - instanceId: instance._id, - permissionName: READ_VIEW, - itemId: "TestView", - }) - }) - }) -}); +}); \ No newline at end of file diff --git a/packages/server/src/api/routes/tests/workflow.spec.js b/packages/server/src/api/routes/tests/workflow.spec.js index 0e0ce6bfc6..1f345698bf 100644 --- a/packages/server/src/api/routes/tests/workflow.spec.js +++ b/packages/server/src/api/routes/tests/workflow.spec.js @@ -125,29 +125,6 @@ describe("/workflows", () => { }) }) - describe("find", () => { - it("returns a workflow when queried by ID", async () => { - await createWorkflow(); - const res = await request - .get(`/api/${instance._id}/workflows/${workflow.id}`) - .set(defaultHeaders) - .expect('Content-Type', /json/) - .expect(200) - - expect(res.body).toEqual(expect.objectContaining(TEST_WORKFLOW)); - }) - - it("should apply authorization to endpoint", async () => { - await createWorkflow(); - await builderEndpointShouldBlockNormalUsers({ - request, - method: "GET", - url: `/api/${instance._id}/workflows/${workflow.id}`, - instanceId: instance._id, - }) - }) - }) - describe("destroy", () => { it("deletes a workflow by its ID", async () => { await createWorkflow();