diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/scribble/v1/scribble/clientlibs/site/js/scribbleview.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/scribble/v1/scribble/clientlibs/site/js/scribbleview.js index 0db33648f2..8a574eb8f3 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/scribble/v1/scribble/clientlibs/site/js/scribbleview.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/scribble/v1/scribble/clientlibs/site/js/scribbleview.js @@ -267,6 +267,10 @@ signedImage.setAttribute('alt', FormView.LanguageUtils.getTranslatedString(this.lang, 'signature') || 'Signature'); signedImage.setAttribute('title', FormView.LanguageUtils.getTranslatedString(this.lang, 'signature') || 'Signature'); that.updateEmptyStatus(); + if (!that.element.querySelector('.cmp-adaptiveform-scribble__clear-sign')) { + that.addClearSignButton(); + that._signSubmitted = true; + } } } }); diff --git a/ui.tests/test-module/specs/prefill/prefillstub.cy.js b/ui.tests/test-module/specs/prefill/prefillstub.cy.js new file mode 100644 index 0000000000..b35dfd27e3 --- /dev/null +++ b/ui.tests/test-module/specs/prefill/prefillstub.cy.js @@ -0,0 +1,161 @@ +/******************************************************************************* + * Copyright 2026 Adobe + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ + +/** + * Prefill binding tests. The data endpoint (fd:dataUrl) is stubbed with cy.intercept, so no server side + * DataProvider is needed. A dataRef request parameter makes FormContainerImpl set fd:formDataEnabled=true, + * which makes the client fetch the data and pass it to createFormInstance. Data is keyed by field name. + */ +describe("Prefill data binding of form components", () => { + const samples = "content/forms/af/core-components-it/samples"; + const SIGNATURE_DATA_URL = "data:image/png;name=fd_type_signature.png;base64,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"; + + const previewWithPrefill = (pagePath, data) => { + cy.intercept('GET', '**/af/data/**', {statusCode: 200, body: {data}}).as('prefillData'); + return cy.previewForm(pagePath, {params: ['dataRef=service://stub']}).then(formContainer => { + return cy.wait('@prefillData').then(() => formContainer); + }); + }; + + const getFieldByName = (formContainer, name) => { + const entry = Object.keys(formContainer._fields).find(id => formContainer._model.getElement(id)?.name === name); + expect(entry, `field with name ${name} should exist`).to.not.be.undefined; + return [entry, formContainer._model.getElement(entry)]; + }; + + it("numberinput - prefills number and numeric string", () => { + previewWithPrefill(`${samples}/numberinput/basic.html`, {numberinput4: 42, numberinput2: "7"}).then(formContainer => { + const [numberId, numberModel] = getFieldByName(formContainer, "numberinput4"); + expect(numberModel.value, "number model value").to.equal(42); + cy.get(`#${numberId} input`).should("have.value", "42"); + + const [stringId, stringModel] = getFieldByName(formContainer, "numberinput2"); + expect(Number(stringModel.value), "numeric string model value").to.equal(7); + cy.get(`#${stringId} input`).should("have.value", "7"); + }); + }); + + it("checkbox - prefills checked state", () => { + previewWithPrefill(`${samples}/checkbox/basic.html`, {checkboxgroup1662722663424: "true"}).then(formContainer => { + const [id, model] = getFieldByName(formContainer, "checkboxgroup1662722663424"); + expect(String(model.value), "checkbox model value").to.equal("true"); + cy.get(`#${id} input`).should("be.checked"); + }); + }); + + it("checkboxgroup - prefills array of selected options", () => { + previewWithPrefill(`${samples}/checkboxgroup/checkboxgroupv2/basic.html`, {checkboxgroup1662722663424: ["1", "3"]}).then(formContainer => { + const [id, model] = getFieldByName(formContainer, "checkboxgroup1662722663424"); + expect(model.value.map(String), "checkboxgroup model value").to.deep.equal(["1", "3"]); + cy.get(`#${id} input:checked`).should("have.length", 2); + cy.get(`#${id} input[value='1']`).should("be.checked"); + cy.get(`#${id} input[value='3']`).should("be.checked"); + cy.get(`#${id} input[value='0']`).should("not.be.checked"); + }); + }); + + it("switch - prefills on state from first enum value", () => { + previewWithPrefill(`${samples}/switch/basic.html`, {switch1662722663424: "0"}).then(formContainer => { + const [id, model] = getFieldByName(formContainer, "switch1662722663424"); + expect(String(model.value), "switch model value").to.equal("0"); + cy.get(`#${id} input`).should("be.checked"); + }); + }); + + it("imagechoice - prefills multi select and single select", () => { + previewWithPrefill(`${samples}/imagechoice/testimagechoice.html`, {hz: [1, 3], vt: "b"}).then(formContainer => { + const [multiId, multiModel] = getFieldByName(formContainer, "hz"); + expect(multiModel.value.map(String), "multi select model value").to.deep.equal(["1", "3"]); + cy.get(`#${multiId} input:checked`).should("have.length", 2); + + const [singleId, singleModel] = getFieldByName(formContainer, "vt"); + expect(singleModel.value, "single select model value").to.equal("b"); + cy.get(`#${singleId} input:checked`).should("have.length", 1).and("have.value", "b"); + }); + }); + + it("emailinput - prefills string value", () => { + previewWithPrefill(`${samples}/emailinput/basic.html`, {emailinput1: "prefill@example.com"}).then(formContainer => { + const [id, model] = getFieldByName(formContainer, "emailinput1"); + expect(model.value, "email model value").to.equal("prefill@example.com"); + cy.get(`#${id} input`).should("have.value", "prefill@example.com"); + }); + }); + + it("telephoneinput - prefills string value", () => { + previewWithPrefill(`${samples}/telephoneinput/basic.html`, {telephoneinput1: "1234567890"}).then(formContainer => { + const [id, model] = getFieldByName(formContainer, "telephoneinput1"); + expect(model.value, "telephone model value").to.equal("1234567890"); + cy.get(`#${id} input`).should("have.value", "1234567890"); + }); + }); + + it("datetime - prefills ISO datetime", () => { + previewWithPrefill(`${samples}/datetime/datetime.html`, {datetime1752743466416: "2024-03-15T10:30"}).then(formContainer => { + const [id, model] = getFieldByName(formContainer, "datetime1752743466416"); + expect(model.value, "datetime model value").to.equal("2024-03-15T10:30"); + cy.get(`#${id} input`).should("not.have.value", ""); + }); + }); + + it("termsandconditions - prefills approval checkbox inside the panel", () => { + previewWithPrefill(`${samples}/termsandconditions/basic.html`, {termsandconditions1695211053616: {approvalcheckbox: true}}).then(formContainer => { + const panel = formContainer._model.items.find(item => item.name === "termsandconditions1695211053616"); + const approval = panel.items.find(item => item.name === "approvalcheckbox"); + expect(approval.value, "approval checkbox model value").to.equal(true); + }); + }); + + describe("scribble", () => { + const scribbleName = "scribble1750313569015"; + + it("prefills signature image from data url", () => { + previewWithPrefill(`${samples}/scribble/ss.html`, {[scribbleName]: SIGNATURE_DATA_URL}).then(formContainer => { + const [id, model] = getFieldByName(formContainer, scribbleName); + expect(model.value, "scribble model should hold prefilled value").to.not.be.empty; + cy.get(`#${id} .cmp-adaptiveform-scribble__canvas-signed-image`) + .should("have.attr", "src").and("contain", "data:image/png"); + cy.get(`#${id} .cmp-adaptiveform-scribble__canvas-signed-image`).should("have.attr", "alt").and("not.be.empty"); + cy.get(`#${id} .cmp-adaptiveform-scribble__canvas-signed-image`).should("have.attr", "title").and("not.be.empty"); + }); + }); + + it("shows the clear signature button for a prefilled signature", () => { + previewWithPrefill(`${samples}/scribble/ss.html`, {[scribbleName]: SIGNATURE_DATA_URL}).then(formContainer => { + const [id] = getFieldByName(formContainer, scribbleName); + cy.get(`#${id} .cmp-adaptiveform-scribble__canvas-signed-image`).should("have.attr", "src"); + cy.get(`#${id} .cmp-adaptiveform-scribble__clear-sign`).should("exist"); + }); + }); + + it("keeps the prefilled signature as attachment in getFormDataObject", () => { + previewWithPrefill(`${samples}/scribble/ss.html`, {[scribbleName]: SIGNATURE_DATA_URL}).then(() => { + cy.window().then($window => { + return new Cypress.Promise((resolve) => { + $window.guideBridge.getFormDataObject({ + success: function (dataObj) { + const attachments = dataObj.data.attachments; + expect(attachments, "attachments").to.have.length(1); + expect(attachments[0].data).to.match(/^data:image\/png;name=fd_type_signature\.png;base64/); + resolve(); + } + }); + }); + }); + }); + }); + }); +});