diff --git a/packages/common/src/index.js b/packages/common/src/index.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/server/middleware/controllers/client.js b/packages/server/middleware/controllers/client.js index 6b5835b886..7446c4f03a 100644 --- a/packages/server/middleware/controllers/client.js +++ b/packages/server/middleware/controllers/client.js @@ -19,7 +19,10 @@ exports.create = async function(ctx) { }; exports.destroy = async function(ctx) { - const databaseId = ctx.params.databaseId; - const database = couchdb.db.use(databaseId) - ctx.body = await database.destroy(ctx.params.recordId); + const dbId = `client-${ctx.params.clientId}`; + await couchdb.db.destroy(dbId); + ctx.body = { + status: 200, + message: `Client Database ${dbId} successfully deleted.` + } }; \ No newline at end of file diff --git a/packages/server/middleware/controllers/record.js b/packages/server/middleware/controllers/record.js index fd15a7ec09..d8653be6a0 100644 --- a/packages/server/middleware/controllers/record.js +++ b/packages/server/middleware/controllers/record.js @@ -2,8 +2,8 @@ const couchdb = require("../../db") const { mapValues, keyBy } = require("lodash/fp") const { validateRecord, -} = require("../../../common/src/records/validateRecord.mjs") -const { events } = require("../../../common/src/common/events.mjs") +} = require("../../../common/src/records/validateRecord") +const { events } = require("../../../common/src/common/events") const { $ } = require("../../../common/src/common") const { safeParseField } = require("../../../common/src/schema/types"); @@ -13,7 +13,7 @@ exports.save = async function(ctx) { if (!ctx.schema.findModel(record._modelId)) { ctx.status = 400 - ctx.message = `do not recognise modelId : ${record._modelId}` + ctx.message = `Model ${record._modelId} does not exist in schema.` return } diff --git a/packages/server/middleware/routes/neo/record.js b/packages/server/middleware/routes/neo/record.js index fc12241a62..21b8de7ecf 100644 --- a/packages/server/middleware/routes/neo/record.js +++ b/packages/server/middleware/routes/neo/record.js @@ -1,12 +1,12 @@ const Router = require("@koa/router"); -const controller = require("../../controllers/record"); +// const controller = require("../../controllers/record"); const router = Router(); -router - .get("/api/:databaseId/records/:modelname", controller.fetch) - .post("/api/:databaseId/record", controller.save) - .get("/api/:databaseId/record/:recordId", controller.find) - .delete("/api/:databaseId/record/:recordId", controller.destroy) +// router +// .get("/api/:databaseId/records/:modelname", controller.fetch) +// .post("/api/:databaseId/record", controller.save) +// .get("/api/:databaseId/record/:recordId", controller.find) +// .delete("/api/:databaseId/record/:recordId", controller.destroy) module.exports = router; \ No newline at end of file diff --git a/packages/server/middleware/routes/neo/tests/client.spec.js b/packages/server/middleware/routes/neo/tests/client.spec.js new file mode 100644 index 0000000000..0762afd583 --- /dev/null +++ b/packages/server/middleware/routes/neo/tests/client.spec.js @@ -0,0 +1,62 @@ +const supertest = require("supertest"); +const couchdb = require("../../../../db"); +const app = require("../../../../app"); +const { createClientDatabase, destroyDatabase } = require("./couchTestUtils") + + +const CLIENT_DB_ID = "client-testing"; + +describe("/clients", () => { + let request; + let server; + + beforeAll(async () => { + server = await app({ + config: { + port: 3000 + } + }); + request = supertest(server); + }); + + afterAll(async () => { + server.close(); + }) + + describe("create", () => { + afterEach(async () => { + await destroyDatabase(CLIENT_DB_ID); + }); + + it("returns a success message when the client database is successfully created", done => { + request + .post("/api/clients") + .send({ clientId: "testing" }) + .set("Accept", "application/json") + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + expect(res.body.message).toEqual(`Client Database ${CLIENT_DB_ID} successfully provisioned.`); + done(); + }); + }) + }); + + describe("destroy", () => { + beforeEach(async () => { + await createClientDatabase(); + }); + + it("returns a success message when the client database is successfully destroyed", async done => { + request + .delete(`/api/clients/testing`) + .set("Accept", "application/json") + .expect('Content-Type', /json/) + .expect(200) + .end((err, res) => { + expect(res.body.message).toEqual(`Client Database ${CLIENT_DB_ID} successfully deleted.`); + done(); + }); + }) + }); +}); diff --git a/packages/server/middleware/routes/neo/tests/couchTestUtils.js b/packages/server/middleware/routes/neo/tests/couchTestUtils.js index 4747d1ec2c..be4ddcff5f 100644 --- a/packages/server/middleware/routes/neo/tests/couchTestUtils.js +++ b/packages/server/middleware/routes/neo/tests/couchTestUtils.js @@ -2,6 +2,8 @@ const couchdb = require("../../../../db"); const CLIENT_DB_ID = "client-testing"; +exports.destroyDatabase = couchdb.db.destroy; + exports.createClientDatabase = async () => { await couchdb.db.create(CLIENT_DB_ID); diff --git a/packages/server/middleware/routes/neo/tests/database.spec.js b/packages/server/middleware/routes/neo/tests/database.spec.js index 94f6344b60..e899b485e2 100644 --- a/packages/server/middleware/routes/neo/tests/database.spec.js +++ b/packages/server/middleware/routes/neo/tests/database.spec.js @@ -1,16 +1,17 @@ const couchdb = require("../../../../db"); const supertest = require("supertest"); const app = require("../../../../app"); -const { createInstanceDatabase } = require("./couchTestUtils"); +const { createInstanceDatabase, destroyDatabase } = require("./couchTestUtils"); const TEST_INSTANCE_ID = "testing-123"; describe("/databases", () => { let request; + let server; beforeAll(async () => { - const server = await app({ + server = await app({ config: { port: 3000 } @@ -19,10 +20,14 @@ describe("/databases", () => { }); afterAll(async () => { - app.close(); + server.close(); }) describe("create", () => { + afterEach(async () => { + await destroyDatabase(TEST_INSTANCE_ID); + }); + it("returns a success message when the instance database is successfully created", done => { request .post(`/api/databases`) @@ -38,6 +43,10 @@ describe("/databases", () => { }); describe("destroy", () => { + beforeEach(async () => { + await createInstanceDatabase(TEST_INSTANCE_ID); + }); + it("returns a success message when the instance database is successfully deleted", done => { request .delete(`/api/databases/${TEST_INSTANCE_ID}`) diff --git a/packages/server/middleware/routes/neo/tests/user.spec.js b/packages/server/middleware/routes/neo/tests/user.spec.js index 855bcf9847..b7c78cf4bc 100644 --- a/packages/server/middleware/routes/neo/tests/user.spec.js +++ b/packages/server/middleware/routes/neo/tests/user.spec.js @@ -16,6 +16,7 @@ describe("/users", () => { } }); request = supertest(server); + createInstanceDatabase(TEST_INSTANCE_ID); }); afterAll(async () => { @@ -23,10 +24,10 @@ describe("/users", () => { }) describe("create", () => { - it("returns a success message when the instance database is successfully created", done => { + it("returns a success message when a user is successfully created", done => { request - .post(`/api/users`) - .send({ name: TEST_INSTANCE_ID }) + .post(`/api/${TEST_INSTANCE_ID}/users`) + .send({ name: "John" }) .set("Accept", "application/json") .expect('Content-Type', /json/) .expect(200) diff --git a/packages/server/middleware/routes/tests/record.spec.js b/packages/server/middleware/routes/tests/record.spec.js deleted file mode 100644 index 231794a00a..0000000000 --- a/packages/server/middleware/routes/tests/record.spec.js +++ /dev/null @@ -1,9 +0,0 @@ -const { testSchema } = require("../../common/test/testSchema") - -describe("record persistence", () => { - it("should save a record", async () => { - - }) -}) - -