From 0f823fd19e1cf814cce717762d32f3fda54f121b Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Tue, 29 Oct 2024 13:07:29 +0000 Subject: [PATCH] refactor(flow): restructure afterFind hook in model --- packages/backend/src/models/flow.js | 12 +++--- packages/backend/src/models/flow.test.js | 48 +++++++++++++++++++++++- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/packages/backend/src/models/flow.js b/packages/backend/src/models/flow.js index e67a9037..d38e70aa 100644 --- a/packages/backend/src/models/flow.js +++ b/packages/backend/src/models/flow.js @@ -88,15 +88,13 @@ class Flow extends Base { }, }); - static async afterFind(args) { - const { result } = args; - - const referenceFlow = result[0]; + static async populateStatusProperty(flows) { + const referenceFlow = flows[0]; if (referenceFlow) { const shouldBePaused = await referenceFlow.isPaused(); - for (const flow of result) { + for (const flow of flows) { if (!flow.active) { flow.status = 'draft'; } else if (flow.active && shouldBePaused) { @@ -108,6 +106,10 @@ class Flow extends Base { } } + static async afterFind(args) { + await this.populateStatusProperty(args.result); + } + async lastInternalId() { const lastExecution = await this.$relatedQuery('lastExecution'); diff --git a/packages/backend/src/models/flow.test.js b/packages/backend/src/models/flow.test.js index bbc88335..1fc3e2de 100644 --- a/packages/backend/src/models/flow.test.js +++ b/packages/backend/src/models/flow.test.js @@ -120,7 +120,53 @@ describe('Flow model', () => { }); }); - describe.todo('afterFind - possibly refactor to persist'); + describe('populateStatusProperty', () => { + it('should assign "draft" to status property when a flow is not active', async () => { + const referenceFlow = await createFlow({ active: false }); + + const flows = [referenceFlow]; + + vi.spyOn(referenceFlow, 'isPaused').mockResolvedValue(); + + await Flow.populateStatusProperty(flows); + + expect(referenceFlow.status).toBe('draft'); + }); + + it('should assign "paused" to status property when a flow is active, but should be paused', async () => { + const referenceFlow = await createFlow({ active: true }); + + const flows = [referenceFlow]; + + vi.spyOn(referenceFlow, 'isPaused').mockResolvedValue(true); + + await Flow.populateStatusProperty(flows); + + expect(referenceFlow.status).toBe('paused'); + }); + + it('should assign "published" to status property when a flow is active', async () => { + const referenceFlow = await createFlow({ active: true }); + + const flows = [referenceFlow]; + + vi.spyOn(referenceFlow, 'isPaused').mockResolvedValue(false); + + await Flow.populateStatusProperty(flows); + + expect(referenceFlow.status).toBe('published'); + }); + }); + + it('afterFind should call Flow.populateStatusProperty', async () => { + const populateStatusPropertySpy = vi + .spyOn(Flow, 'populateStatusProperty') + .mockImplementation(() => {}); + + await createFlow(); + + expect(populateStatusPropertySpy).toHaveBeenCalledOnce(); + }); describe('lastInternalId', () => { it('should return internal ID of last execution when exists', async () => {