diff --git a/cypress/e2e/bulk-edit/csv/bulk-edit-csv-user-barcodes-no-matches-preview.cy.js b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-user-barcodes-no-matches-preview.cy.js new file mode 100644 index 0000000000..5c41272e45 --- /dev/null +++ b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-user-barcodes-no-matches-preview.cy.js @@ -0,0 +1,64 @@ +import permissions from '../../../support/dictionary/permissions'; +import FileManager from '../../../support/utils/fileManager'; +import getRandomPostfix from '../../../support/utils/stringTools'; +import BulkEditSearchPane from '../../../support/fragments/bulk-edit/bulk-edit-search-pane'; +import Users from '../../../support/fragments/users/users'; +import BulkEditActions from '../../../support/fragments/bulk-edit/bulk-edit-actions'; +import TopMenu from '../../../support/fragments/topMenu'; + +let user; +const invalidUserBarcodesFileName = `invalidUserBarcodes_${getRandomPostfix()}.csv`; + +describe( + 'bulk-edit', + { + retries: { + runMode: 1, + }, + }, + () => { + describe('csv approach', () => { + beforeEach('create test data', () => { + cy.createTempUser([ + permissions.bulkEditCsvView.gui, + permissions.bulkEditCsvEdit.gui, + permissions.uiUsersView.gui, + ]).then((userProperties) => { + user = userProperties; + + cy.login(user.username, user.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + + FileManager.createFile( + `cypress/fixtures/${invalidUserBarcodesFileName}`, + getRandomPostfix(), + ); + }); + }); + + afterEach('delete test data', () => { + cy.getAdminToken(); + Users.deleteViaApi(user.userId); + FileManager.deleteFile(`cypress/fixtures/${invalidUserBarcodesFileName}`); + }); + + it( + 'C360556 Populating preview of matched records in case no matches (firebird)', + { tags: ['smoke', 'firebird', 'shiftLeft', 'C360556'] }, + () => { + BulkEditSearchPane.checkUsersRadio(); + BulkEditSearchPane.selectRecordIdentifier('User Barcodes'); + BulkEditSearchPane.uploadFile(invalidUserBarcodesFileName); + BulkEditSearchPane.waitFileUploading(); + BulkEditSearchPane.matchedAccordionIsAbsent(); + BulkEditSearchPane.verifyErrorLabel(invalidUserBarcodesFileName, 0, 1); + + BulkEditActions.openActions(); + BulkEditActions.verifyUsersActionDropdownItemsInCaseOfError(); + }, + ); + }); + }, +); diff --git a/cypress/e2e/bulk-edit/csv/bulk-edit-csv-user-barcodes-preview.cy.js b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-user-barcodes-preview.cy.js index 1da2e950dc..eec426cba1 100644 --- a/cypress/e2e/bulk-edit/csv/bulk-edit-csv-user-barcodes-preview.cy.js +++ b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-user-barcodes-preview.cy.js @@ -3,82 +3,66 @@ import FileManager from '../../../support/utils/fileManager'; import getRandomPostfix from '../../../support/utils/stringTools'; import BulkEditSearchPane from '../../../support/fragments/bulk-edit/bulk-edit-search-pane'; import Users from '../../../support/fragments/users/users'; -import BulkEditActions from '../../../support/fragments/bulk-edit/bulk-edit-actions'; -import TopMenuNavigation from '../../../support/fragments/topMenuNavigation'; -import { APPLICATION_NAMES } from '../../../support/constants'; +import TopMenu from '../../../support/fragments/topMenu'; let user; const userBarcodesFileName = `userBarcodes_${getRandomPostfix()}.csv`; -const invalidUserBarcodesFileName = `invalidUserBarcodes_${getRandomPostfix()}.csv`; -describe('bulk-edit', () => { - describe('csv approach', () => { - before('create test data', () => { - cy.createTempUser([ - permissions.bulkEditCsvView.gui, - permissions.bulkEditCsvEdit.gui, - permissions.uiUsersView.gui, - ]).then((userProperties) => { - user = userProperties; +describe( + 'bulk-edit', + { + retries: { + runMode: 1, + }, + }, + () => { + describe('csv approach', () => { + beforeEach('create test data', () => { + cy.clearLocalStorage(); + cy.createTempUser([ + permissions.bulkEditCsvView.gui, + permissions.bulkEditCsvEdit.gui, + permissions.uiUsersView.gui, + ]).then((userProperties) => { + user = userProperties; - cy.login(user.username, user.password); - TopMenuNavigation.navigateToApp(APPLICATION_NAMES.BULK_EDIT); - BulkEditSearchPane.waitLoading(); + cy.login(user.username, user.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); - FileManager.createFile(`cypress/fixtures/${userBarcodesFileName}`, user.barcode); - FileManager.createFile( - `cypress/fixtures/${invalidUserBarcodesFileName}`, - getRandomPostfix(), - ); + FileManager.createFile(`cypress/fixtures/${userBarcodesFileName}`, user.barcode); + }); }); - }); - - beforeEach('reload bulk-edit page', () => { - TopMenuNavigation.navigateToApp(APPLICATION_NAMES.BULK_EDIT); - BulkEditSearchPane.checkUsersRadio(); - BulkEditSearchPane.selectRecordIdentifier('User Barcodes'); - }); - - after('delete test data', () => { - cy.getAdminToken(); - Users.deleteViaApi(user.userId); - FileManager.deleteFile(`cypress/fixtures/${userBarcodesFileName}`); - FileManager.deleteFile(`cypress/fixtures/${invalidUserBarcodesFileName}`); - }); - - it( - 'C347872 Populating preview of matched records (firebird)', - { tags: ['smoke', 'firebird', 'shiftLeft', 'C347872'] }, - () => { - BulkEditSearchPane.uploadFile(userBarcodesFileName); - BulkEditSearchPane.waitFileUploading(); - BulkEditSearchPane.verifyUserBarcodesResultAccordion(); - BulkEditSearchPane.verifyMatchedResults(user.barcode); - BulkEditSearchPane.verifyActionsAfterConductedCSVUploading(false); - BulkEditSearchPane.verifyUsersActionShowColumns(); + afterEach('delete test data', () => { + cy.getAdminToken(); + Users.deleteViaApi(user.userId); + FileManager.deleteFile(`cypress/fixtures/${userBarcodesFileName}`); + }); - BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Last name'); - BulkEditSearchPane.changeShowColumnCheckbox('Last name'); - BulkEditSearchPane.verifyResultColumnTitlesDoNotInclude('Last name'); + it( + 'C347872 Populating preview of matched records (firebird)', + { tags: ['smoke', 'firebird', 'shiftLeft', 'C347872'] }, + () => { + BulkEditSearchPane.checkUsersRadio(); + BulkEditSearchPane.selectRecordIdentifier('User Barcodes'); + BulkEditSearchPane.uploadFile(userBarcodesFileName); + BulkEditSearchPane.waitFileUploading(); + BulkEditSearchPane.verifyUserBarcodesResultAccordion(); + BulkEditSearchPane.verifyMatchedResults(user.barcode); - BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Email'); - BulkEditSearchPane.verifyResultColumnTitles('Email'); - }, - ); + BulkEditSearchPane.verifyActionsAfterConductedCSVUploading(false); + BulkEditSearchPane.verifyUsersActionShowColumns(); - it( - 'C360556 Populating preview of matched records in case no matches (firebird)', - { tags: ['smoke', 'firebird', 'shiftLeft', 'C360556'] }, - () => { - BulkEditSearchPane.uploadFile(invalidUserBarcodesFileName); - BulkEditSearchPane.waitFileUploading(); - BulkEditSearchPane.matchedAccordionIsAbsent(); - BulkEditSearchPane.verifyErrorLabel(invalidUserBarcodesFileName, 0, 1); + BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Last name'); + BulkEditSearchPane.changeShowColumnCheckbox('Last name'); + BulkEditSearchPane.verifyResultColumnTitlesDoNotInclude('Last name'); - BulkEditActions.openActions(); - BulkEditActions.verifyUsersActionDropdownItemsInCaseOfError(); - }, - ); - }); -}); + BulkEditSearchPane.changeShowColumnCheckboxIfNotYet('Email'); + BulkEditSearchPane.verifyResultColumnTitles('Email'); + }, + ); + }); + }, +); diff --git a/cypress/e2e/finance/fiscalYears/rollover-fiscal-year.cy.js b/cypress/e2e/finance/fiscalYears/rollover-fiscal-year.cy.js index dc3afb5f03..07ce0b887c 100644 --- a/cypress/e2e/finance/fiscalYears/rollover-fiscal-year.cy.js +++ b/cypress/e2e/finance/fiscalYears/rollover-fiscal-year.cy.js @@ -267,7 +267,9 @@ describe('ui-finance: Fiscal Year Rollover', () => { 'Encumbrance', `${firstFund.name} (${firstFund.code})`, ); - cy.visit(TopMenu.fundPath); + Funds.closeTransactionDetails(); + Funds.closeMenu(); + Funds.closeMenu(); FinanceHelp.searchByName(secondFund.name); Funds.selectFund(secondFund.name); Funds.selectPlannedBudgetDetails(); diff --git a/cypress/e2e/inventory/classification-browse/browse-classification-has-same-value-different-classification-types-using-classification-all-option.cy.js b/cypress/e2e/inventory/classification-browse/browse-classification-has-same-value-different-classification-types-using-classification-all-option.cy.js new file mode 100644 index 0000000000..20a9fecc9f --- /dev/null +++ b/cypress/e2e/inventory/classification-browse/browse-classification-has-same-value-different-classification-types-using-classification-all-option.cy.js @@ -0,0 +1,205 @@ +import { Permissions } from '../../../support/dictionary'; +import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter'; +import Users from '../../../support/fragments/users/users'; +import TopMenu from '../../../support/fragments/topMenu'; +import ClassificationIdentifierTypes from '../../../support/fragments/settings/inventory/instances/classificationIdentifierTypes'; +import getRandomPostfix from '../../../support/utils/stringTools'; +import InventoryInstance from '../../../support/fragments/inventory/inventoryInstance'; +import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances'; +import { CLASSIFICATION_IDENTIFIER_TYPES } from '../../../support/constants'; +import ClassificationBrowse, { + defaultClassificationBrowseIdsAlgorithms, +} from '../../../support/fragments/settings/inventory/instances/classificationBrowse'; +import BrowseClassifications from '../../../support/fragments/inventory/search/browseClassifications'; + +describe('Inventory', () => { + describe('Instance classification browse', () => { + const testData = { + instances: [ + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 1 - Additional Dewey', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.ADDITIONAL_DEWEY, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 2 - Canadian Classification', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.CANADIAN_CLASSIFICATION, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 3 - Dewey', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.DEWEY, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 4 - GDC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.GDC, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 5 - LC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.LC, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 6 - LC (local)', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.LC_LOCAL, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 7 - National Agricultural Library', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.NATIONAL_AGRICULTURAL_LIBRARY, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 8 - NLM', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.NLM, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 9 - SUDOC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.SUDOC, + }, + { + instanceTitle: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 10 - UDC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.UDC, + }, + ], + classificationOption: 'Classification (all)', + classificationValue: 'test004. HD', + querySearchOption: 'Query search', + instanceTitleWithLocalClassification: + 'C468158 Browse by Class-on (different inst-s with same class-on value) Instance 11 - Local', + classificationBrowseId: defaultClassificationBrowseIdsAlgorithms[0].id, + classificationBrowseAlgorithm: defaultClassificationBrowseIdsAlgorithms[0].algorithm, + }; + const createdRecordIDs = []; + const localClassificationIdentifierType = { + name: `C468158 Classification identifier type ${getRandomPostfix()}`, + source: 'local', + }; + let classificationIdentifierTypeId; + let user; + + before('Create user, test data', () => { + cy.getAdminToken(); + // make sure there are no duplicate records in the system + InventoryInstances.deleteInstanceByTitleViaApi('C468158*'); + + cy.createTempUser([Permissions.uiInventoryViewInstances.gui]).then( + (createdUserProperties) => { + user = createdUserProperties; + + ClassificationIdentifierTypes.createViaApi(localClassificationIdentifierType).then( + (response) => { + classificationIdentifierTypeId = response.body.id; + }, + ); + + // remove all identifier types from target classification browse, if any + ClassificationBrowse.getIdentifierTypesForCertainBrowseAPI( + testData.classificationBrowseId, + ).then((types) => { + testData.originalTypes = types; + }); + ClassificationBrowse.updateIdentifierTypesAPI( + testData.classificationBrowseId, + testData.classificationBrowseAlgorithm, + [], + ); + + cy.getInstanceTypes({ limit: 1 }) + .then((instanceTypes) => { + testData.instanceTypeId = instanceTypes[0].id; + }) + .then(() => { + testData.instances.forEach((instanceValues) => { + InventoryInstances.createFolioInstanceViaApi({ + instance: { + instanceTypeId: testData.instanceTypeId, + title: instanceValues.instanceTitle, + classifications: [ + { + classificationNumber: testData.classificationValue, + classificationTypeId: instanceValues.classificationType, + }, + ], + }, + }).then((instance) => { + createdRecordIDs.push(instance.instanceId); + }); + }); + InventoryInstances.createFolioInstanceViaApi({ + instance: { + instanceTypeId: testData.instanceTypeId, + title: testData.instanceTitleWithLocalClassification, + classifications: [ + { + classificationNumber: testData.classificationValue, + classificationTypeId: classificationIdentifierTypeId, + }, + ], + }, + }).then((instance) => { + createdRecordIDs.push(instance.instanceId); + }); + }); + + cy.login(user.username, user.password, { + path: TopMenu.inventoryPath, + waiter: InventoryInstances.waitContentLoading, + }); + InventorySearchAndFilter.switchToBrowseTab(); + InventorySearchAndFilter.checkBrowseOptionDropdownInFocus(); + InventorySearchAndFilter.verifyCallNumberBrowsePane(); + }, + ); + }); + + after('Delete user, test data', () => { + cy.getAdminToken(); + // restore the original identifier types for target classification browse + ClassificationBrowse.updateIdentifierTypesAPI( + testData.classificationBrowseId, + testData.classificationBrowseAlgorithm, + testData.originalTypes, + ); + ClassificationIdentifierTypes.deleteViaApi(classificationIdentifierTypeId); + createdRecordIDs.forEach((id) => { + InventoryInstance.deleteInstanceViaApi(id); + }); + Users.deleteViaApi(user.userId); + }); + + it( + 'C468158 Browse for classification which has the same value but different classification types using "Classification (all)" browse option (spitfire)', + { tags: ['criticalPath', 'spitfire', 'C468158'] }, + () => { + InventorySearchAndFilter.selectBrowseOption(testData.classificationOption); + InventorySearchAndFilter.browseSearch(testData.classificationValue); + BrowseClassifications.verifySearchResultsTable(); + InventorySearchAndFilter.verifySearchResultIncludingValue(testData.classificationValue); + for (let i = 5; i < 16; i++) { + BrowseClassifications.verifyRowValueIsBold(i, testData.classificationValue); + BrowseClassifications.verifyResultAndItsRow(i, testData.classificationValue); + BrowseClassifications.verifyNumberOfTitlesInRow(i, '1'); + } + + BrowseClassifications.selectFoundValueByRow(5, testData.classificationValue); + InventorySearchAndFilter.verifySearchOptionAndQuery( + testData.querySearchOption, + `classifications.classificationNumber=="${testData.classificationValue}"`, + ); + testData.instances.forEach((instance) => { + InventorySearchAndFilter.verifyInstanceDisplayed(instance.instanceTitle); + }); + InventorySearchAndFilter.verifyInstanceDisplayed( + testData.instanceTitleWithLocalClassification, + ); + InventoryInstances.checkSearchResultCount(/11 records found/); + }, + ); + }); +}); diff --git a/cypress/e2e/inventory/classification-browse/browse-classification-has-same-value-different-classification-types-using-dewey-decimal-classification-option.cy.js b/cypress/e2e/inventory/classification-browse/browse-classification-has-same-value-different-classification-types-using-dewey-decimal-classification-option.cy.js new file mode 100644 index 0000000000..8831224dfe --- /dev/null +++ b/cypress/e2e/inventory/classification-browse/browse-classification-has-same-value-different-classification-types-using-dewey-decimal-classification-option.cy.js @@ -0,0 +1,197 @@ +import { Permissions } from '../../../support/dictionary'; +import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter'; +import Users from '../../../support/fragments/users/users'; +import TopMenu from '../../../support/fragments/topMenu'; +import ClassificationIdentifierTypes from '../../../support/fragments/settings/inventory/instances/classificationIdentifierTypes'; +import getRandomPostfix from '../../../support/utils/stringTools'; +import InventoryInstance from '../../../support/fragments/inventory/inventoryInstance'; +import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances'; +import { CLASSIFICATION_IDENTIFIER_TYPES } from '../../../support/constants'; +import ClassificationBrowse, { + defaultClassificationBrowseIdsAlgorithms, +} from '../../../support/fragments/settings/inventory/instances/classificationBrowse'; +import BrowseClassifications from '../../../support/fragments/inventory/search/browseClassifications'; + +describe('Inventory', () => { + describe('Instance classification browse', () => { + const testData = { + instances: [ + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 1 - Additional Dewey', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.ADDITIONAL_DEWEY, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 2 - Canadian Classification', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.CANADIAN_CLASSIFICATION, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 3 - Dewey', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.DEWEY, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 4 - GDC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.GDC, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 5 - LC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.LC, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 6 - LC (local)', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.LC_LOCAL, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 7 - National Agricultural Library', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.NATIONAL_AGRICULTURAL_LIBRARY, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 8 - NLM', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.NLM, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 9 - SUDOC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.SUDOC, + }, + { + instanceTitle: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 10 - UDC', + classificationType: CLASSIFICATION_IDENTIFIER_TYPES.UDC, + }, + ], + classificationOption: 'Dewey Decimal classification', + classificationValue: 'test004. HD', + querySearchOption: 'Query search', + instanceTitleWithLocalClassification: + 'C468159 Browse by Class-on (different inst-s with same class-on value) Instance 11 - Local', + classificationBrowseId: defaultClassificationBrowseIdsAlgorithms[1].id, + classificationBrowseAlgorithm: defaultClassificationBrowseIdsAlgorithms[1].algorithm, + }; + const createdRecordIDs = []; + const localClassificationIdentifierType = { + name: `C468159 Classification identifier type ${getRandomPostfix()}`, + source: 'local', + }; + let classificationIdentifierTypeId; + let user; + + before('Create user, test data', () => { + cy.getAdminToken(); + // make sure there are no duplicate records in the system + InventoryInstances.deleteInstanceByTitleViaApi('C468159*'); + + cy.createTempUser([Permissions.uiInventoryViewInstances.gui]).then( + (createdUserProperties) => { + user = createdUserProperties; + + ClassificationIdentifierTypes.createViaApi(localClassificationIdentifierType).then( + (response) => { + classificationIdentifierTypeId = response.body.id; + }, + ); + + ClassificationBrowse.getIdentifierTypesForCertainBrowseAPI( + testData.classificationBrowseId, + ).then((types) => { + testData.originalTypes = types; + }); + ClassificationBrowse.updateIdentifierTypesAPI( + testData.classificationBrowseId, + testData.classificationBrowseAlgorithm, + [CLASSIFICATION_IDENTIFIER_TYPES.DEWEY], + ); + + cy.getInstanceTypes({ limit: 1 }) + .then((instanceTypes) => { + testData.instanceTypeId = instanceTypes[0].id; + }) + .then(() => { + testData.instances.forEach((instanceValues) => { + InventoryInstances.createFolioInstanceViaApi({ + instance: { + instanceTypeId: testData.instanceTypeId, + title: instanceValues.instanceTitle, + classifications: [ + { + classificationNumber: testData.classificationValue, + classificationTypeId: instanceValues.classificationType, + }, + ], + }, + }).then((instance) => { + createdRecordIDs.push(instance.instanceId); + }); + }); + InventoryInstances.createFolioInstanceViaApi({ + instance: { + instanceTypeId: testData.instanceTypeId, + title: testData.instanceTitleWithLocalClassification, + classifications: [ + { + classificationNumber: testData.classificationValue, + classificationTypeId: classificationIdentifierTypeId, + }, + ], + }, + }).then((instance) => { + createdRecordIDs.push(instance.instanceId); + }); + }); + + cy.login(user.username, user.password, { + path: TopMenu.inventoryPath, + waiter: InventoryInstances.waitContentLoading, + }); + InventorySearchAndFilter.switchToBrowseTab(); + InventorySearchAndFilter.checkBrowseOptionDropdownInFocus(); + InventorySearchAndFilter.verifyCallNumberBrowsePane(); + }, + ); + }); + + after('Delete user, test data', () => { + cy.getAdminToken(); + // restore the original identifier types for target classification browse + ClassificationBrowse.updateIdentifierTypesAPI( + testData.classificationBrowseId, + testData.classificationBrowseAlgorithm, + testData.originalTypes, + ); + ClassificationIdentifierTypes.deleteViaApi(classificationIdentifierTypeId); + createdRecordIDs.forEach((id) => { + InventoryInstance.deleteInstanceViaApi(id); + }); + Users.deleteViaApi(user.userId); + }); + + it( + 'C468159 Browse for classification which has the same value but different classification types using "Dewey Decimal classification" browse option when only "Dewey" classification type is selected in Settings (spitfire)', + { tags: ['criticalPath', 'spitfire', 'C468159'] }, + () => { + InventorySearchAndFilter.selectBrowseOptionFromClassificationGroup( + testData.classificationOption, + ); + InventorySearchAndFilter.browseSearch(testData.classificationValue); + BrowseClassifications.verifySearchResultsTable(); + BrowseClassifications.verifyRowValueIsBold(5, testData.classificationValue); + BrowseClassifications.verifyNumberOfTitlesInRow(5, '1'); + + BrowseClassifications.selectFoundValueByRow(5, testData.classificationValue); + InventorySearchAndFilter.verifySearchOptionAndQuery( + testData.querySearchOption, + `classifications.classificationNumber=="${testData.classificationValue}"`, + ); + InventorySearchAndFilter.verifyInstanceDisplayed(testData.instances[2].instanceTitle); + InventoryInstances.checkSearchResultCount(/1 record found/); + }, + ); + }); +}); diff --git a/cypress/e2e/inventory/search-in-inventory/browse-and-search-capabilities-are-separated.cy.js b/cypress/e2e/inventory/search-in-inventory/browse-and-search-capabilities-are-separated.cy.js index 382cb223dd..fceb7ed230 100644 --- a/cypress/e2e/inventory/search-in-inventory/browse-and-search-capabilities-are-separated.cy.js +++ b/cypress/e2e/inventory/search-in-inventory/browse-and-search-capabilities-are-separated.cy.js @@ -41,7 +41,7 @@ describe('Inventory', () => { 'C368482 Browse and Search capabilities are separated\n (spitfire) (TaaS)', { tags: ['criticalPath', 'spitfire', 'C368482'] }, () => { - cy.reload(); + cy.wait(3000); InventorySearchAndFilter.verifySearchAndFilterPane(); InventoryInstances.verifyInstanceSearchOptions(); InventorySearchAndFilter.switchToBrowseTab(); diff --git a/cypress/e2e/invoices/invoices-create-credit-invoice.cy.js b/cypress/e2e/invoices/invoices-create-credit-invoice.cy.js index 51261deb8f..e14b2d5662 100644 --- a/cypress/e2e/invoices/invoices-create-credit-invoice.cy.js +++ b/cypress/e2e/invoices/invoices-create-credit-invoice.cy.js @@ -49,6 +49,7 @@ describe('Invoices', () => { Invoices.createInvoiceLine(invoiceLine); Invoices.addFundDistributionToLine(invoiceLine, fund); Approvals.setApprovePayValue(false); + cy.wait(4000); Invoices.approveInvoice(); // check transactions after approve TopMenuNavigation.openAppFromDropdown('Finance'); diff --git a/cypress/e2e/marc/marc-authority/reporting-marc-authority/marc-authority-reporting-export-manager.cy.js b/cypress/e2e/marc/marc-authority/reporting-marc-authority/marc-authority-reporting-export-manager.cy.js index a1ec0a1758..cc32356365 100644 --- a/cypress/e2e/marc/marc-authority/reporting-marc-authority/marc-authority-reporting-export-manager.cy.js +++ b/cypress/e2e/marc/marc-authority/reporting-marc-authority/marc-authority-reporting-export-manager.cy.js @@ -59,6 +59,10 @@ describe('MARC', () => { const createdRecordIDs = []; before('Creating user and uploading files', () => { + cy.getAdminToken(); + // make sure there are no duplicate authority records in the system + MarcAuthorities.deleteMarcAuthorityByTitleViaAPI('C357996'); + cy.createTempUser([ Permissions.uiMarcAuthoritiesAuthorityRecordView.gui, Permissions.uiMarcAuthoritiesAuthorityRecordEdit.gui, diff --git a/cypress/e2e/marc/marc-bibliographic/create-new-marc-bib/manual-linking/add-non-controllable-subfield-to-linked-field-when-creating-marcBib.cy.js b/cypress/e2e/marc/marc-bibliographic/create-new-marc-bib/manual-linking/add-non-controllable-subfield-to-linked-field-when-creating-marcBib.cy.js index 135890716d..3f01e20203 100644 --- a/cypress/e2e/marc/marc-bibliographic/create-new-marc-bib/manual-linking/add-non-controllable-subfield-to-linked-field-when-creating-marcBib.cy.js +++ b/cypress/e2e/marc/marc-bibliographic/create-new-marc-bib/manual-linking/add-non-controllable-subfield-to-linked-field-when-creating-marcBib.cy.js @@ -60,7 +60,7 @@ describe('MARC', () => { boxFourth: '$a C380747 Edinburgh tracts in mathematics and mathematical physics $l english', boxFourthUpdate: - '$a C380747 Edinburgh tracts in mathematics and mathematical physics $l english $v no. 19. $z England', + '$a C380747 Edinburgh tracts in mathematics and mathematical physics $l english', boxFifth: '', boxFifthUpdate: '', boxFifthAfterSave: '', diff --git a/cypress/e2e/marc/marc-bibliographic/edit-marc-bib/cannot-save-marcBib-record-without-value-245.cy.js b/cypress/e2e/marc/marc-bibliographic/edit-marc-bib/cannot-save-marcBib-record-without-value-245.cy.js new file mode 100644 index 0000000000..896d19b433 --- /dev/null +++ b/cypress/e2e/marc/marc-bibliographic/edit-marc-bib/cannot-save-marcBib-record-without-value-245.cy.js @@ -0,0 +1,83 @@ +import { DEFAULT_JOB_PROFILE_NAMES } from '../../../../support/constants'; +import Permissions from '../../../../support/dictionary/permissions'; +import DataImport from '../../../../support/fragments/data_import/dataImport'; +import InventoryInstance from '../../../../support/fragments/inventory/inventoryInstance'; +import InventoryInstances from '../../../../support/fragments/inventory/inventoryInstances'; +import QuickMarcEditor from '../../../../support/fragments/quickMarcEditor'; +import TopMenu from '../../../../support/fragments/topMenu'; +import Users from '../../../../support/fragments/users/users'; +import getRandomPostfix from '../../../../support/utils/stringTools'; + +describe('MARC', () => { + describe('MARC Bibliographic', () => { + describe('Edit MARC bib', () => { + const testData = { + tag245: '245', + tag245Content: '$a', + error245Required: 'Field 245 is required.', + }; + const marcFile = { + marc: 'marcBibFileForC503057.mrc', + fileName: `testMarcFileC503057.${getRandomPostfix()}.mrc`, + jobProfileToRun: DEFAULT_JOB_PROFILE_NAMES.CREATE_INSTANCE_AND_SRS, + propertyName: 'instance', + }; + let instanceId; + + before('Create test data', () => { + cy.getAdminToken(); + cy.createTempUser([Permissions.moduleDataImportEnabled.gui]).then((userProperties) => { + testData.preconditionUserId = userProperties.userId; + + cy.getUserToken(userProperties.username, userProperties.password); + DataImport.uploadFileViaApi( + marcFile.marc, + marcFile.fileName, + marcFile.jobProfileToRun, + ).then((response) => { + response.forEach((record) => { + instanceId = record[marcFile.propertyName].id; + }); + }); + }); + + cy.getAdminToken(); + cy.createTempUser([ + Permissions.inventoryAll.gui, + Permissions.uiQuickMarcQuickMarcBibliographicEditorAll.gui, + ]).then((createdUserProperties) => { + testData.userProperties = createdUserProperties; + + cy.login(createdUserProperties.username, createdUserProperties.password, { + path: TopMenu.inventoryPath, + waiter: InventoryInstances.waitContentLoading, + }); + }); + }); + + after('Delete test data', () => { + cy.getAdminToken(); + Users.deleteViaApi(testData.preconditionUserId); + Users.deleteViaApi(testData.userProperties.userId); + InventoryInstance.deleteInstanceViaApi(instanceId); + }); + + it( + 'C503057 Cannot save "MARC bibliographic" record without a value in "245" field (spitfire)', + { tags: ['smoke', 'spitfire', 'C503057'] }, + () => { + InventoryInstances.searchByTitle(instanceId); + InventoryInstances.selectInstance(); + InventoryInstance.editMarcBibliographicRecord(); + QuickMarcEditor.updateExistingField(testData.tag245, testData.tag245Content); + QuickMarcEditor.pressSaveAndClose(); + QuickMarcEditor.checkCallout(testData.error245Required); + QuickMarcEditor.closeCallout(); + QuickMarcEditor.updateExistingField(testData.tag245, ''); + QuickMarcEditor.pressSaveAndClose(); + QuickMarcEditor.checkCallout(testData.error245Required); + }, + ); + }); + }); +}); diff --git a/cypress/e2e/orders/edit-pol.cy.js b/cypress/e2e/orders/edit-pol.cy.js index 28f6054783..d99cc07188 100644 --- a/cypress/e2e/orders/edit-pol.cy.js +++ b/cypress/e2e/orders/edit-pol.cy.js @@ -59,7 +59,7 @@ describe('orders: create', () => { Orders.searchByParameter('PO number', orderNumber); Orders.selectFromResultsList(orderNumber); Orders.createPOLineViaActions(); - OrderLines.selectRandomInstanceInTitleLookUP('*', 1); + OrderLines.selectRandomInstanceInTitleLookUP('*', 3); OrderLines.fillInPOLineInfoForExportWithLocation('Purchase', location.name); }); diff --git a/cypress/fixtures/marcBibFileForC503057.mrc b/cypress/fixtures/marcBibFileForC503057.mrc new file mode 100644 index 0000000000..b8f950d7e2 --- /dev/null +++ b/cypress/fixtures/marcBibFileForC503057.mrc @@ -0,0 +1 @@ +01248cas a2200397 450000100070000000500170000700800410002401000170006502200140008203500260009603500220012203500110014403500190015504000440017405000150021808200110023322200420024424500510028626000470033726500380038430000150042231000220043732100250045936200230048457000290050765000330053665000450056965500420061470000450065685300180070186300230071990200160074290500210075894800370077995000340081636683220141106221425.0750907c19509999enkqr p 0 a0eng d a 58020553  a0022-0469 a(CStRLIN)NYCX1604275S a(NIC)notisABP6388 a366832 a(OCoLC)1604275 dCtYdMBTIdCtYdMBTIdNICdCStRLINdNIC0 aBR140b.J6 a270.0504aThe Journal of ecclesiastical history04aC503057 The Journal of ecclesiastical history. aLondon,bCambridge University Press [etc.] a32 East 57th St., New York, 10022 av.b25 cm. aQuarterly,b1970- aSemiannual,b1950-690 av. 1- Apr. 1950- aEditor: C. W. Dugmore. 0aChurch historyxPeriodicals. 7aChurch history2fast0(OCoLC)fst00860740 7aPeriodicals2fast0(OCoLC)fst014116411 aDugmore, C. W.q(Clifford William),eed.0381av.i(year)4081a1-49i1950-1998 apfndbLintz a19890510120000.02 a20141106bmdbatcheltsxaddfast lOLINaBR140b.J86h01/01/01 N \ No newline at end of file diff --git a/cypress/support/fragments/bulk-edit/query-modal.js b/cypress/support/fragments/bulk-edit/query-modal.js index aff2cdde24..bf5715bbe9 100644 --- a/cypress/support/fragments/bulk-edit/query-modal.js +++ b/cypress/support/fragments/bulk-edit/query-modal.js @@ -25,7 +25,7 @@ const selectFieldButton = Button(including('Select field')); const booleanValues = ['AND']; export const holdingsFieldValues = { - instanceUuid: 'Holdings — Holding — Instance UUID', + instanceUuid: 'Holdings — Holdings — Instance UUID', }; export const instanceFieldValues = { instanceHrid: 'Instances — Instance — Instance HRID', @@ -42,7 +42,7 @@ export const usersFieldValues = { expirationDate: 'Users — User — Expiration date', firstName: 'Users — User — First name', lastName: 'Users — User — Last name', - patronGroup: 'Users — Group — Name', + patronGroup: 'Users — Patron group — Name', preferredContactType: 'Users — User — Preferred contact type', userActive: 'Users — User — Active', userBarcode: 'Users — User — Barcode', diff --git a/cypress/support/fragments/finance/funds/funds.js b/cypress/support/fragments/finance/funds/funds.js index f49150e9c1..66c6e2e84d 100644 --- a/cypress/support/fragments/finance/funds/funds.js +++ b/cypress/support/fragments/finance/funds/funds.js @@ -240,6 +240,7 @@ export default { codeField.fillIn(fund.code), externalAccountField.fillIn(fund.externalAccountNo), ledgerSelection.find(Button()).click(), + codeField.click(), ]); }, diff --git a/cypress/support/fragments/inventory/search/browseClassifications.js b/cypress/support/fragments/inventory/search/browseClassifications.js index 73898834b5..0ee9100bf7 100644 --- a/cypress/support/fragments/inventory/search/browseClassifications.js +++ b/cypress/support/fragments/inventory/search/browseClassifications.js @@ -6,6 +6,7 @@ import { MultiColumnListRow, MultiColumnListHeader, PaneContent, + Button, } from '../../../../../interactors'; const browseInventoryPane = Pane('Browse inventory'); @@ -73,4 +74,8 @@ export default { clickOnSearchResult: (value) => { cy.do(MultiColumnListCell({ content: including(value) }).click()); }, + + selectFoundValueByRow(rowIndex, value) { + cy.do(MultiColumnListCell({ row: rowIndex, content: value }).find(Button()).click()); + } }; diff --git a/cypress/support/fragments/orders/orders.js b/cypress/support/fragments/orders/orders.js index 3d60d0fc66..89312b5620 100644 --- a/cypress/support/fragments/orders/orders.js +++ b/cypress/support/fragments/orders/orders.js @@ -645,6 +645,7 @@ export default { ]); }, selectFilterAcquisitionMethod: (AUmethod) => { + cy.wait(4000); cy.do([ buttonAcquisitionMethodFilter.click(), MultiSelect({ id: 'acq-methods-filter' }).select([AUmethod]),