This commit is contained in:
Martin McKeaveney 2020-06-01 22:25:44 +01:00
parent 1bb06ccdef
commit 9c3c38d0ac
6 changed files with 27 additions and 190 deletions

View File

@ -44,8 +44,9 @@ export const prepareRenderComponent = ({
const unsubscribe = appStore.subscribe(state => { const unsubscribe = appStore.subscribe(state => {
const storeBoundProps = { ...initialProps._bb.props } const storeBoundProps = { ...initialProps._bb.props }
for (let prop in storeBoundProps) { for (let prop in storeBoundProps) {
if (typeof storeBoundProps[prop] === "string") { const propValue = storeBoundProps[prop]
storeBoundProps[prop] = mustache.render(storeBoundProps[prop], { if (typeof propValue === "string") {
storeBoundProps[prop] = mustache.render(propValue, {
state, state,
}) })
} }

View File

@ -9,9 +9,3 @@ export const setState = (path, value) => {
return state return state
}) })
} }
// export const setStateFromBinding = (store, binding, value) => {
// const parsedBinding = parseBinding(binding)
// if (!parsedBinding) return
// return setState(store, parsedBinding.path, value)
// }

View File

@ -33,7 +33,7 @@ export const createStateManager = ({
const getCurrentState = () => currentState const getCurrentState = () => currentState
const bb = bbFactory({ const bb = bbFactory({
store: appStore, store: appStore,
getCurrentState, getCurrentState,
frontendDefinition, frontendDefinition,
componentLibraries, componentLibraries,
@ -65,6 +65,7 @@ const _setup = ({ handlerTypes, getCurrentState, bb, store }) => node => {
const isBound = typeof propValue === "string" && propValue.startsWith("{{") const isBound = typeof propValue === "string" && propValue.startsWith("{{")
if (isBound) { if (isBound) {
console.log("NODE IS BOUND", node);
initialProps[propName] = mustache.render(propValue, { initialProps[propName] = mustache.render(propValue, {
state: currentStoreState, state: currentStoreState,
context, context,

View File

@ -5,13 +5,7 @@ const {
createModel, createModel,
supertest, supertest,
defaultHeaders, defaultHeaders,
testPermissionsForEndpoint,
shouldReturn403WhenNoPermission,
shouldReturn200WithOnlyOnePermission,
} = require("./couchTestUtils"); } = require("./couchTestUtils");
const {
WRITE_MODEL, READ_MODEL
} = require("../../../utilities/accessLevels")
describe("/records", () => { describe("/records", () => {
let request let request
@ -41,15 +35,15 @@ describe("/records", () => {
} }
}) })
const createRecord = async r => describe("save, load, update, delete", () => {
await request
.post(`/api/${instance._id}/${model._id}/records`)
.send(r || record)
.set(defaultHeaders)
.expect('Content-Type', /json/)
.expect(200)
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 () => { it("returns a success message when the record is created", async () => {
const res = await createRecord() const res = await createRecord()
@ -58,18 +52,6 @@ describe("/records", () => {
expect(res.body._rev).toBeDefined() 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 () => { it("updates a record successfully", async () => {
const rec = await createRecord() const rec = await createRecord()
const existing = rec.body const existing = rec.body
@ -89,9 +71,7 @@ describe("/records", () => {
expect(res.res.statusMessage).toEqual(`${model.name} updated successfully.`) expect(res.res.statusMessage).toEqual(`${model.name} updated successfully.`)
expect(res.body.name).toEqual("Updated Name") expect(res.body.name).toEqual("Updated Name")
}) })
})
describe("find", () => {
it("should load a record", async () => { it("should load a record", async () => {
const rec = await createRecord() const rec = await createRecord()
const existing = rec.body 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 () => { it("should list all records for given modelId", async () => {
const newRecord = { const newRecord = {
modelId: model._id, modelId: model._id,
@ -155,47 +110,14 @@ describe("/records", () => {
expect(res.body.find(r => r.name === record.name)).toBeDefined() expect(res.body.find(r => r.name === record.name)).toBeDefined()
}) })
it("should apply authorization to endpoint", async () => { it("load should return 404 when record does not exist", async () => {
await testPermissionsForEndpoint({ await createRecord()
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()
await request await request
.delete(`/api/${instance._id}/${model._id}/records/${createRes.body._id}/${createRes.body._rev}`) .get(`/api/${instance._id}/${model._id}/records/not-a-valid-id`)
.set(defaultHeaders)
.expect(200)
await request
.get(`/api/${instance._id}/${model._id}/records/${createRes.body._id}`)
.set(defaultHeaders) .set(defaultHeaders)
.expect('Content-Type', /json/)
.expect(404) .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", () => { describe("validate", () => {

View File

@ -3,13 +3,9 @@ const {
createApplication, createApplication,
createInstance, createInstance,
createModel, createModel,
createRecord,
supertest, supertest,
defaultHeaders, defaultHeaders
testPermissionsForEndpoint,
builderEndpointShouldBlockNormalUsers,
} = require("./couchTestUtils") } = require("./couchTestUtils")
const { READ_VIEW } = require("../../../utilities/accessLevels")
describe("/views", () => { describe("/views", () => {
let request let request
@ -38,10 +34,11 @@ describe("/views", () => {
.send({ .send({
name: "TestView", name: "TestView",
map: `function(doc) { map: `function(doc) {
if (doc.type === 'record') { if (doc.id) {
emit(doc.name, doc._id); emit(doc.name, doc._id);
} }
}`, }`,
reduce: `function(keys, values) { }`
}) })
.set(defaultHeaders) .set(defaultHeaders)
.expect('Content-Type', /json/) .expect('Content-Type', /json/)
@ -54,28 +51,14 @@ describe("/views", () => {
expect(res.res.statusMessage).toEqual("View TestView created successfully."); expect(res.res.statusMessage).toEqual("View TestView created successfully.");
expect(res.body.name).toEqual("TestView"); 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", () => { describe("fetch", () => {
beforeEach(async () => {
model = await createModel(request, instance._id);
});
it("should only return custom views", async () => { it("should only return custom views", async () => {
const view = await createView() const view = await createView()
const res = await request const res = await request
@ -86,46 +69,5 @@ describe("/views", () => {
expect(res.body.length).toBe(1) expect(res.body.length).toBe(1)
expect(res.body.find(v => v.name === view.body.name)).toBeDefined() 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",
})
})
})
}); });

View File

@ -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", () => { describe("destroy", () => {
it("deletes a workflow by its ID", async () => { it("deletes a workflow by its ID", async () => {
await createWorkflow(); await createWorkflow();