diff --git a/packages/backend-core/src/tests/utilities/mocks/events.js b/packages/backend-core/src/tests/utilities/mocks/events.js index ad7ca3fee9..14a9012d1f 100644 --- a/packages/backend-core/src/tests/utilities/mocks/events.js +++ b/packages/backend-core/src/tests/utilities/mocks/events.js @@ -69,6 +69,11 @@ jest.mock("../../../events", () => { assigned: jest.fn(), unassigned: jest.fn(), }, + row: {}, + screen: { + created: jest.fn(), + deleted: jest.fn(), + }, user: { created: jest.fn(), updated: jest.fn(), @@ -85,6 +90,9 @@ jest.mock("../../../events", () => { passwordResetRequested: jest.fn(), passwordReset: jest.fn(), }, + serve: {}, + table: {}, + view: {}, } }) diff --git a/packages/server/src/api/controllers/screen.js b/packages/server/src/api/controllers/screen.js index e166ab3eb8..01e6a22611 100644 --- a/packages/server/src/api/controllers/screen.js +++ b/packages/server/src/api/controllers/screen.js @@ -1,6 +1,7 @@ const { getScreenParams, generateScreenID } = require("../../db/utils") const { AccessController } = require("@budibase/backend-core/roles") const { getAppDB } = require("@budibase/backend-core/context") +const { events } = require("@budibase/backend-core") exports.fetch = async ctx => { const db = getAppDB() @@ -23,11 +24,17 @@ exports.save = async ctx => { const db = getAppDB() let screen = ctx.request.body + let eventFn if (!screen._id) { screen._id = generateScreenID() + eventFn = events.screen.created } + const response = await db.put(screen) + if (eventFn) { + eventFn(screen) + } ctx.message = `Screen ${screen.name} saved.` ctx.body = { ...screen, @@ -38,7 +45,12 @@ exports.save = async ctx => { exports.destroy = async ctx => { const db = getAppDB() - await db.remove(ctx.params.screenId, ctx.params.screenRev) + const id = ctx.params.screenId + const screen = await db.get(id) + + await db.remove(id, ctx.params.screenRev) + + events.screen.deleted(screen) ctx.body = { message: "Screen deleted successfully", } diff --git a/packages/server/src/api/routes/tests/screen.spec.js b/packages/server/src/api/routes/tests/screen.spec.js index c2d60ec006..1266724320 100644 --- a/packages/server/src/api/routes/tests/screen.spec.js +++ b/packages/server/src/api/routes/tests/screen.spec.js @@ -1,6 +1,7 @@ const { checkBuilderEndpoint } = require("./utilities/TestFunctions") const setup = require("./utilities") const { basicScreen } = setup.structures +const { events } = require("@budibase/backend-core") describe("/screens", () => { let request = setup.getRequest() @@ -35,16 +36,40 @@ describe("/screens", () => { }) describe("save", () => { - it("should be able to save a screen", async () => { - const screenCfg = basicScreen() + const saveScreen = async (screen) => { const res = await request .post(`/api/screens`) - .send(screenCfg) + .send(screen) .set(config.defaultHeaders()) .expect("Content-Type", /json/) .expect(200) + return res + } + + it("should be able to create a screen", async () => { + jest.clearAllMocks() + + const screen = basicScreen() + const res = await saveScreen(screen) + expect(res.body._rev).toBeDefined() - expect(res.body.name).toEqual(screenCfg.name) + expect(res.body.name).toEqual(screen.name) + expect(events.screen.created).toBeCalledTimes(1) + }) + + it("should be able to update a screen", async () => { + const screen = basicScreen() + let res = await saveScreen(screen) + screen._id = res.body._id + screen._rev = res.body._rev + screen.name = "edit" + jest.clearAllMocks() + + res = await saveScreen(screen) + + expect(res.body._rev).toBeDefined() + expect(res.body.name).toEqual(screen.name) + expect(events.screen.created).not.toBeCalled() }) it("should apply authorization to endpoint", async () => { @@ -64,6 +89,7 @@ describe("/screens", () => { .expect("Content-Type", /json/) .expect(200) expect(res.body.message).toBeDefined() + expect(events.screen.deleted).toBeCalledTimes(1) }) it("should apply authorization to endpoint", async () => {