diff --git a/cypress/e2e/inventory/instance/new-formatting-of-stat-codes-field-on-instance-create-edit-screen.cy.js b/cypress/e2e/inventory/instance/new-formatting-of-stat-codes-field-on-instance-create-edit-screen.cy.js new file mode 100644 index 0000000000..8cb1b9b30b --- /dev/null +++ b/cypress/e2e/inventory/instance/new-formatting-of-stat-codes-field-on-instance-create-edit-screen.cy.js @@ -0,0 +1,82 @@ +import { Permissions } from '../../../support/dictionary'; +import InstanceRecordEdit from '../../../support/fragments/inventory/instanceRecordEdit'; +import InstanceRecordView from '../../../support/fragments/inventory/instanceRecordView'; +import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances'; +import TopMenu from '../../../support/fragments/topMenu'; +import Users from '../../../support/fragments/users/users'; +import getRandomPostfix from '../../../support/utils/stringTools'; + +describe('Inventory', () => { + describe('Instance', () => { + const testData = { + instanceTitle: `AT_C400652_Instance_${getRandomPostfix()}`, + statisticalCode1: 'ARL (Collection stats): books - Book, print (books)', + statisticalCode2: 'ARL (Collection stats): ebooks - Books, electronic (ebooks)', + filterValue: 'ARL', + }; + + before('Create test user and login', () => { + cy.getAdminToken(); + cy.createTempUser([Permissions.inventoryAll.gui]).then((userProperties) => { + testData.user = userProperties; + + cy.login(testData.user.username, testData.user.password, { + path: TopMenu.inventoryPath, + waiter: InventoryInstances.waitContentLoading, + }); + }); + }); + + after('Delete test data', () => { + cy.getAdminToken().then(() => { + Users.deleteViaApi(testData.user.userId); + InventoryInstances.deleteInstanceByTitleViaApi(testData.instanceTitle); + }); + }); + + it( + 'C400652 Check the new formatting of Statistical codes field on Instance create/edit screen (folijet) (TaaS)', + { tags: ['extendedPath', 'folijet', 'C400652'] }, + () => { + // Step 1: Go to Inventory -> Actions -> New + const NewInstance = InventoryInstances.addNewInventory(); + + // Step 2: Click "Add statistical code" -> "Select code" dropdown appears + NewInstance.clickAddStatisticalCodeButton(); + + // Step 3: Open "Select code" dropdown -> "Filter options list" + all codes present + NewInstance.openStatisticalCodeDropdown(); + NewInstance.verifyStatisticalCodeDropdown(); + + // Step 4: Filter by value -> list updated accordingly + NewInstance.filterStatisticalCodeByName(testData.filterValue); + NewInstance.verifyStatisticalCodeListOptionsFilteredBy(testData.filterValue); + + // Step 5: Select a value -> shown in dropdown, no error + NewInstance.filterStatisticalCodeByName(testData.filterValue); + NewInstance.selectStatisticalCode(testData.statisticalCode1); + NewInstance.checkErrorMessageForStatisticalCode(false); + + // Steps 6-7: Fill required fields + NewInstance.fillRequiredValues(testData.instanceTitle); + + // Step 8: Save & close + NewInstance.clickSaveAndCloseButton(); + + // Step 9: Actions -> Edit instance + InstanceRecordView.edit(); + InstanceRecordEdit.waitLoading(); + + // Step 10: Repeat steps 3-5 on edit screen + NewInstance.clickAddStatisticalCodeButton(); + InstanceRecordEdit.openStatisticalCodeDropdown(1); + InstanceRecordEdit.verifyStatisticalCodeDropdown(); + InstanceRecordEdit.filterStatisticalCodeByName(testData.filterValue); + InstanceRecordEdit.verifyStatisticalCodeListOptionsFilteredBy(testData.filterValue); + + InstanceRecordEdit.chooseStatisticalCode(testData.statisticalCode2); + InstanceRecordEdit.checkErrorMessageForStatisticalCode(false); + }, + ); + }); +}); diff --git a/cypress/support/fragments/inventory/instanceRecordEdit.js b/cypress/support/fragments/inventory/instanceRecordEdit.js index 18d6fbd30b..6f492dfe65 100644 --- a/cypress/support/fragments/inventory/instanceRecordEdit.js +++ b/cypress/support/fragments/inventory/instanceRecordEdit.js @@ -38,6 +38,8 @@ const previoslyHeldCheckbox = Checkbox({ name: 'previouslyHeld' }); const setForDeletionChecbox = Checkbox({ name: 'deleted' }); const instanceStatusTerm = Select('Instance status term'); const addStatisticalCodeButton = Button('Add statistical code'); +const statisticalCodeFieldSet = rootSection.find(FieldSet('Statistical code')); +const statisticalCodeSelectionList = SelectionList(); const addNatureOfContentButton = Button('Add nature of content'); const addFormatsButton = Button('Add format'); const addParentInstanceButton = Button('Add parent instance'); @@ -84,6 +86,35 @@ export default { addFormats, clickAddStatisticalCodeButton, chooseStatisticalCode, + openStatisticalCodeDropdown(index = 0) { + cy.do(Button({ name: `statisticalCodeIds[${index}]` }).click()); + }, + verifyStatisticalCodeDropdown() { + cy.expect(statisticalCodeSelectionList.has({ placeholder: 'Filter options list' })); + cy.then(() => statisticalCodeSelectionList.optionCount()).then((count) => { + expect(count).to.greaterThan(0); + }); + }, + filterStatisticalCodeByName(name) { + cy.do([statisticalCodeSelectionList.filter(name)]); + }, + verifyStatisticalCodeListOptionsFilteredBy(name) { + cy.get('[class^=optionSegment-]').each(($option) => { + cy.wrap($option).invoke('text').should('include', name); + }); + }, + checkErrorMessageForStatisticalCode(isPresented = true) { + if (isPresented) { + cy.expect(statisticalCodeFieldSet.has({ error: 'Please select to continue' })); + } else { + cy.expect( + FieldSet({ + buttonIds: [including('stripes-selection')], + error: 'Please select to continue', + }).absent(), + ); + } + }, dateTypePlaceholderOption, close: () => cy.do(closeButton.click()), waitLoading: () => { diff --git a/cypress/support/fragments/inventory/inventoryNewInstance.js b/cypress/support/fragments/inventory/inventoryNewInstance.js index 925eecb81d..7de67b8575 100644 --- a/cypress/support/fragments/inventory/inventoryNewInstance.js +++ b/cypress/support/fragments/inventory/inventoryNewInstance.js @@ -27,6 +27,8 @@ const descriptiveDataSection = rootSection.find(Accordion('Descriptive data')); const cancelButton = rootSection.find(Button('Cancel')); const saveAndCloseButton = rootSection.find(Button('Save & close')); const selectStatisticalCodeButton = Button({ name: 'statisticalCodeIds[0]' }); +const statisticalCodeFieldSet = rootSection.find(FieldSet('Statistical code')); +const statisticalCodeSelectionList = SelectionList(); const deafultResouceType = 'text'; @@ -271,10 +273,30 @@ export default { cy.do(Button('Add statistical code').click()); cy.expect(selectStatisticalCodeButton.exists()); }, + openStatisticalCodeDropdown() { + cy.do([statisticalCodeFieldSet.find(Selection()).find(Button()).click()]); + }, + verifyStatisticalCodeDropdown() { + cy.expect(statisticalCodeSelectionList.has({ placeholder: 'Filter options list' })); + cy.then(() => statisticalCodeSelectionList.optionCount()).then((count) => { + expect(count).to.greaterThan(0); + }); + }, + filterStatisticalCodeByName(name) { + cy.do([statisticalCodeSelectionList.filter(name)]); + }, + verifyStatisticalCodeListOptionsFilteredBy(name) { + cy.get('[class^=optionSegment-]').each(($option) => { + cy.wrap($option).invoke('text').should('include', name); + }); + }, chooseStatisticalCode(code) { cy.do(selectStatisticalCodeButton.click()); cy.do(SelectionList().select(code)); }, + selectStatisticalCode(code) { + cy.do(SelectionList().select(code)); + }, clickCancelButton() { cy.do(cancelButton.click()); cy.expect(rootSection.absent());