From 2c5938d689cbdeac39e06162dd4b1e4bb10e214f Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Thu, 7 Aug 2025 11:14:11 +0530 Subject: [PATCH 01/13] @fix: file attachment delete correct file when duplicate names of files --- ui.frontend/src/view/FormFileInputWidgetBase.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.frontend/src/view/FormFileInputWidgetBase.js b/ui.frontend/src/view/FormFileInputWidgetBase.js index 9c3f96fcd4..9fc69b8d17 100644 --- a/ui.frontend/src/view/FormFileInputWidgetBase.js +++ b/ui.frontend/src/view/FormFileInputWidgetBase.js @@ -227,7 +227,7 @@ class FormFileInputWidgetBase { handleClick (event){ let elem = event.target, text = elem.previousSibling.textContent, - index = this.getIndexOfText(text, elem), + index = this.getIndexOfText(text, elem.parentElement), url = elem.previousSibling.dataset.key, objectUrl = elem.previousSibling.dataset.objectUrl; if (index !== -1) { From 9d2d0a3795452c6f71b045e92b200ec122a01d6b Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Thu, 7 Aug 2025 15:15:51 +0530 Subject: [PATCH 02/13] fix fileinput test --- ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index 10cd39a289..6e75ce92dc 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -235,7 +235,7 @@ describe("Form with File Input - Basic Tests", () => { const fileInput = "input[name='fileinput1']"; cy.attachFile(fileInput, [sampleFileNames[0]]); cy.attachFile(fileInput, [sampleFileNames[1]]); - cy.attachFile(fileInput, [sampleFileNames[0]]); + cy.attachFile(fileInput, [sampleFileNames[2]]); checkFilePreviewInFileAttachment(fileInput); From c128c407c2a1c5163c5eb641eb79ac4cde05aa59 Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Fri, 8 Aug 2025 09:05:10 +0530 Subject: [PATCH 03/13] fix fileinput testcase --- .../test-module/specs/fileinput/fileinput.runtime.cy.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index 6e75ce92dc..8f48b0dd44 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -53,10 +53,11 @@ const checkFilePreviewInFileAttachment = (component) => { const deleteSelectedFiles = (component, fileNames) => { cy.get(component).then(() => { - fileNames.forEach((fileName) => { - cy.get(".cmp-adaptiveform-fileinput__filedelete").should('have.attr', 'role', 'button'); - cy.get(".cmp-adaptiveform-fileinput__filename").contains(fileName).next().click(); - }) + cy.wrap(fileNames).each((fileName) => { + cy.get('.cmp-adaptiveform-fileinput__filedelete').should('have.attr', 'role', 'button'); + cy.get('.cmp-adaptiveform-fileinput__filename').contains(fileName).first().next().click(); + cy.wait(500); + }); }); }; From 5848277b9b6cf019a3bcd424d6946c36c8fc66c1 Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 12:45:27 +0530 Subject: [PATCH 04/13] @fix handleClick method fixed in derived class of fileinput --- ui.frontend/src/view/FormFileInputWidget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.frontend/src/view/FormFileInputWidget.js b/ui.frontend/src/view/FormFileInputWidget.js index 0c94e1df7d..6571fb9761 100644 --- a/ui.frontend/src/view/FormFileInputWidget.js +++ b/ui.frontend/src/view/FormFileInputWidget.js @@ -49,7 +49,7 @@ import FormFileInputWidgetBase from "./FormFileInputWidgetBase"; handleClick (event){ let elem = event.target, text = elem.parentElement.previousSibling.textContent, - index = this.getIndexOfText(text, elem), + index = this.getIndexOfText(text, elem.parentElement), url = elem.parentElement.previousSibling.dataset.key, objectUrl = elem.parentElement.previousSibling.dataset.objectUrl; if (index !== -1) { From 9c823491f853500ea12be30a4da733e7894c1a8c Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 14:56:18 +0530 Subject: [PATCH 05/13] fileinput runtime error fix * new utility function for test added to delete a file indiviually --- .../specs/fileinput/fileinput.runtime.cy.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index 8f48b0dd44..7e0d00b798 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -61,6 +61,14 @@ const deleteSelectedFiles = (component, fileNames) => { }); }; +const deleteIndividualFile = (component, fileName) => { + cy.get(component).then(() => { + cy.get('.cmp-adaptiveform-fileinput__filedelete').should('have.attr', 'role', 'button'); + cy.get('.cmp-adaptiveform-fileinput__filename').contains(fileName).first().next().click(); + cy.wait(500); + }); +} + const checkFileNamesInFileAttachmentView = (component, fileNames) => { // check if file present in view cy.get(component).then(() => { @@ -231,7 +239,7 @@ describe("Form with File Input - Basic Tests", () => { }) }) - it("check preview and delete functionality of duplicate files", () => { + it.only("check preview and delete functionality of duplicate files", () => { let sampleFileNames = ['sample2.txt','sample.txt','sample2.txt']; const fileInput = "input[name='fileinput1']"; cy.attachFile(fileInput, [sampleFileNames[0]]); @@ -240,7 +248,11 @@ describe("Form with File Input - Basic Tests", () => { checkFilePreviewInFileAttachment(fileInput); - deleteSelectedFiles(fileInput, sampleFileNames) + sampleFileNames.forEach((fileName) => { + deleteIndividualFile(fileInput, fileName); + }); + + // deleteSelectedFiles(fileInput, sampleFileNames) cy.get('.cmp-adaptiveform-fileinput__filelist').eq(0).children().should('have.length', 0); }) From b5a7d48392fbba6865981b410e4e53fbd0e5d4dd Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 14:58:10 +0530 Subject: [PATCH 06/13] remove .only() --- ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index 7e0d00b798..ef6374b944 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -239,7 +239,7 @@ describe("Form with File Input - Basic Tests", () => { }) }) - it.only("check preview and delete functionality of duplicate files", () => { + it("check preview and delete functionality of duplicate files", () => { let sampleFileNames = ['sample2.txt','sample.txt','sample2.txt']; const fileInput = "input[name='fileinput1']"; cy.attachFile(fileInput, [sampleFileNames[0]]); From 77aa04b2f4ac9c9dfca7fc89060d623bf9a88c25 Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 15:59:38 +0530 Subject: [PATCH 07/13] update fileinput duplicate files test case --- .../specs/fileinput/fileinput.runtime.cy.js | 59 +++++++++++++------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index ef6374b944..55142180d8 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -61,13 +61,6 @@ const deleteSelectedFiles = (component, fileNames) => { }); }; -const deleteIndividualFile = (component, fileName) => { - cy.get(component).then(() => { - cy.get('.cmp-adaptiveform-fileinput__filedelete').should('have.attr', 'role', 'button'); - cy.get('.cmp-adaptiveform-fileinput__filename').contains(fileName).first().next().click(); - cy.wait(500); - }); -} const checkFileNamesInFileAttachmentView = (component, fileNames) => { // check if file present in view @@ -239,23 +232,53 @@ describe("Form with File Input - Basic Tests", () => { }) }) - it("check preview and delete functionality of duplicate files", () => { - let sampleFileNames = ['sample2.txt','sample.txt','sample2.txt']; + it.only("check preview and delete functionality of duplicate files", () => { + let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; const fileInput = "input[name='fileinput1']"; + + // Attach files cy.attachFile(fileInput, [sampleFileNames[0]]); cy.attachFile(fileInput, [sampleFileNames[1]]); cy.attachFile(fileInput, [sampleFileNames[2]]); - + checkFilePreviewInFileAttachment(fileInput); - - sampleFileNames.forEach((fileName) => { - deleteIndividualFile(fileInput, fileName); - }); - - // deleteSelectedFiles(fileInput, sampleFileNames) - + + // Verify initial state + cy.get('.cmp-adaptiveform-fileinput__fileitem').should('have.length', 3); + + // Delete files by index with verification + deleteFilesByIndexWithVerification(fileInput, sampleFileNames); + + // Final verification cy.get('.cmp-adaptiveform-fileinput__filelist').eq(0).children().should('have.length', 0); - }) + }); + + const deleteFilesByIndexWithVerification = (fileInput, fileNames) => { + cy.get(fileInput).closest('.cmp-adaptiveform-fileinput').then(() => { + // Delete from end to beginning + for (let i = fileNames.length - 1; i >= 0; i--) { + const expectedFileName = fileNames[i]; + + cy.log(`Deleting file at index ${i}: ${expectedFileName}`); + + // Get file item at index and verify content + cy.get('.cmp-adaptiveform-fileinput__fileitem') + .eq(i) + .within(() => { + // Verify filename before deletion + cy.get('.cmp-adaptiveform-fileinput__filename') + .should('contain.text', expectedFileName); + + // Delete the file + cy.get('.cmp-adaptiveform-fileinput__filedelete').should('have.attr', 'role', 'button').click(); + }); + + // Verify deletion by checking remaining count + cy.get('.cmp-adaptiveform-fileinput__fileitem') + .should('have.length', i); + } + }); + }; it(`fielinput is disabled when readonly property is true`, () => { const fileInput5 = "input[name='fileinput5']"; From bdfc75bf0936c6e9e8dba30a089de73a77fba8ac Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 16:01:09 +0530 Subject: [PATCH 08/13] remove .only() --- ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index 55142180d8..8f2746b2ad 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -232,7 +232,7 @@ describe("Form with File Input - Basic Tests", () => { }) }) - it.only("check preview and delete functionality of duplicate files", () => { + it("check preview and delete functionality of duplicate files", () => { let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; const fileInput = "input[name='fileinput1']"; From 5f782efd17d69ab0e340c7583cafb7c5a3dd0b35 Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 19:59:17 +0530 Subject: [PATCH 09/13] revert the changes from main widget classes --- ui.frontend/src/view/FormFileInputWidget.js | 2 +- ui.frontend/src/view/FormFileInputWidgetBase.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ui.frontend/src/view/FormFileInputWidget.js b/ui.frontend/src/view/FormFileInputWidget.js index 6571fb9761..0c94e1df7d 100644 --- a/ui.frontend/src/view/FormFileInputWidget.js +++ b/ui.frontend/src/view/FormFileInputWidget.js @@ -49,7 +49,7 @@ import FormFileInputWidgetBase from "./FormFileInputWidgetBase"; handleClick (event){ let elem = event.target, text = elem.parentElement.previousSibling.textContent, - index = this.getIndexOfText(text, elem.parentElement), + index = this.getIndexOfText(text, elem), url = elem.parentElement.previousSibling.dataset.key, objectUrl = elem.parentElement.previousSibling.dataset.objectUrl; if (index !== -1) { diff --git a/ui.frontend/src/view/FormFileInputWidgetBase.js b/ui.frontend/src/view/FormFileInputWidgetBase.js index 9fc69b8d17..9c3f96fcd4 100644 --- a/ui.frontend/src/view/FormFileInputWidgetBase.js +++ b/ui.frontend/src/view/FormFileInputWidgetBase.js @@ -227,7 +227,7 @@ class FormFileInputWidgetBase { handleClick (event){ let elem = event.target, text = elem.previousSibling.textContent, - index = this.getIndexOfText(text, elem.parentElement), + index = this.getIndexOfText(text, elem), url = elem.previousSibling.dataset.key, objectUrl = elem.previousSibling.dataset.objectUrl; if (index !== -1) { From c79662bd01ec5bd8061a31e2c2d87472e1f5f99f Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 20:01:18 +0530 Subject: [PATCH 10/13] revert test-case changes --- .../specs/fileinput/fileinput.runtime.cy.js | 42 +++---------------- 1 file changed, 5 insertions(+), 37 deletions(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index 8f2746b2ad..61c1016575 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -232,7 +232,7 @@ describe("Form with File Input - Basic Tests", () => { }) }) - it("check preview and delete functionality of duplicate files", () => { + it("check preview functionality of duplicate files", () => { let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; const fileInput = "input[name='fileinput1']"; @@ -242,44 +242,12 @@ describe("Form with File Input - Basic Tests", () => { cy.attachFile(fileInput, [sampleFileNames[2]]); checkFilePreviewInFileAttachment(fileInput); - - // Verify initial state - cy.get('.cmp-adaptiveform-fileinput__fileitem').should('have.length', 3); - - // Delete files by index with verification - deleteFilesByIndexWithVerification(fileInput, sampleFileNames); - - // Final verification - cy.get('.cmp-adaptiveform-fileinput__filelist').eq(0).children().should('have.length', 0); + + deleteSelectedFiles(fileInput, sampleFileNames); + + cy.get('.cmp-adaptiveform-fileinput__fileitem').should('have.length', 0); }); - const deleteFilesByIndexWithVerification = (fileInput, fileNames) => { - cy.get(fileInput).closest('.cmp-adaptiveform-fileinput').then(() => { - // Delete from end to beginning - for (let i = fileNames.length - 1; i >= 0; i--) { - const expectedFileName = fileNames[i]; - - cy.log(`Deleting file at index ${i}: ${expectedFileName}`); - - // Get file item at index and verify content - cy.get('.cmp-adaptiveform-fileinput__fileitem') - .eq(i) - .within(() => { - // Verify filename before deletion - cy.get('.cmp-adaptiveform-fileinput__filename') - .should('contain.text', expectedFileName); - - // Delete the file - cy.get('.cmp-adaptiveform-fileinput__filedelete').should('have.attr', 'role', 'button').click(); - }); - - // Verify deletion by checking remaining count - cy.get('.cmp-adaptiveform-fileinput__fileitem') - .should('have.length', i); - } - }); - }; - it(`fielinput is disabled when readonly property is true`, () => { const fileInput5 = "input[name='fileinput5']"; cy.get(fileInput5).should("have.attr", "disabled", "disabled"); From acb368478f5b26c2342bc8ef97ce212d82291649 Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 20:12:52 +0530 Subject: [PATCH 11/13] fileinput duplicate file names fix: * override handleClick method to adapt to v3 onwards structure of fileinput * cypress tests --- .../clientlibs/site/js/fileinputwidget.js | 35 +++++++++++++++++++ .../clientlibs/site/js/fileinputwidget.js | 35 +++++++++++++++++++ .../specs/fileinput/fileinput.runtime.cy.js | 2 +- .../specs/fileinput/fileinputv3.runtime.cy.js | 16 +++++++++ 4 files changed, 87 insertions(+), 1 deletion(-) diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v3/fileinput/clientlibs/site/js/fileinputwidget.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v3/fileinput/clientlibs/site/js/fileinputwidget.js index 4829d4f7ab..e69bdb52e3 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v3/fileinput/clientlibs/site/js/fileinputwidget.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v3/fileinput/clientlibs/site/js/fileinputwidget.js @@ -89,5 +89,40 @@ if (typeof window.FileInputWidget === 'undefined') { fileItem.appendChild(fileEndContainer); return fileItem; } + + handleClick (event){ + let elem = event.target, + text = elem.parentElement.previousSibling.textContent, + index = this.getIndexOfText(text, elem.parentElement), + url = elem.parentElement.previousSibling.dataset.key, + objectUrl = elem.parentElement.previousSibling.dataset.objectUrl; + if (index !== -1) { + this.values.splice(index, 1); + this.fileArr.splice(index, 1); + // set the model with the new value + this.model.value = this.fileArr; + // value and fileArr contains items of both URL and file types, hence while removing from DOM + // get the correct index as per this.#widget.files + let domIndex = Array.from(this.widget.files).findIndex(function(file) { + return file.name === text; + }); + this.deleteFilesFromInputDom([domIndex]); + if (url != null) { + // remove the data so that others don't use this url + delete elem.parentElement.previousSibling.dataset.key; + } + if(objectUrl) { + // revoke the object URL to avoid memory leaks in browser + // since file is anyways getting deleted, remove the object URL's too + window.URL.revokeObjectURL(objectUrl); + } + } + // Remove the dom from view + //All bound events and jQuery data associated with the element are also removed + elem.parentElement.parentElement.remove(); + // Set the focus on file upload button after click of close + this.widget.focus(); + + } } } \ No newline at end of file diff --git a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v4/fileinput/clientlibs/site/js/fileinputwidget.js b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v4/fileinput/clientlibs/site/js/fileinputwidget.js index cedcc81030..cb19f5dfd2 100644 --- a/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v4/fileinput/clientlibs/site/js/fileinputwidget.js +++ b/ui.af.apps/src/main/content/jcr_root/apps/core/fd/components/form/fileinput/v4/fileinput/clientlibs/site/js/fileinputwidget.js @@ -188,5 +188,40 @@ if (typeof window.FileInputWidget === 'undefined') { }; return messages[invalidFeature]; } + + handleClick (event){ + let elem = event.target, + text = elem.parentElement.previousSibling.textContent, + index = this.getIndexOfText(text, elem.parentElement), + url = elem.parentElement.previousSibling.dataset.key, + objectUrl = elem.parentElement.previousSibling.dataset.objectUrl; + if (index !== -1) { + this.values.splice(index, 1); + this.fileArr.splice(index, 1); + // set the model with the new value + this.model.value = this.fileArr; + // value and fileArr contains items of both URL and file types, hence while removing from DOM + // get the correct index as per this.#widget.files + let domIndex = Array.from(this.widget.files).findIndex(function(file) { + return file.name === text; + }); + this.deleteFilesFromInputDom([domIndex]); + if (url != null) { + // remove the data so that others don't use this url + delete elem.parentElement.previousSibling.dataset.key; + } + if(objectUrl) { + // revoke the object URL to avoid memory leaks in browser + // since file is anyways getting deleted, remove the object URL's too + window.URL.revokeObjectURL(objectUrl); + } + } + // Remove the dom from view + //All bound events and jQuery data associated with the element are also removed + elem.parentElement.parentElement.remove(); + // Set the focus on file upload button after click of close + this.widget.focus(); + + } } } \ No newline at end of file diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index 61c1016575..d5d74adb7b 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -232,7 +232,7 @@ describe("Form with File Input - Basic Tests", () => { }) }) - it("check preview functionality of duplicate files", () => { + it("check preview and delete functionality of duplicate files", () => { let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; const fileInput = "input[name='fileinput1']"; diff --git a/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js index fae36d3612..e96484c26f 100644 --- a/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js @@ -173,6 +173,22 @@ describe("Form with File Input V-3 - Basic Tests", () => { getFormObjTest(['empty.pdf', 'empty.pdf', 'empty.pdf', 'empty.pdf', 'empty.pdf']) }); + it("check preview functionality of duplicate files", () => { + let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; + const fileInput = "input[name='fileinput1']"; + + // Attach files + cy.attachFile(fileInput, [sampleFileNames[0]]); + cy.attachFile(fileInput, [sampleFileNames[1]]); + cy.attachFile(fileInput, [sampleFileNames[2]]); + + checkFilePreviewInFileAttachment(fileInput); + + deleteSelectedFiles(fileInput, sampleFileNames); + + cy.get('.cmp-adaptiveform-fileinput__fileitem').should('have.length', 0); + }); + it("should toggle description and tooltip", () => { cy.toggleDescriptionTooltip(bemBlock, 'fileinput_tooltip_scenario_test'); }) From ebfa80035c81b4b8b2177f34328303443e45aaab Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Mon, 11 Aug 2025 20:15:01 +0530 Subject: [PATCH 12/13] cypress tests for duplicate filename delete functionality --- .../specs/fileinput/fileinputv3.runtime.cy.js | 4 +--- .../specs/fileinput/fileinputv4.runtime.cy.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js index e96484c26f..a8ed57606f 100644 --- a/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinputv3.runtime.cy.js @@ -173,7 +173,7 @@ describe("Form with File Input V-3 - Basic Tests", () => { getFormObjTest(['empty.pdf', 'empty.pdf', 'empty.pdf', 'empty.pdf', 'empty.pdf']) }); - it("check preview functionality of duplicate files", () => { + it("check delete functionality of duplicate files", () => { let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; const fileInput = "input[name='fileinput1']"; @@ -181,8 +181,6 @@ describe("Form with File Input V-3 - Basic Tests", () => { cy.attachFile(fileInput, [sampleFileNames[0]]); cy.attachFile(fileInput, [sampleFileNames[1]]); cy.attachFile(fileInput, [sampleFileNames[2]]); - - checkFilePreviewInFileAttachment(fileInput); deleteSelectedFiles(fileInput, sampleFileNames); diff --git a/ui.tests/test-module/specs/fileinput/fileinputv4.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinputv4.runtime.cy.js index 0ed305fa11..999b5b9147 100644 --- a/ui.tests/test-module/specs/fileinput/fileinputv4.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinputv4.runtime.cy.js @@ -181,6 +181,20 @@ describe("Form with File Input V-4 - Basic Tests", () => { getFormObjTest(['empty.pdf', 'empty.pdf', 'empty.pdf', 'empty.pdf', 'empty.pdf']) }); + it("check delete functionality of duplicate files", () => { + let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; + const fileInput = "input[name='fileinput1']"; + + // Attach files + cy.attachFile(fileInput, [sampleFileNames[0]]); + cy.attachFile(fileInput, [sampleFileNames[1]]); + cy.attachFile(fileInput, [sampleFileNames[2]]); + + deleteSelectedFiles(fileInput, sampleFileNames); + + cy.get('.cmp-adaptiveform-fileinput__fileitem').should('have.length', 0); + }); + it("should toggle description and tooltip", () => { cy.toggleDescriptionTooltip(bemBlock, 'fileinput_tooltip_scenario_test'); }); From e8e657099473dbc7902f68ff1af5ea03a08b857d Mon Sep 17 00:00:00 2001 From: Anshika Gautam Date: Tue, 12 Aug 2025 11:35:37 +0530 Subject: [PATCH 13/13] restore fileinput runtime --- .../specs/fileinput/fileinput.runtime.cy.js | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js index d5d74adb7b..10cd39a289 100644 --- a/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js +++ b/ui.tests/test-module/specs/fileinput/fileinput.runtime.cy.js @@ -53,15 +53,13 @@ const checkFilePreviewInFileAttachment = (component) => { const deleteSelectedFiles = (component, fileNames) => { cy.get(component).then(() => { - cy.wrap(fileNames).each((fileName) => { - cy.get('.cmp-adaptiveform-fileinput__filedelete').should('have.attr', 'role', 'button'); - cy.get('.cmp-adaptiveform-fileinput__filename').contains(fileName).first().next().click(); - cy.wait(500); - }); + fileNames.forEach((fileName) => { + cy.get(".cmp-adaptiveform-fileinput__filedelete").should('have.attr', 'role', 'button'); + cy.get(".cmp-adaptiveform-fileinput__filename").contains(fileName).next().click(); + }) }); }; - const checkFileNamesInFileAttachmentView = (component, fileNames) => { // check if file present in view cy.get(component).then(() => { @@ -233,21 +231,19 @@ describe("Form with File Input - Basic Tests", () => { }) it("check preview and delete functionality of duplicate files", () => { - let sampleFileNames = ['sample2.txt', 'sample.txt', 'sample2.txt']; + let sampleFileNames = ['sample2.txt','sample.txt','sample2.txt']; const fileInput = "input[name='fileinput1']"; - - // Attach files cy.attachFile(fileInput, [sampleFileNames[0]]); cy.attachFile(fileInput, [sampleFileNames[1]]); - cy.attachFile(fileInput, [sampleFileNames[2]]); - + cy.attachFile(fileInput, [sampleFileNames[0]]); + checkFilePreviewInFileAttachment(fileInput); - deleteSelectedFiles(fileInput, sampleFileNames); + deleteSelectedFiles(fileInput, sampleFileNames) + + cy.get('.cmp-adaptiveform-fileinput__filelist').eq(0).children().should('have.length', 0); + }) - cy.get('.cmp-adaptiveform-fileinput__fileitem').should('have.length', 0); - }); - it(`fielinput is disabled when readonly property is true`, () => { const fileInput5 = "input[name='fileinput5']"; cy.get(fileInput5).should("have.attr", "disabled", "disabled");