From bb0951756db4428fac51fa697e2120583d9723fb Mon Sep 17 00:00:00 2001 From: nayimovag Date: Thu, 2 May 2024 13:08:25 +0500 Subject: [PATCH] FAT-12870 (#3539) --- ...holdings-electronic-access-link-text.cy.js | 135 ++++++++++++++++ ...ldings-electronic-access-public-note.cy.js | 134 +++++++++++++++ ...n-app-holdings-electronic-access-uri.cy.js | 2 +- ...s-electronic-access-url-relationship.cy.js | 153 ++++++++++++++++++ ...t-in-app-query-tab-items-permissions.cy.js | 2 +- ...-edit-query-instances-holdings-items.cy.js | 139 ++++++++++++++++ cypress/support/constants.js | 9 ++ .../fragments/bulk-edit/bulk-edit-actions.js | 39 +++-- .../bulk-edit/bulk-edit-search-pane.js | 15 +- .../fragments/bulk-edit/query-modal.js | 27 +++- .../fragments/inventory/holdingsRecordView.js | 5 + 11 files changed, 639 insertions(+), 21 deletions(-) create mode 100644 cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-link-text.cy.js create mode 100644 cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-public-note.cy.js create mode 100644 cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-url-relationship.cy.js create mode 100644 cypress/e2e/bulk-edit/query/bulk-edit-query-instances-holdings-items.cy.js diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-link-text.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-link-text.cy.js new file mode 100644 index 0000000000..4a9d68c454 --- /dev/null +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-link-text.cy.js @@ -0,0 +1,135 @@ +import permissions from '../../../support/dictionary/permissions'; +import BulkEditActions from '../../../support/fragments/bulk-edit/bulk-edit-actions'; +import BulkEditSearchPane from '../../../support/fragments/bulk-edit/bulk-edit-search-pane'; +import HoldingsRecordView from '../../../support/fragments/inventory/holdingsRecordView'; +import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances'; +import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter'; +import TopMenu from '../../../support/fragments/topMenu'; +import Users from '../../../support/fragments/users/users'; +import FileManager from '../../../support/utils/fileManager'; +import getRandomPostfix from '../../../support/utils/stringTools'; +import ExportFile from '../../../support/fragments/data-export/exportFile'; + +let user; +const item = { + instanceName: `testBulkEdit_${getRandomPostfix()}`, + itemBarcode: getRandomPostfix(), +}; +const textWithSpecialCharacters = 'Te;st: [sample] li*nk$text'; +const newLinkText = 'New link text'; +const holdingUUIDsFileName = `holdingUUIDs_${getRandomPostfix()}.csv`; +const matchedRecordsFileName = `*-Matched-Records-${holdingUUIDsFileName}`; +const previewFileName = `*-Updates-Preview-${holdingUUIDsFileName}`; +const changedRecordsFileName = `*-Changed-Records-${holdingUUIDsFileName}`; + +describe('bulk-edit', () => { + describe('in-app approach', () => { + before('create test data', () => { + cy.createTempUser([ + permissions.bulkEditView.gui, + permissions.bulkEditEdit.gui, + permissions.inventoryAll.gui, + ]).then((userProperties) => { + user = userProperties; + + item.instanceId = InventoryInstances.createInstanceViaApi( + item.instanceName, + item.itemBarcode, + ); + cy.getHoldings({ limit: 1, query: `"instanceId"="${item.instanceId}"` }).then( + (holdings) => { + item.holdingsHRID = holdings[0].hrid; + FileManager.createFile(`cypress/fixtures/${holdingUUIDsFileName}`, holdings[0].id); + cy.updateHoldingRecord(holdings[0].id, { + ...holdings[0], + electronicAccess: [ + { + linkText: textWithSpecialCharacters, + uri: 'uri.com', + }, + ], + }); + }, + ); + cy.login(user.username, user.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + }); + }); + + after('delete test data', () => { + cy.getAdminToken(); + InventoryInstances.deleteInstanceAndHoldingRecordAndAllItemsViaApi(item.itemBarcode); + FileManager.deleteFile(`cypress/fixtures/${holdingUUIDsFileName}`); + FileManager.deleteFileFromDownloadsByMask( + matchedRecordsFileName, + changedRecordsFileName, + previewFileName, + ); + Users.deleteViaApi(user.userId); + }); + + it( + 'C422230 Verify Bulk Edit for Holding populated with "Link text" in electronic access (firebird)', + { tags: ['criticalPath', 'firebird'] }, + () => { + BulkEditSearchPane.checkHoldingsRadio(); + BulkEditSearchPane.selectRecordIdentifier('Holdings UUIDs'); + BulkEditSearchPane.uploadFile(holdingUUIDsFileName); + BulkEditSearchPane.checkForUploading(holdingUUIDsFileName); + BulkEditSearchPane.waitFileUploading(); + BulkEditActions.downloadMatchedResults(); + BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Electronic access'); + BulkEditSearchPane.verifySpecificItemsMatched(textWithSpecialCharacters); + ExportFile.verifyFileIncludes(matchedRecordsFileName, [textWithSpecialCharacters]); + BulkEditActions.openInAppStartBulkEditFrom(); + BulkEditActions.verifyRowIcons(); + BulkEditActions.verifyOptionsDropdown(); + BulkEditActions.isSelectActionAbsent(); + BulkEditActions.selectOption('Link text'); + let possibleActions = ['Clear field', 'Find (full field search)', 'Replace with']; + BulkEditActions.verifyPossibleActions(possibleActions); + BulkEditActions.selectSecondAction('Clear field'); + BulkEditActions.addNewBulkEditFilterString(); + BulkEditActions.verifyNewBulkEditRow(); + BulkEditActions.verifyOptionAbsentInNewRow('Link text'); + BulkEditActions.deleteRow(1); + BulkEditActions.selectSecondAction('Replace with'); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.fillInSecondTextArea(newLinkText); + BulkEditSearchPane.isConfirmButtonDisabled(false); + BulkEditActions.findValue('Link text'); + possibleActions = ['Replace with', 'Remove']; + BulkEditActions.verifyPossibleActions(possibleActions); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.selectSecondAction('Remove'); + BulkEditActions.fillInFirstTextArea(textWithSpecialCharacters); + BulkEditSearchPane.isConfirmButtonDisabled(false); + BulkEditActions.selectSecondAction('Replace with'); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.fillInSecondTextArea(newLinkText); + BulkEditActions.confirmChanges(); + BulkEditSearchPane.verifyInputLabel( + '1 records will be changed if the Commit changes button is clicked. You may choose Download preview to review all changes prior to saving.', + ); + BulkEditActions.verifyChangesInAreYouSureForm('Electronic access', [newLinkText]); + BulkEditActions.downloadPreview(); + ExportFile.verifyFileIncludes(previewFileName, [newLinkText]); + BulkEditActions.commitChanges(); + BulkEditSearchPane.waitFileUploading(); + BulkEditSearchPane.verifyChangesUnderColumns('Electronic access', newLinkText); + BulkEditActions.openActions(); + BulkEditActions.downloadChangedCSV(); + ExportFile.verifyFileIncludes(changedRecordsFileName, [newLinkText]); + + cy.visit(TopMenu.inventoryPath); + InventorySearchAndFilter.switchToHoldings(); + InventorySearchAndFilter.searchByParameter('Holdings HRID', item.holdingsHRID); + InventorySearchAndFilter.selectSearchResultItem(); + InventorySearchAndFilter.selectViewHoldings(); + HoldingsRecordView.verifyElectronicAccess(newLinkText); + }, + ); + }); +}); diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-public-note.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-public-note.cy.js new file mode 100644 index 0000000000..d23d80dd02 --- /dev/null +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-public-note.cy.js @@ -0,0 +1,134 @@ +import permissions from '../../../support/dictionary/permissions'; +import BulkEditActions from '../../../support/fragments/bulk-edit/bulk-edit-actions'; +import BulkEditSearchPane from '../../../support/fragments/bulk-edit/bulk-edit-search-pane'; +import HoldingsRecordView from '../../../support/fragments/inventory/holdingsRecordView'; +import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances'; +import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter'; +import TopMenu from '../../../support/fragments/topMenu'; +import Users from '../../../support/fragments/users/users'; +import FileManager from '../../../support/utils/fileManager'; +import getRandomPostfix from '../../../support/utils/stringTools'; +import ExportFile from '../../../support/fragments/data-export/exportFile'; + +let user; +const item = { + instanceName: `testBulkEdit_${getRandomPostfix()}`, + itemBarcode: getRandomPostfix(), +}; +const publicNote = 'publicNote'; +const newPublicNote = 'new publicNote'; +const holdingUUIDsFileName = `holdingUUIDs_${getRandomPostfix()}.csv`; +const matchedRecordsFileName = `*-Matched-Records-${holdingUUIDsFileName}`; +const previewFileName = `*-Updates-Preview-${holdingUUIDsFileName}`; +const changedRecordsFileName = `*-Changed-Records-${holdingUUIDsFileName}`; + +describe('bulk-edit', () => { + describe('in-app approach', () => { + before('create test data', () => { + cy.createTempUser([ + permissions.bulkEditView.gui, + permissions.bulkEditEdit.gui, + permissions.inventoryAll.gui, + ]).then((userProperties) => { + user = userProperties; + + item.instanceId = InventoryInstances.createInstanceViaApi( + item.instanceName, + item.itemBarcode, + ); + cy.getHoldings({ limit: 1, query: `"instanceId"="${item.instanceId}"` }).then( + (holdings) => { + item.holdingsHRID = holdings[0].hrid; + FileManager.createFile(`cypress/fixtures/${holdingUUIDsFileName}`, holdings[0].id); + cy.updateHoldingRecord(holdings[0].id, { + ...holdings[0], + electronicAccess: [ + { + publicNote, + uri: 'uri.com', + }, + ], + }); + }, + ); + cy.login(user.username, user.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + }); + }); + + after('delete test data', () => { + cy.getAdminToken(); + InventoryInstances.deleteInstanceAndHoldingRecordAndAllItemsViaApi(item.itemBarcode); + FileManager.deleteFile(`cypress/fixtures/${holdingUUIDsFileName}`); + FileManager.deleteFileFromDownloadsByMask( + matchedRecordsFileName, + changedRecordsFileName, + previewFileName, + ); + Users.deleteViaApi(user.userId); + }); + + it( + 'C422240 Verify Bulk Edit for Holding populated with "URL public note" in electronic access (firebird)', + { tags: ['criticalPath', 'firebird'] }, + () => { + BulkEditSearchPane.checkHoldingsRadio(); + BulkEditSearchPane.selectRecordIdentifier('Holdings UUIDs'); + BulkEditSearchPane.uploadFile(holdingUUIDsFileName); + BulkEditSearchPane.checkForUploading(holdingUUIDsFileName); + BulkEditSearchPane.waitFileUploading(); + BulkEditActions.downloadMatchedResults(); + BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Electronic access'); + BulkEditSearchPane.verifySpecificItemsMatched(publicNote); + ExportFile.verifyFileIncludes(matchedRecordsFileName, [publicNote]); + BulkEditActions.openInAppStartBulkEditFrom(); + BulkEditActions.verifyRowIcons(); + BulkEditActions.verifyOptionsDropdown(); + BulkEditActions.isSelectActionAbsent(); + BulkEditActions.selectOption('URL public note'); + let possibleActions = ['Clear field', 'Find (full field search)', 'Replace with']; + BulkEditActions.verifyPossibleActions(possibleActions); + BulkEditActions.selectSecondAction('Clear field'); + BulkEditActions.addNewBulkEditFilterString(); + BulkEditActions.verifyNewBulkEditRow(); + BulkEditActions.verifyOptionAbsentInNewRow('URL public note'); + BulkEditActions.deleteRow(1); + BulkEditActions.selectSecondAction('Replace with'); + BulkEditActions.fillInSecondTextArea(publicNote); + BulkEditSearchPane.isConfirmButtonDisabled(false); + BulkEditActions.findValue('URL public note'); + possibleActions = ['Replace with', 'Remove']; + BulkEditActions.verifyPossibleActions(possibleActions); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.selectSecondAction('Replace with'); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.fillInFirstTextArea(publicNote); + BulkEditActions.fillInSecondTextArea(newPublicNote); + BulkEditSearchPane.isConfirmButtonDisabled(false); + BulkEditActions.selectSecondAction('Remove'); + BulkEditActions.confirmChanges(); + BulkEditSearchPane.verifyInputLabel( + '1 records will be changed if the Commit changes button is clicked. You may choose Download preview to review all changes prior to saving.', + ); + BulkEditSearchPane.verifyElectronicAccessElementByIndex(4, ''); + BulkEditActions.downloadPreview(); + ExportFile.verifyFileIncludes(previewFileName, [';uri.com;;;"']); + BulkEditActions.commitChanges(); + BulkEditSearchPane.waitFileUploading(); + BulkEditSearchPane.verifyElectronicAccessElementByIndex(4, ''); + BulkEditActions.openActions(); + BulkEditActions.downloadChangedCSV(); + ExportFile.verifyFileIncludes(changedRecordsFileName, [';uri.com;;;"']); + + cy.visit(TopMenu.inventoryPath); + InventorySearchAndFilter.switchToHoldings(); + InventorySearchAndFilter.searchByParameter('Holdings HRID', item.holdingsHRID); + InventorySearchAndFilter.selectSearchResultItem(); + InventorySearchAndFilter.selectViewHoldings(); + HoldingsRecordView.verifyElectronicAccessByElementIndex(4, '-'); + }, + ); + }); +}); diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-uri.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-uri.cy.js index f8e0fde215..c354cf9a58 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-uri.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-uri.cy.js @@ -89,7 +89,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Electronic access'); BulkEditActions.openInAppStartBulkEditFrom(); BulkEditActions.selectOption('URI'); - const possibleActions = ['Clear field', 'Find', 'Replace with']; + const possibleActions = ['Clear field', 'Find (full field search)', 'Replace with']; BulkEditActions.verifyPossibleActions(possibleActions); BulkEditActions.selectAction('Clear field'); BulkEditActions.addNewBulkEditFilterString(); diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-url-relationship.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-url-relationship.cy.js new file mode 100644 index 0000000000..353f6515c7 --- /dev/null +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-url-relationship.cy.js @@ -0,0 +1,153 @@ +import permissions from '../../../support/dictionary/permissions'; +import BulkEditActions from '../../../support/fragments/bulk-edit/bulk-edit-actions'; +import BulkEditSearchPane from '../../../support/fragments/bulk-edit/bulk-edit-search-pane'; +import HoldingsRecordView from '../../../support/fragments/inventory/holdingsRecordView'; +import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances'; +import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter'; +import TopMenu from '../../../support/fragments/topMenu'; +import Users from '../../../support/fragments/users/users'; +import FileManager from '../../../support/utils/fileManager'; +import getRandomPostfix from '../../../support/utils/stringTools'; +import ExportFile from '../../../support/fragments/data-export/exportFile'; +import { + electronicAccessRelationshipId, + electronicAccessRelationshipName, +} from '../../../support/constants'; + +let user; +const item = { + instanceName: `testBulkEdit_${getRandomPostfix()}`, + itemBarcode: getRandomPostfix(), +}; +const holdingUUIDsFileName = `holdingUUIDs_${getRandomPostfix()}.csv`; +const matchedRecordsFileName = `*-Matched-Records-${holdingUUIDsFileName}`; +const previewFileName = `*-Updates-Preview-${holdingUUIDsFileName}`; +const changedRecordsFileName = `*-Changed-Records-${holdingUUIDsFileName}`; + +describe('bulk-edit', () => { + describe('in-app approach', () => { + before('create test data', () => { + cy.createTempUser([ + permissions.bulkEditView.gui, + permissions.bulkEditEdit.gui, + permissions.inventoryAll.gui, + ]).then((userProperties) => { + user = userProperties; + + item.instanceId = InventoryInstances.createInstanceViaApi( + item.instanceName, + item.itemBarcode, + ); + cy.getHoldings({ limit: 1, query: `"instanceId"="${item.instanceId}"` }).then( + (holdings) => { + item.holdingsHRID = holdings[0].hrid; + FileManager.createFile(`cypress/fixtures/${holdingUUIDsFileName}`, holdings[0].id); + cy.updateHoldingRecord(holdings[0].id, { + ...holdings[0], + electronicAccess: [ + { + relationshipId: electronicAccessRelationshipId.RESOURCE, + uri: 'uri.com', + }, + ], + }); + }, + ); + cy.login(user.username, user.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + }); + }); + + after('delete test data', () => { + cy.getAdminToken(); + InventoryInstances.deleteInstanceAndHoldingRecordAndAllItemsViaApi(item.itemBarcode); + FileManager.deleteFile(`cypress/fixtures/${holdingUUIDsFileName}`); + FileManager.deleteFileFromDownloadsByMask( + matchedRecordsFileName, + changedRecordsFileName, + previewFileName, + ); + Users.deleteViaApi(user.userId); + }); + + it( + 'C422160 Verify Bulk Edit for Holding populated "URI" in electronic access (firebird)', + { tags: ['criticalPath', 'firebird'] }, + () => { + BulkEditSearchPane.checkHoldingsRadio(); + BulkEditSearchPane.selectRecordIdentifier('Holdings UUIDs'); + BulkEditSearchPane.uploadFile(holdingUUIDsFileName); + BulkEditSearchPane.checkForUploading(holdingUUIDsFileName); + BulkEditSearchPane.waitFileUploading(); + BulkEditActions.downloadMatchedResults(); + BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Electronic access'); + BulkEditSearchPane.verifyMatchedResults(item.holdingsHRID); + ExportFile.verifyFileIncludes(matchedRecordsFileName, [ + electronicAccessRelationshipName.RESOURCE, + ]); + BulkEditActions.openInAppStartBulkEditFrom(); + BulkEditActions.verifyRowIcons(); + BulkEditActions.verifyOptionsDropdown(); + BulkEditActions.isSelectActionAbsent(); + BulkEditActions.selectOption('URL Relationship'); + let possibleActions = ['Clear field', 'Find (full field search)', 'Replace with']; + BulkEditActions.verifyPossibleActions(possibleActions); + BulkEditActions.selectSecondAction('Clear field'); + BulkEditActions.addNewBulkEditFilterString(); + BulkEditActions.verifyNewBulkEditRow(); + BulkEditActions.verifyOptionAbsentInNewRow('URL Relationship'); + BulkEditActions.deleteRow(1); + BulkEditActions.findValue('URL Relationship'); + possibleActions = ['Replace with', 'Remove']; + BulkEditActions.verifyPossibleActions(possibleActions); + BulkEditActions.selectSecondAction('Remove'); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.selectType(electronicAccessRelationshipName.RESOURCE, 0, 0); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.selectSecondAction('Replace with'); + BulkEditActions.checkTypeNotExist(electronicAccessRelationshipName.RESOURCE, 0, 1); + BulkEditActions.selectType(electronicAccessRelationshipName.VERSION_OF_RESOURCE, 0, 1); + BulkEditSearchPane.isConfirmButtonDisabled(false); + BulkEditActions.selectType(electronicAccessRelationshipName.VERSION_OF_RESOURCE, 0, 0); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.selectAction('Replace with'); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.selectType(electronicAccessRelationshipName.VERSION_OF_RESOURCE, 0, 0); + BulkEditSearchPane.isConfirmButtonDisabled(false); + BulkEditActions.confirmChanges(); + BulkEditSearchPane.verifyInputLabel( + '1 records will be changed if the Commit changes button is clicked. You may choose Download preview to review all changes prior to saving.', + ); + BulkEditActions.verifyChangesInAreYouSureForm('Electronic access', [ + electronicAccessRelationshipName.VERSION_OF_RESOURCE, + ]); + BulkEditActions.downloadPreview(); + ExportFile.verifyFileIncludes(previewFileName, [ + electronicAccessRelationshipName.VERSION_OF_RESOURCE, + ]); + BulkEditActions.commitChanges(); + BulkEditSearchPane.waitFileUploading(); + BulkEditSearchPane.verifyChangesUnderColumns( + 'Electronic access', + electronicAccessRelationshipName.VERSION_OF_RESOURCE, + ); + BulkEditActions.openActions(); + BulkEditActions.downloadChangedCSV(); + ExportFile.verifyFileIncludes(changedRecordsFileName, [ + electronicAccessRelationshipName.VERSION_OF_RESOURCE, + ]); + + cy.visit(TopMenu.inventoryPath); + InventorySearchAndFilter.switchToHoldings(); + InventorySearchAndFilter.searchByParameter('Holdings HRID', item.holdingsHRID); + InventorySearchAndFilter.selectSearchResultItem(); + InventorySearchAndFilter.selectViewHoldings(); + HoldingsRecordView.verifyElectronicAccess( + electronicAccessRelationshipName.VERSION_OF_RESOURCE, + ); + }, + ); + }); +}); diff --git a/cypress/e2e/bulk-edit/permissions/bulk-edit-in-app-query-tab-items-permissions.cy.js b/cypress/e2e/bulk-edit/permissions/bulk-edit-in-app-query-tab-items-permissions.cy.js index c4da9d6d67..923b26635a 100644 --- a/cypress/e2e/bulk-edit/permissions/bulk-edit-in-app-query-tab-items-permissions.cy.js +++ b/cypress/e2e/bulk-edit/permissions/bulk-edit-in-app-query-tab-items-permissions.cy.js @@ -33,7 +33,7 @@ describe('bulk-edit', () => { }); it( - 'C413369 Verify Query tab permissions (In app items) (firebird)', + 'C376991 Verify Query tab permissions (In app items) (firebird)', { tags: ['criticalPath', 'firebird'] }, () => { BulkEditSearchPane.verifySetCriteriaPaneSpecificTabs('Identifier'); diff --git a/cypress/e2e/bulk-edit/query/bulk-edit-query-instances-holdings-items.cy.js b/cypress/e2e/bulk-edit/query/bulk-edit-query-instances-holdings-items.cy.js new file mode 100644 index 0000000000..3026ba8c1b --- /dev/null +++ b/cypress/e2e/bulk-edit/query/bulk-edit-query-instances-holdings-items.cy.js @@ -0,0 +1,139 @@ +import TopMenu from '../../../support/fragments/topMenu'; +import permissions from '../../../support/dictionary/permissions'; +import Users from '../../../support/fragments/users/users'; +import BulkEditSearchPane from '../../../support/fragments/bulk-edit/bulk-edit-search-pane'; +import UsersSearchPane from '../../../support/fragments/users/usersSearchPane'; +import UserEdit from '../../../support/fragments/users/userEdit'; +import UsersCard from '../../../support/fragments/users/usersCard'; +import QueryModal from '../../../support/fragments/bulk-edit/query-modal'; + +let firstUser; +let secondUser; + +describe('bulk-edit', () => { + describe('permissions', () => { + before('create test data', () => { + cy.createTempUser([ + permissions.bulkEditView.gui, + permissions.bulkEditEdit.gui, + permissions.uiInventoryViewInstances.gui, + permissions.uiUsersView.gui, + permissions.uiUsersPermissions.gui, + permissions.uiUserEdit.gui, + ]).then((userProperties) => { + firstUser = userProperties; + }); + + cy.createTempUser([ + permissions.bulkEditView.gui, + permissions.bulkEditEdit.gui, + permissions.uiInventoryViewCreateEditInstances.gui, + permissions.uiUsersView.gui, + permissions.uiUsersPermissions.gui, + permissions.uiUserEdit.gui, + ]).then((userProperties) => { + secondUser = userProperties; + }); + }); + + after('delete test data', () => { + cy.getAdminToken(); + Users.deleteViaApi(firstUser.userId); + Users.deleteViaApi(secondUser.userId); + }); + + it( + 'C423696 Verify Query tab permissions (In app Instances, Holdings, Items) (firebird)', + { tags: ['extendedPath', 'firebird'] }, + () => { + cy.login(firstUser.username, firstUser.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabs('Identifier'); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabsHidden('Query', 'Logs'); + + cy.visit(TopMenu.usersPath); + UsersSearchPane.searchByUsername(firstUser.username); + UsersSearchPane.openUser(firstUser.username); + // Add bulkEditQueryView permission and remove next three + UserEdit.addPermissions([ + permissions.bulkEditQueryView.gui, + permissions.uiUsersView.gui, + permissions.uiUsersPermissions.gui, + permissions.uiUserEdit.gui, + ]); + UserEdit.saveAndClose(); + UsersCard.verifyPermissions([ + permissions.bulkEditView.gui, + permissions.bulkEditEdit.gui, + permissions.uiInventoryViewInstances.gui, + permissions.bulkEditQueryView.gui, + ]); + + cy.login(firstUser.username, firstUser.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabs('Identifier', 'Query'); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabsHidden('Logs'); + BulkEditSearchPane.openQuerySearch(); + BulkEditSearchPane.isHoldingsRadioChecked(false); + BulkEditSearchPane.isInstancesRadioChecked(false); + BulkEditSearchPane.isItemsRadioChecked(false); + BulkEditSearchPane.verifyUsersRadioAbsent(); + BulkEditSearchPane.verifyInputLabel( + 'Select a record type and then click the Build query button.', + ); + QueryModal.buildQueryButtonDisabled(); + }, + ); + + it( + 'C423695 Verify Query tab permissions (In app Instances) (firebird)', + { tags: ['criticalPath', 'firebird'] }, + () => { + cy.login(secondUser.username, secondUser.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabs('Identifier'); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabsHidden('Query', 'Logs'); + + cy.visit(TopMenu.usersPath); + UsersSearchPane.searchByUsername(secondUser.username); + UsersSearchPane.openUser(secondUser.username); + // Add bulkEditQueryView permission and remove next three + UserEdit.addPermissions([ + permissions.bulkEditQueryView.gui, + permissions.uiUsersView.gui, + permissions.uiUsersPermissions.gui, + permissions.uiUserEdit.gui, + ]); + UserEdit.saveAndClose(); + UsersCard.verifyPermissions([ + permissions.bulkEditView.gui, + permissions.bulkEditEdit.gui, + permissions.uiInventoryViewCreateEditInstances.gui, + permissions.bulkEditQueryView.gui, + ]); + + cy.login(secondUser.username, secondUser.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabs('Identifier', 'Query'); + BulkEditSearchPane.verifySetCriteriaPaneSpecificTabsHidden('Logs'); + BulkEditSearchPane.openQuerySearch(); + BulkEditSearchPane.isHoldingsRadioChecked(false); + BulkEditSearchPane.isInstancesRadioChecked(false); + BulkEditSearchPane.isItemsRadioChecked(false); + BulkEditSearchPane.verifyUsersRadioAbsent(); + BulkEditSearchPane.verifyInputLabel( + 'Select a record type and then click the Build query button.', + ); + QueryModal.buildQueryButtonDisabled(); + }, + ); + }); +}); diff --git a/cypress/support/constants.js b/cypress/support/constants.js index 1a8a77d360..43154a67e2 100644 --- a/cypress/support/constants.js +++ b/cypress/support/constants.js @@ -717,3 +717,12 @@ export const patronGroupUuids = { FACULTY: '503a81cd-6c26-400f-b620-14c08943697c', UNDERGRAD: 'bdc2b6d4-5ceb-4a12-ab46-249b9a68473e', }; + +export const electronicAccessRelationshipId = { + RESOURCE: 'f5d0068e-6272-458e-8a81-b85e7b9a14aa', +}; + +export const electronicAccessRelationshipName = { + RESOURCE: 'Resource', + VERSION_OF_RESOURCE: 'Version of resource', +}; diff --git a/cypress/support/fragments/bulk-edit/bulk-edit-actions.js b/cypress/support/fragments/bulk-edit/bulk-edit-actions.js index 1ab82c17f4..e4767c9332 100644 --- a/cypress/support/fragments/bulk-edit/bulk-edit-actions.js +++ b/cypress/support/fragments/bulk-edit/bulk-edit-actions.js @@ -81,7 +81,9 @@ export default { }, selectAction(actionName, rowIndex = 0) { cy.do( - RepeatableFieldItem({ index: rowIndex }).find(bulkPageSelections.action).choose(actionName), + RepeatableFieldItem({ index: rowIndex }) + .find(Select({ dataTestID: 'select-actions-0' })) + .choose(actionName), ); }, selectSecondAction(actionName, rowIndex = 0) { @@ -513,7 +515,7 @@ export default { }, verifyItemAdminstrativeNoteActions(rowIndex = 0) { - const options = ['Add note', 'Remove all', 'Find', 'Change note type']; + const options = ['Add note', 'Remove all', 'Find (full field search)', 'Change note type']; cy.do([ RepeatableFieldItem({ index: rowIndex }) .find(bulkPageSelections.valueType) @@ -573,20 +575,25 @@ export default { ); }, - noteReplaceWith(noteType, oldNote, newNote, rowIndex = 0) { + findValue(type, rowIndex = 0) { cy.do([ - RepeatableFieldItem({ index: rowIndex }).find(bulkPageSelections.valueType).choose(noteType), - RepeatableFieldItem({ index: rowIndex }).find(bulkPageSelections.action).choose('Find'), + RepeatableFieldItem({ index: rowIndex }).find(bulkPageSelections.valueType).choose(type), + RepeatableFieldItem({ index: rowIndex }) + .find(bulkPageSelections.action) + .choose('Find (full field search)'), ]); + }, + + noteReplaceWith(noteType, oldNote, newNote, rowIndex = 0) { + this.findValue(noteType); this.fillInFirstTextArea(oldNote, rowIndex); this.selectSecondAction('Replace with', rowIndex); this.fillInSecondTextArea(newNote, rowIndex); }, noteRemove(noteType, note, rowIndex = 0) { + this.findValue(noteType, rowIndex); cy.do([ - RepeatableFieldItem({ index: rowIndex }).find(bulkPageSelections.valueType).choose(noteType), - RepeatableFieldItem({ index: rowIndex }).find(bulkPageSelections.action).choose('Find'), RepeatableFieldItem({ index: rowIndex }).find(TextArea()).fillIn(note), RepeatableFieldItem({ index: rowIndex }) .find(Select({ value: '' })) @@ -615,7 +622,7 @@ export default { 'Remove mark as staff only', 'Add note', 'Remove all', - 'Find', + 'Find (full field search)', 'Change note type', 'Duplicate to', ]; @@ -634,7 +641,7 @@ export default { 'Remove mark as staff only', 'Add note', 'Remove all', - 'Find', + 'Find (full field search)', 'Change note type', ]; cy.do([ @@ -998,4 +1005,18 @@ export default { Option({ value: 'SUPPRESS_FROM_DISCOVERY' }).exists(), ]); }, + + selectType(type, rowIndex = 1, whichSelect = 0) { + cy.get(`[class^="repeatableField"]:eq(${rowIndex}) #urlRelationship`) + .eq(whichSelect) + .select(type); + }, + + checkTypeNotExist(type, rowIndex = 1, whichSelect = 0) { + cy.get(`[class^="repeatableField"]:eq(${rowIndex}) #urlRelationship`) + .eq(whichSelect) + .then(($select) => { + expect($select.text()).to.not.contain(type); + }); + }, }; diff --git a/cypress/support/fragments/bulk-edit/bulk-edit-search-pane.js b/cypress/support/fragments/bulk-edit/bulk-edit-search-pane.js index d8d300c7db..e9028c1467 100644 --- a/cypress/support/fragments/bulk-edit/bulk-edit-search-pane.js +++ b/cypress/support/fragments/bulk-edit/bulk-edit-search-pane.js @@ -358,8 +358,8 @@ export default { }, verifyCsvViewPermission() { + this.verifyUsersRadioAbsent(); cy.expect([ - usersRadio.absent(), itemsRadio.absent(), holdingsRadio.absent(), fileButton.has({ disabled: true }), @@ -378,8 +378,8 @@ export default { }, verifyInAppViewPermission() { + this.verifyUsersRadioAbsent(); cy.expect([ - usersRadio.absent(), itemsRadio.absent(), holdingsRadio.absent(), fileButton.has({ disabled: true }), @@ -412,6 +412,10 @@ export default { cy.expect(HTML(name).exists()); }, + verifyUsersRadioAbsent() { + cy.expect(usersRadio.absent()); + }, + checkUsersRadio() { cy.do(usersRadio.click()); }, @@ -839,7 +843,8 @@ export default { verifyRecordTypesAccordionCollapsed() { this.recordTypesAccordionExpanded(false); - cy.expect([usersRadio.absent(), itemsRadio.absent(), holdingsRadio.absent()]); + this.verifyUsersRadioAbsent(); + cy.expect([itemsRadio.absent(), holdingsRadio.absent()]); }, verifyUserAccordionCollapsed() { @@ -1277,4 +1282,8 @@ export default { Checkbox({ disabled: false }).absent(), ]); }, + + verifyElectronicAccessElementByIndex(index, expectedText) { + cy.get('[class^="ElectronicAccess"]').find('td').eq(index).should('contain.text', expectedText); + }, }; diff --git a/cypress/support/fragments/bulk-edit/query-modal.js b/cypress/support/fragments/bulk-edit/query-modal.js index 07ed5d74cf..a0cdc3121c 100644 --- a/cypress/support/fragments/bulk-edit/query-modal.js +++ b/cypress/support/fragments/bulk-edit/query-modal.js @@ -15,6 +15,7 @@ import { } from '../../../../interactors'; const buildQueryModal = Modal('Build query'); +const buildQueryButton = Button('Build query'); const testQueryButton = Button('Test query'); const cancelButton = Button('Cancel'); const runQueryButton = Button('Run query'); @@ -26,6 +27,8 @@ const booleanValues = ['AND']; export const itemFieldValues = { instanceId: 'Instance ID', + itemStatus: 'Item status', + holdingsId: 'Holdings ID', }; export const usersFieldValues = { expirationDate: 'User expiration date', @@ -68,17 +71,19 @@ export const stringStoresUuidButMillionOperators = [ 'not in', 'is null/empty', ]; +export const enumOperators = ['Select operator', '==', '!=', 'in', 'not in', 'is null/empty']; export const booleanOperators = ['Select operator', '==', '!=', 'is null/empty']; export default { + exists() { + cy.expect(buildQueryModal.exists()); + }, verify(firstline = true) { - cy.expect([ - buildQueryModal.exists(), - testQueryButton.has({ disabled: true }), - cancelButton.has({ disabled: false }), - runQueryButton.has({ disabled: true }), - xButton.has({ disabled: false }), - ]); + this.exists(); + this.testQueryDisabled(); + this.cancelDisabled(false); + this.runQueryDisabled(); + this.xButttonDisabled(false); this.verifyModalContent(firstline); }, @@ -234,6 +239,10 @@ export default { cy.expect(runQueryButton.has({ disabled })); }, + xButttonDisabled(disabled = true) { + cy.expect(xButton.has({ disabled })); + }, + addNewRow(row = 0) { cy.do(RepeatableFieldItem({ index: row }).find(plusButton).click()); }, @@ -290,4 +299,8 @@ export default { verifyClosed() { cy.do(buildQueryModal.absent()); }, + + buildQueryButtonDisabled(disabled = true) { + cy.do(buildQueryButton.has({ disabled })); + }, }; diff --git a/cypress/support/fragments/inventory/holdingsRecordView.js b/cypress/support/fragments/inventory/holdingsRecordView.js index 29effdef84..275a57026f 100644 --- a/cypress/support/fragments/inventory/holdingsRecordView.js +++ b/cypress/support/fragments/inventory/holdingsRecordView.js @@ -270,4 +270,9 @@ export default { .exists(), ); }, + verifyElectronicAccessByElementIndex: (index, content) => { + cy.expect( + electronicAccessAccordion.find(MultiColumnListCell({ columnIndex: index, content })).exists(), + ); + }, };