From 49eb569d0c19dc11d7a03ba8473ad58ec1c0ebdc Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Tue, 16 Jun 2026 16:27:14 -0400 Subject: [PATCH 1/7] ref: extract vocabularies schema URL logic into a separate method in task component --- src/components/task.vue | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/task.vue b/src/components/task.vue index 83915b57..db6a26cc 100644 --- a/src/components/task.vue +++ b/src/components/task.vue @@ -283,10 +283,7 @@ export default { url += `&screen_version=${this.screenVersion}`; } - // For Vocabularies - if (window.ProcessMaker && window.ProcessMaker.packages && window.ProcessMaker.packages.includes('package-vocabularies')) { - window.ProcessMaker.VocabulariesSchemaUrl = `vocabularies/task_schema/${this.taskId}`; - } + this.setVocabulariesSchemaUrl(); return this.beforeLoadTask(this.taskId, this.nodeId).then(() => { this.$dataProvider @@ -693,6 +690,19 @@ export default { return this.$dataProvider.getTasks(`?${queryString}`); }, + setVocabulariesSchemaUrl() { + if ( + window.ProcessMaker + && window.ProcessMaker.packages + && window.ProcessMaker.packages.includes("package-vocabularies") + ) { + const schemaUrl = `vocabularies/task_schema/${this.taskId}`; + if (window.ProcessMaker.VocabulariesSchemaUrl !== schemaUrl) { + window.ProcessMaker.VocabulariesSchemaCache = null; + } + window.ProcessMaker.VocabulariesSchemaUrl = schemaUrl; + } + }, /** * Parses a JSON string and returns the result. * @param {string} jsonString - The JSON string to parse. From 11327d2bc320e4c15314500e3a8daf29a79d8011 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Tue, 16 Jun 2026 16:33:37 -0400 Subject: [PATCH 2/7] feat: implement getVocabulariesSchema method to streamline vocabularies schema retrieval --- src/mixins/ScreenBase.js | 63 ++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/src/mixins/ScreenBase.js b/src/mixins/ScreenBase.js index bc971dbc..ebaaf56f 100644 --- a/src/mixins/ScreenBase.js +++ b/src/mixins/ScreenBase.js @@ -10,25 +10,56 @@ import { findRootScreen } from "./DataReference"; const stringFormats = ['string', 'datetime', 'date', 'password']; const parentReference = []; +const getVocabulariesSchema = () => { + if ( + window.ProcessMaker && + window.ProcessMaker.packages && + window.ProcessMaker.packages.includes("package-vocabularies") + ) { + if (window.ProcessMaker.VocabulariesSchemaUrl) { + const schemaUrl = window.ProcessMaker.VocabulariesSchemaUrl; + const cache = window.ProcessMaker.VocabulariesSchemaCache; + + if (cache && cache.url === schemaUrl) { + return cache.promise || cache.data; + } + + const promise = window.ProcessMaker.apiClient + .get(schemaUrl) + .then((response) => { + if (window.ProcessMaker.VocabulariesSchemaUrl === schemaUrl) { + window.ProcessMaker.VocabulariesSchemaCache = { + url: schemaUrl, + data: response.data + }; + } + return response.data; + }) + .catch((error) => { + if (window.ProcessMaker.VocabulariesSchemaCache?.url === schemaUrl) { + window.ProcessMaker.VocabulariesSchemaCache = null; + } + throw error; + }); + + window.ProcessMaker.VocabulariesSchemaCache = { + url: schemaUrl, + promise + }; + + return promise; + } + if (window.ProcessMaker.VocabulariesPreview) { + return window.ProcessMaker.VocabulariesPreview; + } + } + return {}; +}; + export default { name: "ScreenContent", mixins: [DataReference, computedFields, VariablesToSubmitFilter], - schema: [ - function() { - if (window.ProcessMaker && window.ProcessMaker.packages && window.ProcessMaker.packages.includes('package-vocabularies')) { - if (window.ProcessMaker.VocabulariesSchemaUrl) { - let response = window.ProcessMaker.apiClient.get(window.ProcessMaker.VocabulariesSchemaUrl); - return response.then(response => { - return response.data; - }); - } - if (window.ProcessMaker.VocabulariesPreview) { - return window.ProcessMaker.VocabulariesPreview; - } - } - return {}; - }, - ], + schema: [getVocabulariesSchema], data() { return { ValidationRules__: {}, From 249c77b13bb5be7bea26921d06a0e5a5526014bd Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Tue, 16 Jun 2026 17:10:00 -0400 Subject: [PATCH 3/7] test: add unit tests for setVocabulariesSchemaUrl and VocabulariesSchema caching behavior --- tests/unit/TaskSelfServiceLock.spec.js | 39 +++++++ tests/unit/VocabulariesSchema.spec.js | 136 +++++++++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 tests/unit/VocabulariesSchema.spec.js diff --git a/tests/unit/TaskSelfServiceLock.spec.js b/tests/unit/TaskSelfServiceLock.spec.js index 257a7f8a..1bc9f27c 100644 --- a/tests/unit/TaskSelfServiceLock.spec.js +++ b/tests/unit/TaskSelfServiceLock.spec.js @@ -133,6 +133,7 @@ describe('Task self-service lock', () => { screenVersion: null, beforeLoadTask: jest.fn().mockResolvedValue(), $dataProvider: { getTasks }, + setVocabulariesSchemaUrl: jest.fn(), setSelfService, linkTask, checkTaskStatus, @@ -150,4 +151,42 @@ describe('Task self-service lock', () => { expect(checkTaskStatus).toHaveBeenCalled(); expect(context.loadingTask).toBe(false); }); + + test("setVocabulariesSchemaUrl invalidates cache when task changes", () => { + sandbox.window.ProcessMaker = { + packages: ["package-vocabularies"], + VocabulariesSchemaUrl: "vocabularies/task_schema/222", + VocabulariesSchemaCache: { + url: "vocabularies/task_schema/222", + data: { current: true } + } + }; + + Task.methods.setVocabulariesSchemaUrl.call({ taskId: 223 }); + + expect(sandbox.window.ProcessMaker.VocabulariesSchemaUrl).toBe( + "vocabularies/task_schema/223" + ); + expect(sandbox.window.ProcessMaker.VocabulariesSchemaCache).toBeNull(); + }); + + test("setVocabulariesSchemaUrl keeps cache when task has not changed", () => { + const cache = { + url: "vocabularies/task_schema/223", + data: { current: true } + }; + + sandbox.window.ProcessMaker = { + packages: ["package-vocabularies"], + VocabulariesSchemaUrl: "vocabularies/task_schema/223", + VocabulariesSchemaCache: cache + }; + + Task.methods.setVocabulariesSchemaUrl.call({ taskId: 223 }); + + expect(sandbox.window.ProcessMaker.VocabulariesSchemaUrl).toBe( + "vocabularies/task_schema/223" + ); + expect(sandbox.window.ProcessMaker.VocabulariesSchemaCache).toBe(cache); + }); }); diff --git a/tests/unit/VocabulariesSchema.spec.js b/tests/unit/VocabulariesSchema.spec.js new file mode 100644 index 00000000..e6361507 --- /dev/null +++ b/tests/unit/VocabulariesSchema.spec.js @@ -0,0 +1,136 @@ +const fs = require("fs"); +const path = require("path"); +const vm = require("vm"); + +const mixinPath = path.join(process.cwd(), "src/mixins/ScreenBase.js"); + +const source = fs.readFileSync(mixinPath, "utf8"); + +function getScreenBaseOptions() { + const executableScript = source + .replace(/^import .*$/gm, "") + .replace("export default", "module.exports ="); + + const sandbox = { + module: { exports: {} }, + exports: {}, + window: { + ProcessMaker: {} + }, + DataReference: {}, + VariablesToSubmitFilter: {}, + computedFields: {}, + ValidationMsg: {}, + Mustache: { render: jest.fn() }, + get: jest.fn(), + isEqual: jest.fn(), + set: jest.fn(), + debounce: jest.fn(), + findRootScreen: jest.fn(), + mapActions: jest.fn(() => ({})), + mapGetters: jest.fn(() => ({})), + mapState: jest.fn(() => ({})) + }; + + vm.runInNewContext(executableScript, sandbox, { filename: mixinPath }); + + return { + screenBase: sandbox.module.exports, + sandbox + }; +} + +describe("Vocabularies schema cache", () => { + const { screenBase: ScreenBase, sandbox } = getScreenBaseOptions(); + const getVocabulariesSchema = ScreenBase.schema[0]; + + beforeEach(() => { + sandbox.window.ProcessMaker = { + packages: ["package-vocabularies"], + VocabulariesSchemaUrl: "vocabularies/task_schema/123", + apiClient: { + get: jest.fn() + } + }; + }); + + test("shares one in-flight vocabulary schema request for the current task", async () => { + const schema = { properties: { course: { type: "string" } } }; + let resolveRequest; + const request = new Promise((resolve) => { + resolveRequest = resolve; + }); + + sandbox.window.ProcessMaker.apiClient.get.mockReturnValue(request); + + const firstSchema = getVocabulariesSchema(); + const secondSchema = getVocabulariesSchema(); + + expect(secondSchema).toBe(firstSchema); + expect(sandbox.window.ProcessMaker.apiClient.get).toHaveBeenCalledTimes(1); + expect(sandbox.window.ProcessMaker.apiClient.get).toHaveBeenCalledWith( + "vocabularies/task_schema/123" + ); + + resolveRequest({ data: schema }); + await expect(firstSchema).resolves.toBe(schema); + + expect(getVocabulariesSchema()).toBe(schema); + expect(sandbox.window.ProcessMaker.apiClient.get).toHaveBeenCalledTimes(1); + }); + + test("loads a new vocabulary schema once when the task URL changes", async () => { + const firstSchema = { task: 123 }; + const secondSchema = { task: 456 }; + + sandbox.window.ProcessMaker.apiClient.get + .mockResolvedValueOnce({ data: firstSchema }) + .mockResolvedValueOnce({ data: secondSchema }); + + await expect(getVocabulariesSchema()).resolves.toBe(firstSchema); + + sandbox.window.ProcessMaker.VocabulariesSchemaUrl = + "vocabularies/task_schema/456"; + + await expect(getVocabulariesSchema()).resolves.toBe(secondSchema); + + expect(sandbox.window.ProcessMaker.apiClient.get).toHaveBeenCalledTimes(2); + expect(sandbox.window.ProcessMaker.apiClient.get).toHaveBeenNthCalledWith( + 1, + "vocabularies/task_schema/123" + ); + expect(sandbox.window.ProcessMaker.apiClient.get).toHaveBeenNthCalledWith( + 2, + "vocabularies/task_schema/456" + ); + expect(getVocabulariesSchema()).toBe(secondSchema); + }); + + test("does not let a stale task response overwrite the current schema cache", async () => { + let resolveFirstRequest; + const firstRequest = new Promise((resolve) => { + resolveFirstRequest = resolve; + }); + const secondSchema = { task: 456 }; + + sandbox.window.ProcessMaker.apiClient.get + .mockReturnValueOnce(firstRequest) + .mockResolvedValueOnce({ data: secondSchema }); + + const firstSchema = getVocabulariesSchema(); + + sandbox.window.ProcessMaker.VocabulariesSchemaUrl = + "vocabularies/task_schema/456"; + sandbox.window.ProcessMaker.VocabulariesSchemaCache = null; + + await expect(getVocabulariesSchema()).resolves.toBe(secondSchema); + + resolveFirstRequest({ data: { task: 123 } }); + await expect(firstSchema).resolves.toEqual({ task: 123 }); + + expect(sandbox.window.ProcessMaker.VocabulariesSchemaCache).toEqual({ + url: "vocabularies/task_schema/456", + data: secondSchema + }); + }); +}); From f8795945bdf3a30a298c4fe7357a03d7a424aed9 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Wed, 24 Jun 2026 09:57:19 -0400 Subject: [PATCH 4/7] feat: enhance caching behavior in getDataSource method to respect cache parameter --- src/DataProvider.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/DataProvider.js b/src/DataProvider.js index ae64c64c..539f39af 100644 --- a/src/DataProvider.js +++ b/src/DataProvider.js @@ -217,6 +217,7 @@ export default { getDataSource(dataSourceId, params, nonce = null) { // keep backwards compatibility if ( + !params.cache && !window.ProcessMaker.screen.cacheEnabled && !window.ProcessMaker.screen.cacheTimeout ) { @@ -226,6 +227,7 @@ export default { url += this.authQueryString(); return this.get(url, { useCache: window.ProcessMaker.screen.cacheEnabled, + cache: params.cache, params: { pmds_config: JSON.stringify(params.config), pmds_data: JSON.stringify(params.data) From fd96616aeeb635e64d3403748a4f0c674e3f00fb Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Fri, 26 Jun 2026 16:24:33 -0400 Subject: [PATCH 5/7] test: add mock data source responses for select list tests --- src/main.js | 11 ++ tests/e2e/specs/SelectListCollection.spec.js | 141 ++++++++++--------- tests/e2e/specs/SelectListDataSource.spec.js | 4 +- tests/e2e/specs/SelectListDependent.spec.js | 99 +++++-------- tests/e2e/specs/SelectListMustache.spec.js | 141 ++++++++++--------- 5 files changed, 200 insertions(+), 196 deletions(-) diff --git a/src/main.js b/src/main.js index 18ba1e94..761ae229 100644 --- a/src/main.js +++ b/src/main.js @@ -203,6 +203,17 @@ window.ProcessMaker = { } } }); + } else if (url === "/requests/data_sources/1/resources/list/data") { + resolve({ + data: { + response: [ + { value: 1, content: "James" }, + { value: 2, content: "John" }, + { value: 3, content: "Mary" }, + { value: 4, content: "Patricia" } + ] + } + }); } else if (url === "/data_sources") { resolve({ data: { diff --git a/tests/e2e/specs/SelectListCollection.spec.js b/tests/e2e/specs/SelectListCollection.spec.js index f10d0565..b2d06333 100644 --- a/tests/e2e/specs/SelectListCollection.spec.js +++ b/tests/e2e/specs/SelectListCollection.spec.js @@ -1,80 +1,87 @@ describe("select list mustache", () => { beforeEach(() => { cy.visit("/"); - cy.intercept( - "POST", - "/api/1.0/requests/data_sources/2", - JSON.stringify({ - status: 200, - response: { - data: [ - { - id: 1, - created_by_id: 2, - updated_by_id: 2, - created_at: "2021-11-08 10:29:56", - updated_at: "2021-11-08 10:29:56", - data: { - dni: "1234", - name: { - last: "Smith", - first: "Oliver" - }, - id: 1 + const dataSourceResponse = { + status: 200, + response: { + data: [ + { + id: 1, + created_by_id: 2, + updated_by_id: 2, + created_at: "2021-11-08 10:29:56", + updated_at: "2021-11-08 10:29:56", + data: { + dni: "1234", + name: { + last: "Smith", + first: "Oliver" }, - collection_id: 1, - title: "1", - created_by: { - id: 2, - email: "admin@processmaker.com" - }, - updated_by: { - id: 2, - email: "admin@processmaker.com" - } + id: 1 }, - { + collection_id: 1, + title: "1", + created_by: { id: 2, - created_by_id: 2, - updated_by_id: 2, - created_at: "2021-11-08 10:29:56", - updated_at: "2021-11-08 10:29:56", - data: { - dni: "5678", - name: { - last: "Doe", - first: "John" - }, - id: 2 - }, - collection_id: 1, - title: "2", - created_by: { - id: 2, - email: "admin@processmaker.com" + email: "admin@processmaker.com" + }, + updated_by: { + id: 2, + email: "admin@processmaker.com" + } + }, + { + id: 2, + created_by_id: 2, + updated_by_id: 2, + created_at: "2021-11-08 10:29:56", + updated_at: "2021-11-08 10:29:56", + data: { + dni: "5678", + name: { + last: "Doe", + first: "John" }, - updated_by: { - id: 2, - email: "admin@processmaker.com" - } + id: 2 + }, + collection_id: 1, + title: "2", + created_by: { + id: 2, + email: "admin@processmaker.com" + }, + updated_by: { + id: 2, + email: "admin@processmaker.com" } - ], - meta: { - filter: "", - sort_by: "", - sort_order: "", - count: 2, - total_pages: 1, - current_page: 1, - from: 1, - last_page: 1, - path: "/api/1.0/collections/1/records", - per_page: 9223372036854775807, - to: 2, - total: 2 } + ], + meta: { + filter: "", + sort_by: "", + sort_order: "", + count: 2, + total_pages: 1, + current_page: 1, + from: 1, + last_page: 1, + path: "/api/1.0/collections/1/records", + per_page: 9223372036854775807, + to: 2, + total: 2 } - }) + } + }; + + cy.intercept( + "POST", + "/api/1.0/requests/data_sources/2", + JSON.stringify(dataSourceResponse) + ).as("executeScript"); + cy.intercept( + "GET", + "/api/1.0/requests/data_sources/2/resources/ListAll/data*", + JSON.stringify(dataSourceResponse) ).as("executeScript"); }); diff --git a/tests/e2e/specs/SelectListDataSource.spec.js b/tests/e2e/specs/SelectListDataSource.spec.js index e444515d..304af268 100644 --- a/tests/e2e/specs/SelectListDataSource.spec.js +++ b/tests/e2e/specs/SelectListDataSource.spec.js @@ -2,8 +2,8 @@ describe("Select List with DataSource", () => { beforeEach(() => { cy.visit("/"); cy.intercept( - "POST", - "/api/1.0/requests/data_sources/2", + "GET", + "/api/1.0/requests/data_sources/2/resources/ListAll/data*", JSON.stringify({ status: 200, response: { diff --git a/tests/e2e/specs/SelectListDependent.spec.js b/tests/e2e/specs/SelectListDependent.spec.js index 57cf7a5a..6ad79ee9 100644 --- a/tests/e2e/specs/SelectListDependent.spec.js +++ b/tests/e2e/specs/SelectListDependent.spec.js @@ -1,13 +1,37 @@ describe("select list mustache", () => { beforeEach(() => { cy.visit("/"); + const getOutboundConfigValue = (req) => { + const config = JSON.parse(req.query.pmds_config || "{}"); + return config.outboundConfig && config.outboundConfig[0] + ? config.outboundConfig[0].value + : null; + }; + + const dataSourceResponse = (data, path) => ({ + data, + meta: { + filter: "", + sort_by: "", + sort_order: "", + count: data.length, + total_pages: 1, + current_page: 1, + from: 1, + last_page: 1, + path, + per_page: 9223372036854775807, + to: data.length, + total: data.length + } + }); + cy.intercept( - "POST", - "/api/1.0/requests/data_sources/3", - JSON.stringify({ - status: 200, - response: { - data: [ + "GET", + "/api/1.0/requests/data_sources/3/resources/ListAll/data*", + { + response: dataSourceResponse( + [ { id: 1, created_by_id: 2, @@ -51,22 +75,9 @@ describe("select list mustache", () => { } } ], - meta: { - filter: "", - sort_by: "", - sort_order: "", - count: 2, - total_pages: 1, - current_page: 1, - from: 1, - last_page: 1, - path: "/api/1.0/collections/3/records", - per_page: 9223372036854775807, - to: 2, - total: 2 - } - } - }) + "/api/1.0/collections/3/records" + ) + } ).as("executeScript"); // Bolivia Cities const BoliviaCities = [ @@ -159,8 +170,8 @@ describe("select list mustache", () => { } ]; let cities = []; - cy.intercept("POST", "/api/1.0/requests/data_sources/4", (req) => { - switch (req.body.config.outboundConfig[0].value) { + cy.intercept("GET", "/api/1.0/requests/data_sources/4/resources/ListAll/data*", (req) => { + switch (getOutboundConfigValue(req)) { case "data.country_id=1": cities = BoliviaCities; break; @@ -170,23 +181,7 @@ describe("select list mustache", () => { default: cities = []; } - const response = { - data: cities, - meta: { - filter: "", - sort_by: "", - sort_order: "", - count: cities.length, - total_pages: 1, - current_page: 1, - from: 1, - last_page: 1, - path: "/api/1.0/collections/4/records", - per_page: 9223372036854775807, - to: cities.length, - total: cities.length - } - }; + const response = dataSourceResponse(cities, "/api/1.0/collections/4/records"); req.reply({ headers: { "X-Cypress-Response": `"response":${JSON.stringify(response)}}` @@ -381,8 +376,8 @@ describe("select list mustache", () => { ]; let addresses = []; - cy.intercept("POST", "/api/1.0/requests/data_sources/5", (req) => { - switch (req.body.config.outboundConfig[0].value) { + cy.intercept("GET", "/api/1.0/requests/data_sources/5/resources/ListAll/data*", (req) => { + switch (getOutboundConfigValue(req)) { case "data.city_id=1": addresses = LaPazAddresses; break; @@ -398,23 +393,7 @@ describe("select list mustache", () => { default: addresses = []; } - const response = { - data: addresses, - meta: { - filter: "", - sort_by: "", - sort_order: "", - count: addresses.length, - total_pages: 1, - current_page: 1, - from: 1, - last_page: 1, - path: "/api/1.0/collections/5/records", - per_page: 9223372036854775807, - to: addresses.length, - total: addresses.length - } - }; + const response = dataSourceResponse(addresses, "/api/1.0/collections/5/records"); req.reply({ headers: { "X-Cypress-Response": `"response":${JSON.stringify(response)}}` diff --git a/tests/e2e/specs/SelectListMustache.spec.js b/tests/e2e/specs/SelectListMustache.spec.js index b28c384e..9401d247 100644 --- a/tests/e2e/specs/SelectListMustache.spec.js +++ b/tests/e2e/specs/SelectListMustache.spec.js @@ -1,80 +1,87 @@ describe("select list mustache", () => { beforeEach(() => { cy.visit("/"); - cy.intercept( - "POST", - "/api/1.0/requests/data_sources/2", - JSON.stringify({ - status: 200, - response: { - data: [ - { - id: 1, - created_by_id: 2, - updated_by_id: 2, - created_at: "2021-11-08 10:29:56", - updated_at: "2021-11-08 10:29:56", - data: { - dni: "1234", - name: { - last: "Callizaya", - first: "David" - }, - id: 1 + const dataSourceResponse = { + status: 200, + response: { + data: [ + { + id: 1, + created_by_id: 2, + updated_by_id: 2, + created_at: "2021-11-08 10:29:56", + updated_at: "2021-11-08 10:29:56", + data: { + dni: "1234", + name: { + last: "Callizaya", + first: "David" }, - collection_id: 1, - title: "1", - created_by: { - id: 2, - email: "admin@processmaker.com" - }, - updated_by: { - id: 2, - email: "admin@processmaker.com" - } + id: 1 }, - { + collection_id: 1, + title: "1", + created_by: { id: 2, - created_by_id: 2, - updated_by_id: 2, - created_at: "2021-11-08 10:29:56", - updated_at: "2021-11-08 10:29:56", - data: { - dni: "5678", - name: { - last: "Loayza", - first: "Dante" - }, - id: 2 - }, - collection_id: 1, - title: "2", - created_by: { - id: 2, - email: "admin@processmaker.com" + email: "admin@processmaker.com" + }, + updated_by: { + id: 2, + email: "admin@processmaker.com" + } + }, + { + id: 2, + created_by_id: 2, + updated_by_id: 2, + created_at: "2021-11-08 10:29:56", + updated_at: "2021-11-08 10:29:56", + data: { + dni: "5678", + name: { + last: "Loayza", + first: "Dante" }, - updated_by: { - id: 2, - email: "admin@processmaker.com" - } + id: 2 + }, + collection_id: 1, + title: "2", + created_by: { + id: 2, + email: "admin@processmaker.com" + }, + updated_by: { + id: 2, + email: "admin@processmaker.com" } - ], - meta: { - filter: "", - sort_by: "", - sort_order: "", - count: 2, - total_pages: 1, - current_page: 1, - from: 1, - last_page: 1, - path: "/api/1.0/collections/1/records", - per_page: 9223372036854775807, - to: 2, - total: 2 } + ], + meta: { + filter: "", + sort_by: "", + sort_order: "", + count: 2, + total_pages: 1, + current_page: 1, + from: 1, + last_page: 1, + path: "/api/1.0/collections/1/records", + per_page: 9223372036854775807, + to: 2, + total: 2 } - }) + } + }; + + cy.intercept( + "POST", + "/api/1.0/requests/data_sources/2", + JSON.stringify(dataSourceResponse) + ).as("executeScript"); + cy.intercept( + "GET", + "/api/1.0/requests/data_sources/2/resources/ListAll/data*", + JSON.stringify(dataSourceResponse) ).as("executeScript"); }); From c02e435a10ab6c3c2faa73ea042cdccb39f8f37a Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 6 Jul 2026 17:54:35 -0700 Subject: [PATCH 6/7] Update JavaScript Dependencies --- package-lock.json | 10 +++++----- package.json | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5801c98..fa7eef28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "@fortawesome/fontawesome-free": "^5.6.1", "@originjs/vite-plugin-commonjs": "^1.0.3", "@panter/vue-i18next": "^0.15.2", - "@processmaker/vue-form-elements": "0.65.8", + "@processmaker/vue-form-elements": "0.65.8-branch-ad97b37", "@processmaker/vue-multiselect": "2.3.2", "@storybook/addon-essentials": "^7.6.13", "@storybook/addon-interactions": "^7.6.13", @@ -103,7 +103,7 @@ }, "peerDependencies": { "@panter/vue-i18next": "^0.15.0", - "@processmaker/vue-form-elements": "0.65.8", + "@processmaker/vue-form-elements": "0.65.8-branch-ad97b37", "i18next": "^15.0.8", "vue": "^2.6.12", "vuex": "^3.1.1" @@ -4442,9 +4442,9 @@ } }, "node_modules/@processmaker/vue-form-elements": { - "version": "0.65.8", - "resolved": "https://registry.npmjs.org/@processmaker/vue-form-elements/-/vue-form-elements-0.65.8.tgz", - "integrity": "sha512-Iwew8oNVrZX5NENNOHntrbT1wJK4GpoCaNgdTkzzH7f0YOhM7IwluTch4ED5hsWuRqy2NOYfXL/qg8MH91AQFA==", + "version": "0.65.8-branch-ad97b37", + "resolved": "https://registry.npmjs.org/@processmaker/vue-form-elements/-/vue-form-elements-0.65.8-branch-ad97b37.tgz", + "integrity": "sha512-9WGGd1Z9aipHqHNgCLrbpvn9A8rxUIT8LZOMu2KR+xr7VjK/RcYokZJ/eSzFtrduLeR+V1Oy1+sltCzLQieWqw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 60ded019..e503ec74 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@fortawesome/fontawesome-free": "^5.6.1", "@originjs/vite-plugin-commonjs": "^1.0.3", "@panter/vue-i18next": "^0.15.2", - "@processmaker/vue-form-elements": "0.65.8", + "@processmaker/vue-form-elements": "0.65.8-branch-ad97b37", "@processmaker/vue-multiselect": "2.3.2", "@storybook/addon-essentials": "^7.6.13", "@storybook/addon-interactions": "^7.6.13", @@ -125,7 +125,7 @@ }, "peerDependencies": { "@panter/vue-i18next": "^0.15.0", - "@processmaker/vue-form-elements": "0.65.8", + "@processmaker/vue-form-elements": "0.65.8-branch-ad97b37", "i18next": "^15.0.8", "vue": "^2.6.12", "vuex": "^3.1.1" From c05acc584954c7a3aed556e75ef9ed64a31e2f14 Mon Sep 17 00:00:00 2001 From: Nolan Ehrstrom Date: Mon, 6 Jul 2026 17:54:36 -0700 Subject: [PATCH 7/7] 3.8.35-branch-c02e435a --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa7eef28..18e852df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@processmaker/screen-builder", - "version": "3.8.35", + "version": "3.8.35-branch-c02e435a", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@processmaker/screen-builder", - "version": "3.8.35", + "version": "3.8.35-branch-c02e435a", "dependencies": { "@chantouchsek/validatorjs": "1.2.3", "@storybook/addon-docs": "^7.6.13", diff --git a/package.json b/package.json index e503ec74..77f65aa0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@processmaker/screen-builder", - "version": "3.8.35", + "version": "3.8.35-branch-c02e435a", "scripts": { "dev": "VITE_COVERAGE=true vite", "build": "vite build",