From b43368ed640e1291465f53d511ced6393b288fab Mon Sep 17 00:00:00 2001 From: kbrener-eis <165926280+kbrener-eis@users.noreply.github.com> Date: Thu, 23 Jan 2025 16:32:12 +0200 Subject: [PATCH 1/4] FAT-17674 (#4663) * initial changes for lde new authority test * changes to new-authority test * Citation User Journey C633470 added --- cypress/e2e/fse/ui/lists-ui.cy.js | 1 - cypress/e2e/linked-data/new-authority.cy.js | 178 ++++++++++++++++++ .../fragments/linked-data/editResource.js | 60 +++++- 3 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 cypress/e2e/linked-data/new-authority.cy.js diff --git a/cypress/e2e/fse/ui/lists-ui.cy.js b/cypress/e2e/fse/ui/lists-ui.cy.js index cbb35f1295..89bcf3e864 100644 --- a/cypress/e2e/fse/ui/lists-ui.cy.js +++ b/cypress/e2e/fse/ui/lists-ui.cy.js @@ -14,7 +14,6 @@ describe('fse-lists - UI', () => { { tags: ['sanity', 'fse', 'ui', 'lists'] }, () => { cy.visit(TopMenu.listsPath); - Lists.waitForSpinnerToDisappear(); // check filters displayed (as we can't use standard waitLoading for tenants with non-English localization) Lists.filtersWaitLoading(); }, diff --git a/cypress/e2e/linked-data/new-authority.cy.js b/cypress/e2e/linked-data/new-authority.cy.js new file mode 100644 index 0000000000..2fccfe4aa1 --- /dev/null +++ b/cypress/e2e/linked-data/new-authority.cy.js @@ -0,0 +1,178 @@ +import Work from '../../support/fragments/linked-data/work'; +import TopMenu from '../../support/fragments/topMenu'; +import getRandomPostfix, { getRandomLetters } from '../../support/utils/stringTools'; +import EditResource from '../../support/fragments/linked-data/editResource'; +import { + APPLICATION_NAMES, + DEFAULT_JOB_PROFILE_NAMES, + MARC_AUTHORITY_SEARCH_OPTIONS, +} from '../../support/constants'; +import TopMenuNavigation from '../../support/fragments/topMenuNavigation'; +import QuickMarcEditor from '../../support/fragments/quickMarcEditor'; +import MarcAuthorities from '../../support/fragments/marcAuthority/marcAuthorities'; +import MarcAuthority from '../../support/fragments/marcAuthority/marcAuthority'; +import ManageAuthorityFiles from '../../support/fragments/settings/marc-authority/manageAuthorityFiles'; +import InventoryInstances from '../../support/fragments/inventory/inventoryInstances'; +import InventoryInstance from '../../support/fragments/inventory/inventoryInstance'; +import PreviewResource from '../../support/fragments/linked-data/previewResource'; +import FileManager from '../../support/utils/fileManager'; +import DataImport from '../../support/fragments/data_import/dataImport'; +import SearchAndFilter from '../../support/fragments/linked-data/searchAndFilter'; +import LinkedDataEditor from '../../support/fragments/linked-data/linkedDataEditor'; + +describe('Citation: create work', () => { + const testData = { + // lde related test data + marcFilePath: 'marcBibFileForC451572.mrc', + modifiedMarcFile: `C451572 editedMarcFile${getRandomPostfix()}.mrc`, + marcFileName: `C451572 marcFile${getRandomPostfix()}.mrc`, + uniqueTitle: `Cypress test ${getRandomPostfix()}`, + uniqueIsbn: `ISBN${getRandomLetters(8)}`, + uniqueCreator: `Creator-${getRandomLetters(10)}`, + uniqueInstanceTitle: `Instance AQA title ${getRandomPostfix()}`, + callNumber: '331.2', + // new authority related test data + sourceName: 'LC Name Authority file (LCNAF)', + searchOption: 'Keyword', + marcValue: 'Create a new MARC authority record with FOLIO authority file test', + tag001: '001', + tag010: '010', + tag100: '100', + tag010Value: 'n00776432', + tag001Value: 'n4332123', + headerText: 'Create a new MARC authority record', + AUTHORIZED: 'Authorized', + }; + + const resourceData = { + creator: testData.uniqueCreator, + language: 'spa', + classificationNumber: 'PC4112', + title: `${testData.uniqueTitle} TT test35 cultural approach to intermediate Spanish tk1 /`, + isbnIdentifier: testData.uniqueIsbn, + lccnIdentifier: 'aa1994901234', + publisher: 'Scott, Foresman, test', + publicationDate: '2024', + edition: '3rd ed. test', + }; + + const newFields = [ + { previousFieldTag: '008', tag: '010', content: '$a n4332123 $z n 1234432333' }, + { + previousFieldTag: '010', + tag: '100', + content: '$a Create a new MARC authority record with FOLIO authority file test', + }, + ]; + + after('Delete test data', () => { + FileManager.deleteFile(`cypress/fixtures/${testData.modifiedMarcFile}`); + cy.getAdminToken(); + // delete new authority related data + MarcAuthority.deleteViaAPI(testData.authorityId, true); + ManageAuthorityFiles.unsetAllDefaultFOLIOFilesAsActiveViaAPI(); + // delete LDE related data + // delete inventory instance both from inventory and LDE modules + // this might change later once corresponding instance will automatically get deleted in linked-data + InventoryInstances.getInstanceIdApi({ + limit: 1, + query: `title="${resourceData.title}"`, + }).then((id) => { + InventoryInstances.deleteInstanceAndItsHoldingsAndItemsViaApi(id); + }); + Work.getInstancesByTitle(testData.uniqueTitle).then((instances) => { + const filteredInstances = instances.filter( + (element) => element.titles[0].value === testData.uniqueTitle, + ); + Work.deleteById(filteredInstances[0].id); + }); + // delete work + Work.getIdByTitle(testData.uniqueTitle).then((id) => Work.deleteById(id)); + }); + + before('Prepare MARC settings', () => { + // Set unique title, ISBN and Creator for searching + DataImport.editMarcFile( + testData.marcFilePath, + testData.modifiedMarcFile, + ["!A Alice's Adventures in Wonderland", '123456789123456', 'Neale-Silva, Eduardo'], + [testData.uniqueTitle, testData.uniqueIsbn, testData.uniqueCreator], + ); + cy.getAdminToken(); + ManageAuthorityFiles.setAllDefaultFOLIOFilesToActiveViaAPI(); + DataImport.uploadFileViaApi( + testData.modifiedMarcFile, + testData.marcFileName, + DEFAULT_JOB_PROFILE_NAMES.CREATE_INSTANCE_AND_SRS, + ); + }); + + beforeEach(() => { + cy.loginAsAdmin({ + path: TopMenu.marcAuthorities, + waiter: MarcAuthorities.waitLoading, + }); + }); + + it( + 'C633470 [User journey] LDE - Create new MARC authority (citation)', + { tags: ['draft', 'citation', 'linked-data-editor', 'shiftLeft'] }, + () => { + // create new authority via UI + MarcAuthorities.clickActionsAndNewAuthorityButton(); + QuickMarcEditor.checkPaneheaderContains(testData.headerText); + QuickMarcEditor.verifyAuthorityLookUpButton(); + QuickMarcEditor.clickAuthorityLookUpButton(); + QuickMarcEditor.selectAuthorityFile(testData.sourceName); + QuickMarcEditor.verifyAuthorityFileSelected(testData.sourceName); + QuickMarcEditor.clickSaveAndCloseInModal(); + QuickMarcEditor.checkContentByTag(testData.tag001, ''); + newFields.forEach((newField) => { + MarcAuthority.addNewFieldAfterExistingByTag( + newField.previousFieldTag, + newField.tag, + newField.content, + ); + }); + QuickMarcEditor.checkContentByTag(testData.tag001, testData.tag001Value); + QuickMarcEditor.checkContentByTag(testData.tag010, newFields[0].content); + QuickMarcEditor.checkContentByTag(testData.tag100, newFields[1].content); + QuickMarcEditor.pressSaveAndClose(); + cy.wait(1500); + QuickMarcEditor.pressSaveAndClose(); + MarcAuthority.verifyAfterSaveAndClose(); + QuickMarcEditor.verifyPaneheaderWithContentAbsent(testData.headerText); + MarcAuthority.getId().then((id) => { + testData.authorityId = id; + }); + // search for inventory item (created in precondition via data import) and edit it in LDE + TopMenuNavigation.openAppFromDropdown(APPLICATION_NAMES.INVENTORY); + InventoryInstances.searchByTitle(testData.uniqueTitle); + InventoryInstance.editInstanceInLde(); + PreviewResource.waitLoading(); + PreviewResource.clickContinue(); + EditResource.waitLoading(); + // change authority to newly created one + EditResource.clickEditWork(); + // change first creator of work section + EditResource.selectChangeCreatorOfWork(1); + EditResource.switchToSearchTabMarcAuthModal(); + // search by personal name + EditResource.selectSearchParameterMarcAuthModal(MARC_AUTHORITY_SEARCH_OPTIONS.PERSONAL_NAME); + EditResource.searchMarcAuthority(testData.marcValue); + EditResource.selectAssignMarcAuthorityButton(1); + EditResource.saveAndClose(); + // LDE filters are displayed indicating that edit form was closed + SearchAndFilter.waitLoading(); + // search created work by title + SearchAndFilter.searchResourceByTitle(testData.uniqueTitle); + SearchAndFilter.checkSearchResultsByTitle(testData.uniqueTitle); + // open work + LinkedDataEditor.selectFromSearchTable(1); + LinkedDataEditor.editWork(); + EditResource.waitLoading(); + // check that marc value is displayed on the 'creator of work' section + EditResource.checkLabelTextValue('Creator of Work', testData.marcValue); + }, + ); +}); diff --git a/cypress/support/fragments/linked-data/editResource.js b/cypress/support/fragments/linked-data/editResource.js index 636a4ff662..404a37a2db 100644 --- a/cypress/support/fragments/linked-data/editResource.js +++ b/cypress/support/fragments/linked-data/editResource.js @@ -3,10 +3,15 @@ import newInstance from './newInstance'; const actionsButton = "//button[@data-testid='edit-control-actions-toggle']"; const duplicateButton = "//button[@data-testid='edit-control-actions-toggle__option-ld.duplicate']"; const viewMarcButton = "//button[@data-testid='edit-control-actions-toggle__option-ld.viewMarc']"; +const editWorkButton = "//button[text()='Edit work']"; +const selectMarcAuthModal = + "//h3[text()='Select MARC authority']/ancestor::*[@data-testid='modal']"; +const editResourceSection = "//div[@id='edit-section']"; +const searchMarcAuthInputField = "//textarea[@id='id-search-textarea']"; export default { waitLoading() { - cy.xpath("//div[@id='edit-section']").should('be.visible'); + cy.xpath(editResourceSection).should('be.visible'); }, saveAndKeepEditing() { @@ -45,7 +50,7 @@ export default { duplicateResource() { cy.xpath(actionsButton).click(); cy.xpath(duplicateButton).click(); - cy.xpath("//div[@id='edit-section']").should('be.visible'); + cy.xpath(editResourceSection).should('be.visible'); }, openNewInstanceForm() { @@ -71,4 +76,55 @@ export default { cy.xpath(viewMarcButton).click(); cy.xpath("//div[@class='view-marc-modal']").should('be.visible'); }, + + clickEditWork() { + cy.xpath(editWorkButton).click(); + cy.xpath(editResourceSection).should('be.visible'); + }, + + selectChangeCreatorOfWork(buttonNumber) { + cy.xpath( + `(//button[contains(@data-testid, 'changeComplexFieldValue')])[${buttonNumber}]`, + ).should('be.visible'); + cy.xpath( + `(//button[contains(@data-testid, 'changeComplexFieldValue')])[${buttonNumber}]`, + ).click(); + // check that modal is displayed + cy.xpath(selectMarcAuthModal).should('be.visible'); + }, + + switchToSearchTabMarcAuthModal() { + cy.xpath("//button[@data-testid='id-search-segment-button-search']").click(); + }, + + switchToBrowseTabMarcAuthModal() { + cy.xpath("//button[@data-testid='id-search-segment-button-browse']").click(); + }, + + selectSearchParameterMarcAuthModal(option) { + cy.wait(1000); + cy.xpath("//select[@id='id-search-select']").select(option); + }, + + searchMarcAuthority(keyword) { + cy.wait(1000); + cy.xpath(searchMarcAuthInputField).focus().should('not.be.disabled').clear(); + // break the chain since test fails here from time to time otherwise + cy.xpath(searchMarcAuthInputField).type(keyword); + // click on search button + cy.xpath("//button[@data-testid='id-search-button']").click(); + }, + + selectAssignMarcAuthorityButton(rowNumber) { + cy.xpath(`(//button[contains(@data-testid, 'assign-button')])[${rowNumber}]`).click(); + // modal should be closed + cy.xpath(selectMarcAuthModal).should('not.be.visible'); + cy.xpath(editResourceSection).should('be.visible'); + }, + + checkLabelTextValue(sectionName, textValue) { + cy.xpath( + `//div[text()='${sectionName}']/../../..//span[@data-testid='complex-lookup-selected-label' and text()='${textValue}']`, + ).should('be.visible'); + }, }; From a93698670fa5db2938afadef8d56509fa09ee8b6 Mon Sep 17 00:00:00 2001 From: Sviatlana Stsiapanava <152482600+sviatlana-stsiapanava@users.noreply.github.com> Date: Fri, 24 Jan 2025 14:19:20 +0500 Subject: [PATCH 2/4] Add the test case C496114 (#4666) --- ...ngs-clear-location-in-central-tenant.cy.js | 294 ++++++++++++++++++ .../fragments/bulk-edit/query-modal.js | 2 + 2 files changed, 296 insertions(+) create mode 100644 cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-clear-location-in-central-tenant.cy.js diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-clear-location-in-central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-clear-location-in-central-tenant.cy.js new file mode 100644 index 0000000000..4e6207ee3d --- /dev/null +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-clear-location-in-central-tenant.cy.js @@ -0,0 +1,294 @@ +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 BulkEditFiles from '../../../../support/fragments/bulk-edit/bulk-edit-files'; +import InventoryInstances from '../../../../support/fragments/inventory/inventoryInstances'; +import TopMenu from '../../../../support/fragments/topMenu'; +import Users from '../../../../support/fragments/users/users'; +import FileManager from '../../../../support/utils/fileManager'; +import getRandomPostfix, { randomFourDigitNumber } from '../../../../support/utils/stringTools'; +import InventorySearchAndFilter from '../../../../support/fragments/inventory/inventorySearchAndFilter'; +import InventoryHoldings from '../../../../support/fragments/inventory/holdings/inventoryHoldings'; +import InventoryInstance from '../../../../support/fragments/inventory/inventoryInstance'; +import HoldingsRecordView from '../../../../support/fragments/inventory/holdingsRecordView'; +import QueryModal, { + QUERY_OPERATIONS, + holdingsFieldValues, +} from '../../../../support/fragments/bulk-edit/query-modal'; +import ConsortiumManager from '../../../../support/fragments/settings/consortium-manager/consortium-manager'; +import Affiliations, { tenantNames } from '../../../../support/dictionary/affiliations'; +import { APPLICATION_NAMES, BULK_EDIT_TABLE_COLUMN_HEADERS } from '../../../../support/constants'; +import { getLongDelay } from '../../../../support/utils/cypressTools'; +import TopMenuNavigation from '../../../../support/fragments/topMenuNavigation'; + +let user; +let instanceTypeId; +let sourceId; +let locationInCollegeData; +const callNumberPrefix = `000000${randomFourDigitNumber()}`; +const folioInstance = { + title: `C496114 folio instance testBulkEdit_${getRandomPostfix()}`, + holdingId: null, + holdingHrid: null, +}; +const marcInstance = { + title: `C496114 marc instance testBulkEdit_${getRandomPostfix()}`, + holdingId: null, + holdingHrid: null, +}; +const instances = [folioInstance, marcInstance]; +let matchedRecordsQueryFileName; +let previewQueryFileName; +let changedRecordsQueryFileName; + +describe('Bulk-edit', () => { + describe('In-app approach', () => { + describe('Consortia', () => { + before('create test data', () => { + cy.clearLocalStorage(); + cy.getAdminToken(); + cy.createTempUser([ + permissions.bulkEditEdit.gui, + permissions.uiInventoryViewCreateEditHoldings.gui, + permissions.bulkEditQueryView.gui, + ]).then((userProperties) => { + user = userProperties; + + cy.assignAffiliationToUser(Affiliations.College, user.userId); + cy.setTenant(Affiliations.College); + cy.assignPermissionsToExistingUser(user.userId, [ + permissions.bulkEditEdit.gui, + permissions.uiInventoryViewCreateEditHoldings.gui, + permissions.bulkEditQueryView.gui, + ]); + cy.resetTenant(); + cy.getInstanceTypes({ limit: 1 }).then((instanceTypeData) => { + instanceTypeId = instanceTypeData[0].id; + }); + InventoryHoldings.getHoldingsFolioSource() + .then((folioSource) => { + sourceId = folioSource.id; + }) + .then(() => { + // create shared folio instance + InventoryInstances.createFolioInstanceViaApi({ + instance: { + instanceTypeId, + title: folioInstance.title, + }, + }).then((createdInstanceData) => { + folioInstance.id = createdInstanceData.instanceId; + }); + }) + .then(() => { + // create shared marc instance + cy.createSimpleMarcBibViaAPI(marcInstance.title).then((instanceId) => { + marcInstance.id = instanceId; + }); + }) + .then(() => { + cy.setTenant(Affiliations.College); + // create holdings in College tenant + InventoryInstances.getLocations({ limit: 1 }).then((resp) => { + locationInCollegeData = resp[0]; + + instances.forEach((instance) => { + InventoryHoldings.createHoldingRecordViaApi({ + instanceId: instance.id, + permanentLocationId: locationInCollegeData.id, + temporaryLocationId: locationInCollegeData.id, + callNumberPrefix, + sourceId, + }).then((holding) => { + instance.holdingId = holding.id; + instance.holdingHrid = holding.hrid; + }); + cy.wait(1000); + }); + }); + }) + .then(() => { + cy.login(user.username, user.password, { + path: TopMenu.bulkEditPath, + waiter: BulkEditSearchPane.waitLoading, + }); + ConsortiumManager.checkCurrentTenantInTopMenu(tenantNames.central); + BulkEditSearchPane.openQuerySearch(); + BulkEditSearchPane.checkHoldingsRadio(); + BulkEditSearchPane.clickBuildQueryButton(); + QueryModal.verify(); + QueryModal.selectField(holdingsFieldValues.permanentLocation); + QueryModal.verifySelectedField(holdingsFieldValues.permanentLocation); + QueryModal.selectOperator(QUERY_OPERATIONS.EQUAL); + QueryModal.chooseValueSelect(locationInCollegeData.name); + QueryModal.addNewRow(); + QueryModal.selectField(holdingsFieldValues.callNumberPrefix, 1); + QueryModal.selectOperator(QUERY_OPERATIONS.EQUAL, 1); + QueryModal.fillInValueTextfield(callNumberPrefix, 1); + cy.intercept('GET', '**/preview?limit=100&offset=0&step=UPLOAD*').as('getPreview'); + cy.intercept('GET', '/query/**').as('waiterForQueryCompleted'); + QueryModal.clickTestQuery(); + QueryModal.waitForQueryCompleted('@waiterForQueryCompleted'); + }); + }); + }); + + after('delete test data', () => { + cy.resetTenant(); + cy.getAdminToken(); + cy.setTenant(Affiliations.College); + + instances.forEach((instance) => { + cy.deleteHoldingRecordViaApi(instance.holdingId); + }); + + cy.resetTenant(); + cy.getAdminToken(); + + instances.forEach((instance) => { + InventoryInstance.deleteInstanceViaApi(instance.id); + }); + + Users.deleteViaApi(user.userId); + FileManager.deleteFileFromDownloadsByMask( + matchedRecordsQueryFileName, + previewQueryFileName, + changedRecordsQueryFileName, + ); + }); + + it( + 'C496114 Verify "Clear" action for Holdings location in Central tenant (consortia) (firebird)', + { tags: ['smokeECS', 'firebird', 'C496114'] }, + () => { + QueryModal.clickRunQuery(); + QueryModal.verifyClosed(); + cy.wait('@getPreview', getLongDelay()).then((interception) => { + const interceptedUuid = interception.request.url.match( + /bulk-operations\/([a-f0-9-]+)\/preview/, + )[1]; + matchedRecordsQueryFileName = `*-Matched-Records-Query-${interceptedUuid}.csv`; + previewQueryFileName = `*-Updates-Preview-CSV-Query-${interceptedUuid}.csv`; + changedRecordsQueryFileName = `*-Changed-Records-Query-${interceptedUuid}.csv`; + + BulkEditSearchPane.verifyBulkEditQueryPaneExists(); + BulkEditSearchPane.verifyRecordsCountInBulkEditQueryPane('2 holding'); + BulkEditSearchPane.verifyQueryHeadLine( + `(permanent_location.name == "${locationInCollegeData.name}") AND (holdings.call_number_prefix == "${callNumberPrefix}")`, + ); + + instances.forEach((instance) => { + BulkEditSearchPane.verifyExactChangesUnderColumnsByIdentifierInResultsAccordion( + instance.holdingHrid, + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_HRID, + instance.holdingHrid, + ); + }); + + const initialHeaderValues = [ + { + header: + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_TEMPORARY_LOCATION, + value: locationInCollegeData.name, + }, + { + header: + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_PERMANENT_LOCATION, + value: locationInCollegeData.name, + }, + ]; + + BulkEditActions.downloadMatchedResults(); + + instances.forEach((instance) => { + BulkEditFiles.verifyHeaderValueInRowByIdentifier( + matchedRecordsQueryFileName, + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_HRID, + instance.holdingHrid, + initialHeaderValues, + ); + }); + + BulkEditActions.openInAppStartBulkEditFrom(); + BulkEditSearchPane.verifyBulkEditsAccordionExists(); + BulkEditActions.verifyOptionsDropdown(); + BulkEditActions.verifyRowIcons(); + BulkEditActions.verifyCancelButtonDisabled(false); + BulkEditSearchPane.isConfirmButtonDisabled(true); + BulkEditActions.clearTemporaryLocation('holdings'); + BulkEditActions.verifyTheActionOptions(['Clear field', 'Replace with']); + BulkEditSearchPane.isConfirmButtonDisabled(false); + BulkEditActions.confirmChanges(); + BulkEditActions.verifyMessageBannerInAreYouSureForm(2); + + const editedHeaderValues = [ + { + header: + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_TEMPORARY_LOCATION, + value: '', + }, + { + header: + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_PERMANENT_LOCATION, + value: locationInCollegeData.name, + }, + ]; + + instances.forEach((instance) => { + BulkEditSearchPane.verifyExactChangesInMultipleColumnsByIdentifierInAreYouSureForm( + instance.holdingHrid, + editedHeaderValues, + ); + }); + + BulkEditActions.verifyAreYouSureForm(2); + BulkEditActions.downloadPreview(); + + instances.forEach((instance) => { + BulkEditFiles.verifyHeaderValueInRowByIdentifier( + previewQueryFileName, + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_HRID, + instance.holdingHrid, + editedHeaderValues, + ); + }); + + BulkEditActions.commitChanges(); + BulkEditActions.verifySuccessBanner(2); + + instances.forEach((instance) => { + BulkEditSearchPane.verifyExactChangesInMultipleColumnsByIdentifierInChangesAccordion( + instance.holdingHrid, + editedHeaderValues, + ); + }); + + BulkEditActions.openActions(); + BulkEditActions.downloadChangedCSV(); + + instances.forEach((instance) => { + BulkEditFiles.verifyHeaderValueInRowByIdentifier( + changedRecordsQueryFileName, + BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_HOLDINGS.HOLDINGS_HRID, + instance.holdingHrid, + editedHeaderValues, + ); + }); + + ConsortiumManager.switchActiveAffiliation(tenantNames.central, tenantNames.college); + + instances.forEach((instance) => { + TopMenuNavigation.navigateToApp(APPLICATION_NAMES.INVENTORY); + InventorySearchAndFilter.switchToHoldings(); + InventorySearchAndFilter.searchInstanceByTitle(instance.title); + InventorySearchAndFilter.selectViewHoldings(); + HoldingsRecordView.waitLoading(); + HoldingsRecordView.checkPermanentLocation(locationInCollegeData.name); + HoldingsRecordView.checkTemporaryLocation('-'); + }); + }); + }, + ); + }); + }); +}); diff --git a/cypress/support/fragments/bulk-edit/query-modal.js b/cypress/support/fragments/bulk-edit/query-modal.js index 82e6957edb..201f93c13e 100644 --- a/cypress/support/fragments/bulk-edit/query-modal.js +++ b/cypress/support/fragments/bulk-edit/query-modal.js @@ -27,6 +27,8 @@ const booleanValues = ['AND']; export const holdingsFieldValues = { instanceUuid: 'Holdings — Instance UUID', callNumber: 'Holdings — Call number', + callNumberPrefix: 'Holdings — Call number prefix', + permanentLocation: 'Permanent location — Name', }; export const instanceFieldValues = { instanceHrid: 'Instance — Instance HRID', From 74939a1ec9df7e1dc8322f5f28f6141482308f81 Mon Sep 17 00:00:00 2001 From: Sviatlana Stsiapanava <152482600+sviatlana-stsiapanava@users.noreply.github.com> Date: Sat, 25 Jan 2025 15:02:10 +0500 Subject: [PATCH 3/4] FAT-17417 Support automated test cases (#4668) * Adjust the method * Update the test cases * Update test cases * Specify loan type * Remove unnecessary blank line --- .../csv/bulk-edit-csv-drag-and-drop.cy.js | 2 +- ...-edit-csv-verify-cancel-users-matched.cy.js | 2 +- ...gs-electronic-access-url-relationship.cy.js | 6 ++++-- ...dit-in-app-holdings-electronic-access.cy.js | 3 +-- ...-in-app-instances-remove-all-add-note.cy.js | 4 ++-- ...it-in-app-instances-verify-note-types.cy.js | 4 ++-- ...matched-valid-and-invalid-identifiers.cy.js | 18 ++++++------------ ...ify-suppress-from-discovery-set-false.cy.js | 4 ++-- ...rify-suppress-from-discovery-set-true.cy.js | 4 ++-- ...lk-edit-in-app-items-change-note-type.cy.js | 2 +- ...k-edit-in-app-option-is-not-available.cy.js | 2 +- ...-permanent-temporary-location-at-once.cy.js | 2 +- .../bulk-edit-in-app-verify-cancel.cy.js | 2 +- ...y-errors-accordion-correct-identifier.cy.js | 2 +- .../bulk-edit-in-app-verify-request.cy.js | 2 +- ...bulk-edit-logs-in-app-instances-hrids.cy.js | 7 ++++++- ...bulk-edit-logs-in-app-instances-uuids.cy.js | 16 +++++++++------- .../bulk-edit-invalid-users-identifiers.cy.js | 2 +- ...oldings-electronic-access-clear-field.cy.js | 2 +- ...replace-with-action-in-central-tenant.cy.js | 2 +- ...gs-staff-only-notes-in-central-tenant.cy.js | 2 +- ...ress-from-discovery-in-central-tenant.cy.js | 4 ++-- ...fy-change-note-type-in-Central-tenant.cy.js | 2 +- ...fy-remove-all-notes-in-Central-tenant.cy.js | 2 +- ...ems-duplicate-notes-in-central-tenant.cy.js | 7 ++++--- ...s-replace-loan-type-in-central-tenant.cy.js | 2 +- ...edit-in-app-items-replace-with-action.cy.js | 3 ++- ...app-items-staff-only-notes-in-central.cy.js | 5 +++-- ...ify-add-note-action-in-Central-tenant.cy.js | 5 +++-- ...ge-note-type-action-in-Central-tenant.cy.js | 5 +++-- ...ve-all-notes-action-in-central-tenant.cy.js | 5 +++-- ...ord-matched-valid-instance-identifier.cy.js | 4 ++-- .../fragments/bulk-edit/bulk-edit-actions.js | 6 ++++-- .../fragments/inventory/inventoryActions.js | 10 ++++++++-- 34 files changed, 83 insertions(+), 67 deletions(-) diff --git a/cypress/e2e/bulk-edit/csv/bulk-edit-csv-drag-and-drop.cy.js b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-drag-and-drop.cy.js index d62a9b91ec..edd660189a 100644 --- a/cypress/e2e/bulk-edit/csv/bulk-edit-csv-drag-and-drop.cy.js +++ b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-drag-and-drop.cy.js @@ -53,7 +53,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyMatchedResults(testData.user.username); - BulkEditSearchPane.verifyPaneRecordsCount(1); + BulkEditSearchPane.verifyPaneRecordsCount('1 user'); BulkEditSearchPane.isDragAndDropAreaDisabled(true); BulkEditSearchPane.selectRecordIdentifier('User Barcodes'); diff --git a/cypress/e2e/bulk-edit/csv/bulk-edit-csv-verify-cancel-users-matched.cy.js b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-verify-cancel-users-matched.cy.js index f08782b37a..a399e0ba3d 100644 --- a/cypress/e2e/bulk-edit/csv/bulk-edit-csv-verify-cancel-users-matched.cy.js +++ b/cypress/e2e/bulk-edit/csv/bulk-edit-csv-verify-cancel-users-matched.cy.js @@ -53,7 +53,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.checkForUploading(userUUIDsFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyErrorLabel(userUUIDsFileName, 1, 1); - BulkEditSearchPane.verifyPaneRecordsCount(1); + BulkEditSearchPane.verifyPaneRecordsCount('1 user'); BulkEditSearchPane.verifyMatchedResults(user.username); BulkEditSearchPane.verifyNonMatchedResults(invalidUserUUID); 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 index 40f211dd06..0d246c31f9 100644 --- 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 @@ -94,14 +94,16 @@ describe('bulk-edit', () => { BulkEditActions.verifyOptionsDropdown(); BulkEditActions.isSelectActionAbsent(); BulkEditActions.selectOption('URL Relationship'); - let possibleActions = ['Clear field', 'Find', 'Replace with']; + 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'); + BulkEditActions.selectOption('URL Relationship'); + BulkEditActions.selectSecondAction('Find (full field search)'); + BulkEditActions.verifyActionSelected('Find (full field search)'); possibleActions = ['Replace with', 'Remove']; BulkEditActions.verifyPossibleActions(possibleActions); BulkEditActions.selectSecondAction('Remove'); diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access.cy.js index 0c1e788b85..4fb4bf9bec 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access.cy.js @@ -109,8 +109,7 @@ describe('bulk-edit', () => { ); BulkEditSearchPane.verifyElectronicAccessElementByIndex(4, electronicAccess[0].publicNote); BulkEditActions.openInAppStartBulkEditFrom(); - BulkEditActions.electronicAccessReplaceWith( - 'URL Relationship', + BulkEditActions.urlRelationshipReplaceWith( electronicAccessRelationshipName.RESOURCE, electronicAccessRelationshipName.VERSION_OF_RESOURCE, ); diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-remove-all-add-note.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-remove-all-add-note.cy.js index 011832b6eb..aafe205bb0 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-remove-all-add-note.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-remove-all-add-note.cy.js @@ -196,8 +196,8 @@ describe('bulk-edit', () => { `${notes.exhibitionsNote} (staff only)`, ); - BulkEditSearchPane.verifyErrorLabelInErrorAccordion(instanceUUIDsFileName, 2, 2, 3); - BulkEditSearchPane.verifyNonMatchedResults(marcInstance.instanceId); + BulkEditSearchPane.verifyErrorLabel(3); + BulkEditSearchPane.verifyNonMatchedResults(marcInstance.instanceId, `${reasonForError} `); BulkEditSearchPane.verifyReasonForError(reasonForError); BulkEditActions.openActions(); diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-note-types.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-note-types.cy.js index c8627093a9..ccd9790b26 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-note-types.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-note-types.cy.js @@ -153,7 +153,7 @@ describe('bulk-edit', () => { const instanceNoteColumnNames = Object.values( BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_INSTANCES, - ).slice(22); + ).slice(23); BulkEditSearchPane.verifyInstanceNoteColumns(instanceNoteColumnNames); BulkEditSearchPane.changeShowColumnCheckboxIfNotYet( @@ -261,7 +261,7 @@ describe('bulk-edit', () => { BulkEditActions.commitChanges(); BulkEditSearchPane.waitFileUploading(); BulkEditActions.verifySuccessBanner(1); - BulkEditSearchPane.verifyPaneRecordsChangedCount(1); + BulkEditSearchPane.verifyPaneRecordsChangedCount('1 instance'); BulkEditSearchPane.verifyExactChangesUnderColumnsByIdentifierInChangesAccordion( instance.hrid, BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_INSTANCES.ADMINISTRATIVE_NOTE, diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-preview-of-records-matched-valid-and-invalid-identifiers.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-preview-of-records-matched-valid-and-invalid-identifiers.cy.js index 5c2dfbcff4..39ea061374 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-preview-of-records-matched-valid-and-invalid-identifiers.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-preview-of-records-matched-valid-and-invalid-identifiers.cy.js @@ -101,7 +101,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.uploadFile(instanceUUIDsFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyPaneTitleFileName(instanceUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(`${numberOfRecords}`); + BulkEditSearchPane.verifyPaneRecordsCount(`${numberOfRecords} instance`); BulkEditSearchPane.verifyFileNameHeadLine(instanceUUIDsFileName); createdInstanceHrids.forEach((instanceHrid, index) => { @@ -112,11 +112,11 @@ describe('bulk-edit', () => { ); }); - BulkEditSearchPane.verifyErrorLabel( - instanceUUIDsFileName, - numberOfRecords, - numberOfRecords, - ); + BulkEditSearchPane.verifyErrorLabel(10); + + invalidInstanceIds.forEach((invalidInstanceId) => { + BulkEditSearchPane.verifyNonMatchedResults(invalidInstanceId); + }); createdInstanceHrids.forEach((instanceHrid) => { BulkEditSearchPane.verifyExactChangesUnderColumnsByIdentifierInResultsAccordion( @@ -146,12 +146,6 @@ describe('bulk-edit', () => { ); }); - BulkEditSearchPane.verifyNonMatchedResults(); - - invalidInstanceIds.forEach((invalidInstanceId) => { - BulkEditSearchPane.verifyReasonForErrorByIdentifier(invalidInstanceId, 'No match found '); - }); - BulkEditSearchPane.verifyActionsAfterConductedInAppUploading(true, true); BulkEditSearchPane.verifyInstanceActionShowColumns(); BulkEditSearchPane.uncheckShowColumnCheckbox( diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-false.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-false.cy.js index bc2f6f9d40..468270681f 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-false.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-false.cy.js @@ -270,7 +270,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.uploadFile(instanceUUIDsFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyPaneTitleFileName(instanceUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount('6'); + BulkEditSearchPane.verifyPaneRecordsCount('6 instance'); BulkEditSearchPane.verifyFileNameHeadLine(instanceUUIDsFileName); createdInstanceHrids.forEach((instanceHrid) => { @@ -281,7 +281,7 @@ describe('bulk-edit', () => { ); }); - BulkEditSearchPane.verifyErrorLabel(instanceUUIDsFileName, 6, 5); + BulkEditSearchPane.verifyErrorLabel(5); BulkEditActions.openActions(); BulkEditSearchPane.changeShowColumnCheckboxIfNotYet( BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_INSTANCES.SUPPRESS_FROM_DISCOVERY, diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-true.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-true.cy.js index 9905f4b71a..335e8f622a 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-true.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-instances-verify-suppress-from-discovery-set-true.cy.js @@ -262,7 +262,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.uploadFile(instanceUUIDsFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyPaneTitleFileName(instanceUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount('6'); + BulkEditSearchPane.verifyPaneRecordsCount('6 instance'); BulkEditSearchPane.verifyFileNameHeadLine(instanceUUIDsFileName); createdInstanceHrids.forEach((instanceHrid) => { @@ -273,7 +273,7 @@ describe('bulk-edit', () => { ); }); - BulkEditSearchPane.verifyErrorLabel(instanceUUIDsFileName, 6, 5); + BulkEditSearchPane.verifyErrorLabel(5); BulkEditActions.openActions(); BulkEditSearchPane.changeShowColumnCheckboxIfNotYet( BULK_EDIT_TABLE_COLUMN_HEADERS.INVENTORY_INSTANCES.SUPPRESS_FROM_DISCOVERY, diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-items-change-note-type.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-items-change-note-type.cy.js index 7b2ba8e11a..c9681af810 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-items-change-note-type.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-items-change-note-type.cy.js @@ -238,7 +238,7 @@ describe('bulk-edit', () => { BulkEditActions.commitChanges(); BulkEditSearchPane.waitFileUploading(); BulkEditActions.verifySuccessBanner(1); - BulkEditSearchPane.verifyPaneRecordsChangedCount(1); + BulkEditSearchPane.verifyPaneRecordsChangedCount('1 item'); updatedNotesHeaderValueSets.forEach((updatedNoteHeaderValue) => { BulkEditSearchPane.verifyExactChangesUnderColumnsByIdentifierInChangesAccordion( diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-option-is-not-available.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-option-is-not-available.cy.js index da24ae1373..949ac0116c 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-option-is-not-available.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-option-is-not-available.cy.js @@ -64,7 +64,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyErrorLabel(invalidHoldingUUIDsFileName, 0, 1); - BulkEditSearchPane.verifyPaneRecordsCount(0); + BulkEditSearchPane.verifyPaneRecordsCount('0 holding'); BulkEditSearchPane.verifyNonMatchedResults(); BulkEditActions.openActions(); BulkEditActions.downloadMatchedRecordsAbsent(); diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-permanent-temporary-location-at-once.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-permanent-temporary-location-at-once.cy.js index d39d1e5de9..e13c7d72ba 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-permanent-temporary-location-at-once.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-permanent-temporary-location-at-once.cy.js @@ -90,7 +90,7 @@ describe('bulk-edit', () => { // Download matched records BulkEditActions.downloadMatchedResults(); BulkEditSearchPane.verifyMatchedResults(item.firstBarcode); - BulkEditSearchPane.verifyPaneRecordsCount(1); + BulkEditSearchPane.verifyPaneRecordsCount('1 item'); BulkEditActions.openInAppStartBulkEditFrom(); BulkEditActions.verifyRowIcons(); // Select "Temporary item location" from "Options" dropdown and "Replace with" option from "Select option" dropdown; diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-cancel.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-cancel.cy.js index dadb7051ae..d01d3dd93f 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-cancel.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-cancel.cy.js @@ -58,7 +58,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.checkForUploading(usernamesFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyErrorLabel(usernamesFileName, 1, 1); - BulkEditSearchPane.verifyPaneRecordsCount(1); + BulkEditSearchPane.verifyPaneRecordsCount('1 user'); BulkEditSearchPane.verifyMatchedResults(user.username); // Click "Actions" menu diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-errors-accordion-correct-identifier.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-errors-accordion-correct-identifier.cy.js index 545c800aef..a823f469f8 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-errors-accordion-correct-identifier.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-errors-accordion-correct-identifier.cy.js @@ -128,7 +128,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.uploadFile(instanceHRIDFileName); BulkEditSearchPane.checkForUploading(instanceHRIDFileName); BulkEditSearchPane.waitFileUploading(); - BulkEditSearchPane.verifyPaneRecordsCount(2); + BulkEditSearchPane.verifyPaneRecordsCount('2 holding'); BulkEditActions.downloadMatchedResults(); BulkEditFiles.verifyMatchedResultFileContent( diff --git a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-request.cy.js b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-request.cy.js index 5a196eb280..17e2bb7aaf 100644 --- a/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-request.cy.js +++ b/cypress/e2e/bulk-edit/in-app/bulk-edit-in-app-verify-request.cy.js @@ -55,7 +55,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.waitFileUploading(); // Check the result of uploading the .csv file with Items barcodes BulkEditSearchPane.verifyMatchedResults(item.itemBarcode); - BulkEditSearchPane.verifyPaneRecordsCount(1); + BulkEditSearchPane.verifyPaneRecordsCount('1 item'); // Click "Actions" menu => Select "Start Bulk edit" option BulkEditActions.openActions(); BulkEditActions.openInAppStartBulkEditFrom(); diff --git a/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-hrids.cy.js b/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-hrids.cy.js index 2e362251df..067e6a6273 100644 --- a/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-hrids.cy.js +++ b/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-hrids.cy.js @@ -136,7 +136,12 @@ describe('bulk-edit', () => { ]); BulkEditActions.commitChanges(); BulkEditActions.verifySuccessBanner(0); - BulkEditSearchPane.verifyErrorLabelAfterChanges(instanceHRIDFileName, 0, 2); + BulkEditSearchPane.verifyErrorLabel(2); + + [hridValues.folioHrid, hridValues.marcHrid].forEach((hrid) => { + BulkEditSearchPane.verifyErrorByIdentifier(hrid, 'No change in value required'); + }); + BulkEditActions.openActions(); BulkEditActions.downloadErrors(); ExportFile.verifyFileIncludes(errorsFromCommittingFileName, [ diff --git a/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-uuids.cy.js b/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-uuids.cy.js index 352804bbf8..85c1d46b9c 100644 --- a/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-uuids.cy.js +++ b/cypress/e2e/bulk-edit/logs/in-app/bulk-edit-logs-in-app-instances-uuids.cy.js @@ -124,7 +124,7 @@ describe('bulk-edit', () => { `${folioItem.instanceId},false,true,`, `${marcInstances[0].instanceId},false,true,`, `${unsuppressedFolioItem.instanceId},false,false,`, - `${marcInstances[1].instanceId},false,,`, + `${marcInstances[1].instanceId},false,false,`, ]); BulkEditActions.openStartBulkEditInstanceForm(); BulkEditActions.verifyModifyLandingPageBeforeModifying(); @@ -152,11 +152,13 @@ describe('bulk-edit', () => { unsuppressedFolioItem.instanceId, marcInstances[1].instanceId, ); - BulkEditSearchPane.verifyNonMatchedResults( - folioItem.instanceId, - marcInstances[0].instanceId, - ); - BulkEditSearchPane.verifyErrorLabelAfterChanges(instanceUUIDsFileName, 2, 2); + + BulkEditSearchPane.verifyErrorLabel(2); + + [folioItem.instanceId, marcInstances[0].instanceId].forEach((instanceId) => { + BulkEditSearchPane.verifyErrorByIdentifier(instanceId, 'No change in value required'); + }); + BulkEditActions.openActions(); BulkEditActions.downloadChangedCSV(); BulkEditActions.downloadErrors(); @@ -187,7 +189,7 @@ describe('bulk-edit', () => { `${folioItem.instanceId},false,true,`, `${marcInstances[0].instanceId},false,true,`, `${unsuppressedFolioItem.instanceId},false,false,`, - `${marcInstances[1].instanceId},false,,`, + `${marcInstances[1].instanceId},false,false,`, ]); BulkEditLogs.downloadFileWithProposedChanges(); diff --git a/cypress/e2e/bulk-edit/permissions/bulk-edit-invalid-users-identifiers.cy.js b/cypress/e2e/bulk-edit/permissions/bulk-edit-invalid-users-identifiers.cy.js index 91ca3476bd..e753361714 100644 --- a/cypress/e2e/bulk-edit/permissions/bulk-edit-invalid-users-identifiers.cy.js +++ b/cypress/e2e/bulk-edit/permissions/bulk-edit-invalid-users-identifiers.cy.js @@ -52,7 +52,7 @@ describe('bulk-edit', () => { BulkEditSearchPane.uploadFile(userUUIDsFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyErrorLabel(userUUIDsFileName, 0, 1); - BulkEditSearchPane.verifyPaneRecordsCount(0); + BulkEditSearchPane.verifyPaneRecordsCount('0 user'); BulkEditSearchPane.verifyNonMatchedResults(); // Navigate to the "Export manager" app diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-clear-field.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-clear-field.cy.js index 0149abc3e1..fc04bd5a4c 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-clear-field.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-clear-field.cy.js @@ -229,7 +229,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Holdings', 'Holdings UUIDs'); BulkEditSearchPane.uploadFile(holdingUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(holdingUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 holding'); BulkEditSearchPane.verifyFileNameHeadLine(holdingUUIDsFileName); const holdingHrids = [...collegeHoldingHrids, ...universityHoldingHrids]; diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-replace-with-action-in-central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-replace-with-action-in-central-tenant.cy.js index 5bec14cc2f..c70f09940e 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-replace-with-action-in-central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-electronic-access-replace-with-action-in-central-tenant.cy.js @@ -231,7 +231,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Holdings', 'Holdings UUIDs'); BulkEditSearchPane.uploadFile(holdingUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(holdingUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 holding'); BulkEditSearchPane.verifyFileNameHeadLine(holdingUUIDsFileName); const holdingHrids = [...collegeHoldingHrids, ...universityHoldingHrids]; diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-staff-only-notes-in-central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-staff-only-notes-in-central-tenant.cy.js index 4ae01f2fa0..fb09c99211 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-staff-only-notes-in-central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-staff-only-notes-in-central-tenant.cy.js @@ -221,7 +221,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Holdings', 'Holdings UUIDs'); BulkEditSearchPane.uploadFile(holdingUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(holdingUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 holding'); BulkEditSearchPane.verifyFileNameHeadLine(holdingUUIDsFileName); const holdingHrids = [...collegeHoldingHrids, ...universityHoldingHrids]; diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-suppress-from-discovery-in-central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-suppress-from-discovery-in-central-tenant.cy.js index efd1f00b1e..ad39db4712 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-suppress-from-discovery-in-central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-suppress-from-discovery-in-central-tenant.cy.js @@ -190,7 +190,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Holdings', 'Holdings UUIDs'); BulkEditSearchPane.uploadFile(holdingUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(holdingUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(2); + BulkEditSearchPane.verifyPaneRecordsCount('2 holding'); BulkEditSearchPane.verifyFileNameHeadLine(holdingUUIDsFileName); instances.forEach((instance) => { @@ -304,7 +304,7 @@ describe('Bulk-edit', () => { ); BulkEditSearchPane.uploadFile(holdingUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(holdingUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(2); + BulkEditSearchPane.verifyPaneRecordsCount('2 holding'); BulkEditSearchPane.verifyFileNameHeadLine(holdingUUIDsFileName); instances.forEach((instance) => { diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-change-note-type-in-Central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-change-note-type-in-Central-tenant.cy.js index 089bb367ec..86dbab36dd 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-change-note-type-in-Central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-change-note-type-in-Central-tenant.cy.js @@ -246,7 +246,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Holdings', 'Holdings UUIDs'); BulkEditSearchPane.uploadFile(holdingUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(holdingUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 holding'); BulkEditSearchPane.verifyFileNameHeadLine(holdingUUIDsFileName); const holdingHrids = [...collegeHoldingHrids, ...universityHoldingHrids]; diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-remove-all-notes-in-Central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-remove-all-notes-in-Central-tenant.cy.js index 4f04a16f1e..6c73ee8c36 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-remove-all-notes-in-Central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-holdings-verify-remove-all-notes-in-Central-tenant.cy.js @@ -228,7 +228,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Holdings', 'Holdings UUIDs'); BulkEditSearchPane.uploadFile(holdingUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(holdingUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 holding'); BulkEditSearchPane.verifyFileNameHeadLine(holdingUUIDsFileName); const holdingHrids = [...collegeHoldingHrids, ...universityHoldingHrids]; diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-duplicate-notes-in-central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-duplicate-notes-in-central-tenant.cy.js index 1d50a6c5f5..eff973013f 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-duplicate-notes-in-central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-duplicate-notes-in-central-tenant.cy.js @@ -19,6 +19,7 @@ import { APPLICATION_NAMES, BULK_EDIT_TABLE_COLUMN_HEADERS, ITEM_STATUS_NAMES, + LOAN_TYPE_NAMES, } from '../../../../support/constants'; import TopMenuNavigation from '../../../../support/fragments/topMenuNavigation'; @@ -75,7 +76,7 @@ describe('Bulk-edit', () => { cy.getLocations({ query: 'name="DCB"' }).then((res) => { locationId = res.id; }); - cy.getLoanTypes({ limit: 1 }).then((res) => { + cy.getLoanTypes({ query: `name="${LOAN_TYPE_NAMES.CAN_CIRCULATE}"` }).then((res) => { loanTypeId = res[0].id; }); cy.getMaterialTypes({ limit: 1 }).then((res) => { @@ -183,7 +184,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Items', 'Item UUIDs'); BulkEditSearchPane.uploadFile(itemUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(itemUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(2); + BulkEditSearchPane.verifyPaneRecordsCount('2 item'); BulkEditSearchPane.verifyFileNameHeadLine(itemUUIDsFileName); const itemBarcodes = [folioInstance.barcodeInCollege, marcInstance.barcodeInCollege]; @@ -294,7 +295,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Items', 'Item UUIDs'); BulkEditSearchPane.uploadFile(itemUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(itemUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(2); + BulkEditSearchPane.verifyPaneRecordsCount('2 item'); BulkEditSearchPane.verifyFileNameHeadLine(itemUUIDsFileName); itemBarcodes.forEach((barcode) => { diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-loan-type-in-central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-loan-type-in-central-tenant.cy.js index 15b156d64c..63f88ff166 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-loan-type-in-central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-loan-type-in-central-tenant.cy.js @@ -270,7 +270,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Items', 'Item UUIDs'); BulkEditSearchPane.uploadFile(itemUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(itemUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 item'); BulkEditSearchPane.verifyFileNameHeadLine(itemUUIDsFileName); const itemBarcodes = [ diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-with-action.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-with-action.cy.js index b98006fe09..cd9ce8eb18 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-with-action.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-replace-with-action.cy.js @@ -26,6 +26,7 @@ import { APPLICATION_NAMES, BULK_EDIT_TABLE_COLUMN_HEADERS, ITEM_STATUS_NAMES, + LOAN_TYPE_NAMES, } from '../../../../support/constants'; import TopMenuNavigation from '../../../../support/fragments/topMenuNavigation'; @@ -94,7 +95,7 @@ describe('Bulk-edit', () => { cy.getLocations({ query: 'name="DCB"' }).then((res) => { locationId = res.id; }); - cy.getLoanTypes({ limit: 1 }).then((res) => { + cy.getLoanTypes({ query: `name="${LOAN_TYPE_NAMES.CAN_CIRCULATE}"` }).then((res) => { loanTypeId = res[0].id; }); cy.getMaterialTypes({ limit: 1 }).then((res) => { diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-staff-only-notes-in-central.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-staff-only-notes-in-central.cy.js index 3f9b40e3ca..0ab5f5d651 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-staff-only-notes-in-central.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-staff-only-notes-in-central.cy.js @@ -22,6 +22,7 @@ import { APPLICATION_NAMES, BULK_EDIT_TABLE_COLUMN_HEADERS, ITEM_STATUS_NAMES, + LOAN_TYPE_NAMES, } from '../../../../support/constants'; import TopMenuNavigation from '../../../../support/fragments/topMenuNavigation'; @@ -98,7 +99,7 @@ describe('Bulk-edit', () => { cy.getLocations({ query: 'name="DCB"' }).then((res) => { locationId = res.id; }); - cy.getLoanTypes({ limit: 1 }).then((res) => { + cy.getLoanTypes({ query: `name="${LOAN_TYPE_NAMES.CAN_CIRCULATE}"` }).then((res) => { loanTypeId = res[0].id; }); cy.getMaterialTypes({ limit: 1 }).then((res) => { @@ -282,7 +283,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Items', 'Item UUIDs'); BulkEditSearchPane.uploadFile(itemUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(itemUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 item'); BulkEditSearchPane.verifyFileNameHeadLine(itemUUIDsFileName); const itemBarcodes = [ diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-add-note-action-in-Central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-add-note-action-in-Central-tenant.cy.js index bf1d38f9b9..042ddc37c0 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-add-note-action-in-Central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-add-note-action-in-Central-tenant.cy.js @@ -22,6 +22,7 @@ import { APPLICATION_NAMES, BULK_EDIT_TABLE_COLUMN_HEADERS, ITEM_STATUS_NAMES, + LOAN_TYPE_NAMES, } from '../../../../support/constants'; import TopMenuNavigation from '../../../../support/fragments/topMenuNavigation'; @@ -99,7 +100,7 @@ describe('Bulk-edit', () => { cy.getLocations({ query: 'name="DCB"' }).then((res) => { locationId = res.id; }); - cy.getLoanTypes({ limit: 1 }).then((res) => { + cy.getLoanTypes({ query: `name="${LOAN_TYPE_NAMES.CAN_CIRCULATE}"` }).then((res) => { loanTypeId = res[0].id; }); cy.getMaterialTypes({ limit: 1 }).then((res) => { @@ -256,7 +257,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Items', 'Item UUIDs'); BulkEditSearchPane.uploadFile(itemUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(itemUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 item'); BulkEditSearchPane.verifyFileNameHeadLine(itemUUIDsFileName); const itemBarcodes = [ diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-change-note-type-action-in-Central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-change-note-type-action-in-Central-tenant.cy.js index af9b42854f..684aeb376f 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-change-note-type-action-in-Central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-change-note-type-action-in-Central-tenant.cy.js @@ -23,6 +23,7 @@ import { BULK_EDIT_TABLE_COLUMN_HEADERS, ITEM_STATUS_NAMES, ITEM_NOTE_TYPES, + LOAN_TYPE_NAMES, } from '../../../../support/constants'; import TopMenuNavigation from '../../../../support/fragments/topMenuNavigation'; @@ -104,7 +105,7 @@ describe('Bulk-edit', () => { cy.getLocations({ query: 'name="DCB"' }).then((res) => { locationId = res.id; }); - cy.getLoanTypes({ limit: 1 }).then((res) => { + cy.getLoanTypes({ query: `name="${LOAN_TYPE_NAMES.CAN_CIRCULATE}"` }).then((res) => { loanTypeId = res[0].id; }); cy.getMaterialTypes({ limit: 1 }).then((res) => { @@ -300,7 +301,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Items', 'Item UUIDs'); BulkEditSearchPane.uploadFile(itemUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(itemUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 item'); BulkEditSearchPane.verifyFileNameHeadLine(itemUUIDsFileName); const itemBarcodes = [ diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-remove-all-notes-action-in-central-tenant.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-remove-all-notes-action-in-central-tenant.cy.js index 952e745d44..d40dd69545 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-remove-all-notes-action-in-central-tenant.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-items-verify-remove-all-notes-action-in-central-tenant.cy.js @@ -23,6 +23,7 @@ import { BULK_EDIT_TABLE_COLUMN_HEADERS, ITEM_STATUS_NAMES, ITEM_NOTE_TYPES, + LOAN_TYPE_NAMES, } from '../../../../support/constants'; import TopMenuNavigation from '../../../../support/fragments/topMenuNavigation'; @@ -100,7 +101,7 @@ describe('Bulk-edit', () => { cy.getLocations({ query: 'name="DCB"' }).then((res) => { locationId = res.id; }); - cy.getLoanTypes({ limit: 1 }).then((res) => { + cy.getLoanTypes({ query: `name="${LOAN_TYPE_NAMES.CAN_CIRCULATE}"` }).then((res) => { loanTypeId = res[0].id; }); cy.getMaterialTypes({ limit: 1 }).then((res) => { @@ -285,7 +286,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.verifyDragNDropRecordTypeIdentifierArea('Items', 'Item UUIDs'); BulkEditSearchPane.uploadFile(itemUUIDsFileName); BulkEditSearchPane.verifyPaneTitleFileName(itemUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount(4); + BulkEditSearchPane.verifyPaneRecordsCount('4 item'); BulkEditSearchPane.verifyFileNameHeadLine(itemUUIDsFileName); const itemBarcodes = [ diff --git a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-verify-preview-of-record-matched-valid-instance-identifier.cy.js b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-verify-preview-of-record-matched-valid-instance-identifier.cy.js index cdd96df4fe..1a212bf100 100644 --- a/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-verify-preview-of-record-matched-valid-instance-identifier.cy.js +++ b/cypress/e2e/consortia/bulk-edit/in-app/bulk-edit-in-app-verify-preview-of-record-matched-valid-instance-identifier.cy.js @@ -116,7 +116,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.uploadFile(firstInstanceUUIDsFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyPaneTitleFileName(firstInstanceUUIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount('1'); + BulkEditSearchPane.verifyPaneRecordsCount('1 instance'); BulkEditSearchPane.verifyFileNameHeadLine(firstInstanceUUIDsFileName); BulkEditSearchPane.verifyExactChangesUnderColumnsByIdentifierInResultsAccordion( firstInstance.hrid, @@ -156,7 +156,7 @@ describe('Bulk-edit', () => { BulkEditSearchPane.uploadFile(secondInstanceHRIDsFileName); BulkEditSearchPane.waitFileUploading(); BulkEditSearchPane.verifyPaneTitleFileName(secondInstanceHRIDsFileName); - BulkEditSearchPane.verifyPaneRecordsCount('1'); + BulkEditSearchPane.verifyPaneRecordsCount('1 instance'); BulkEditSearchPane.verifyFileNameHeadLine(secondInstanceHRIDsFileName); BulkEditSearchPane.verifyExactChangesUnderColumnsByIdentifierInResultsAccordion( secondInstance.hrid, diff --git a/cypress/support/fragments/bulk-edit/bulk-edit-actions.js b/cypress/support/fragments/bulk-edit/bulk-edit-actions.js index e476aa199c..04bc31a063 100644 --- a/cypress/support/fragments/bulk-edit/bulk-edit-actions.js +++ b/cypress/support/fragments/bulk-edit/bulk-edit-actions.js @@ -800,8 +800,9 @@ export default { this.fillInSecondTextArea(newNote, rowIndex); }, - electronicAccessReplaceWith(property, oldValue, newValue, rowIndex = 0) { - this.findValue(property, rowIndex); + urlRelationshipReplaceWith(oldValue, newValue, rowIndex = 0) { + this.selectOption('URL Relationship'); + this.selectSecondAction('Find (full field search)'); cy.wait(2000); this.selectFromUnchangedSelect(oldValue, rowIndex); this.selectSecondAction('Replace with', rowIndex); @@ -990,6 +991,7 @@ export default { cy.wait(2000); cy.do(confirmChangesButton.click()); cy.expect(Modal().find(MultiColumnListCell()).exists()); + cy.wait(1000); }, saveAndClose() { diff --git a/cypress/support/fragments/inventory/inventoryActions.js b/cypress/support/fragments/inventory/inventoryActions.js index aa943a206d..1d28974eb6 100644 --- a/cypress/support/fragments/inventory/inventoryActions.js +++ b/cypress/support/fragments/inventory/inventoryActions.js @@ -109,7 +109,10 @@ export default { }, verifySavedUUIDs(actualUUIDs, expectedUUIDs) { - const formattedActualUUIDs = actualUUIDs.replaceAll('"', '').split('\n'); + const formattedActualUUIDs = actualUUIDs + .replaceAll('"', '') + .split('\n') + .map((uuid) => uuid.trim()); expect(expectedUUIDs).to.deep.equal(formattedActualUUIDs); }, @@ -152,7 +155,10 @@ export default { }, verifyInstancesMARC(actualIDs, expectedIDs) { - const formattedActualUUIDs = actualIDs.replaceAll('"', '').split('\n'); + const formattedActualUUIDs = actualIDs + .replaceAll('"', '') + .split('\n') + .map((uuid) => uuid.trim()); expect(expectedIDs).to.deep.equal(formattedActualUUIDs); }, From eb55b33a38c45408953a811156b7a92d775be150 Mon Sep 17 00:00:00 2001 From: Yauhen Viazau Date: Mon, 27 Jan 2025 13:34:16 +0300 Subject: [PATCH 4/4] FAT-18102: test added (#4670) --- .../search-for-instance-date2-only.cy.js | 187 ++++++++++++++++++ cypress/fixtures/marcBibFileC552489.mrc | 1 + 2 files changed, 188 insertions(+) create mode 100644 cypress/e2e/inventory/search-in-inventory/search-for-instance-date2-only.cy.js create mode 100644 cypress/fixtures/marcBibFileC552489.mrc diff --git a/cypress/e2e/inventory/search-in-inventory/search-for-instance-date2-only.cy.js b/cypress/e2e/inventory/search-in-inventory/search-for-instance-date2-only.cy.js new file mode 100644 index 0000000000..152b484ab7 --- /dev/null +++ b/cypress/e2e/inventory/search-in-inventory/search-for-instance-date2-only.cy.js @@ -0,0 +1,187 @@ +import { DEFAULT_JOB_PROFILE_NAMES, INSTANCE_DATE_TYPES } from '../../../support/constants'; +import { Permissions } from '../../../support/dictionary'; +import DataImport from '../../../support/fragments/data_import/dataImport'; +import FilterItems from '../../../support/fragments/inventory/filterItems'; +import InventoryInstance from '../../../support/fragments/inventory/inventoryInstance'; +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 getRandomPostfix from '../../../support/utils/stringTools'; +import InstanceRecordView from '../../../support/fragments/inventory/instanceRecordView'; + +const testData = { + dateColumnName: 'Date', + searchQuery: 'C552489 Auto', + instances: [ + { + title: 'C552489 Auto (second date only) Instance 01: No dates given; BC date involved', + dateType: INSTANCE_DATE_TYPES.BC, + date2: '1981', + }, + { + title: 'C552489 Auto (second date only) Instance 02: Continuing resource currently published', + dateType: INSTANCE_DATE_TYPES.CONTINUING_PUBLISHED, + date2: '-1982', + }, + { + title: 'C552489 Auto (second date only) Instance 03: Continuing resource ceased publication', + dateType: INSTANCE_DATE_TYPES.CONTINUING_CEASED, + date2: '-1983', + }, + { + title: 'C552489 Auto (second date only) Instance 04: Detailed date', + dateType: INSTANCE_DATE_TYPES.DETAILED, + date2: '1984', + }, + { + title: 'C552489 Auto (second date only) Instance 05: Inclusive dates of collection', + dateType: INSTANCE_DATE_TYPES.INCLUSIVE, + date2: '-1985', + }, + { + title: 'C552489 Auto (second date only) Instance 06: Range of years of bulk of collection', + dateType: INSTANCE_DATE_TYPES.RANGE, + date2: '-1986', + }, + { + title: 'C552489 Auto (second date only) Instance 07: Multiple dates', + dateType: INSTANCE_DATE_TYPES.MULTIPLE, + date2: '1987', + }, + { + title: 'C552489 Auto (second date only) Instance 08: Dates unknown', + dateType: INSTANCE_DATE_TYPES.UNKNOWN, + date2: '1988', + }, + { + title: + 'C552489 Auto (second date only) Instance 09: Date of distribution/release/issue and production/recording session when different', + dateType: INSTANCE_DATE_TYPES.DISTRIBUTION, + date2: '1989', + }, + { + title: 'C552489 Auto (second date only) Instance 10: Questionable date', + dateType: INSTANCE_DATE_TYPES.QUESTIONABLE, + date2: '1990', + }, + { + title: 'C552489 Auto (second date only) Instance 11: Reprint/reissue date and original date', + dateType: INSTANCE_DATE_TYPES.REPRINT, + date2: '1991', + }, + { + title: 'C552489 Auto (second date only) Instance 12: Single known date/probable date', + dateType: INSTANCE_DATE_TYPES.SINGLE, + date2: '1992', + }, + { + title: 'C552489 Auto (second date only) Instance 13: Publication date and copyright date', + dateType: INSTANCE_DATE_TYPES.PUBLICATION, + date2: '1993', + }, + { + title: 'C552489 Auto (second date only) Instance 14: Continuing resource status unknown', + dateType: INSTANCE_DATE_TYPES.CONTINUING_UNKNOWN, + date2: '-1994', + }, + { + title: 'C552489 Auto (second date only) Instance 15: No attempt to code', + dateType: INSTANCE_DATE_TYPES.NO, + date2: '1995', + }, + { + title: 'C552489 Auto (second date only) Instance 16: Not specified', + dateType: INSTANCE_DATE_TYPES.NO, + date2: '1996', + }, + ], +}; + +const marcFile = { + marc: 'marcBibFileC552489.mrc', + fileName: `testMarcFileC552489.${getRandomPostfix()}.mrc`, + jobProfileToRun: DEFAULT_JOB_PROFILE_NAMES.CREATE_INSTANCE_AND_SRS, + propertyName: 'instance', +}; + +const createdInstanceIds = []; +let testUser; +let userForImport; + +describe('Inventory', () => { + describe('Search in Inventory', () => { + before('Create test data', () => { + cy.getAdminToken(); + InventoryInstances.getInstancesViaApi({ + limit: 100, + query: `title="${testData.searchQuery}*"`, + }).then((instances) => { + if (instances) { + instances.forEach(({ id }) => { + InventoryInstance.deleteInstanceViaApi(id); + }); + } + }); + + cy.createTempUser([ + Permissions.moduleDataImportEnabled.gui, + Permissions.dataImportUploadAll.gui, + ]).then((userProperties) => { + userForImport = userProperties; + cy.getToken(userForImport.username, userForImport.password, false); + DataImport.uploadFileViaApi( + marcFile.marc, + marcFile.fileName, + marcFile.jobProfileToRun, + ).then((response) => { + response.forEach((record) => { + createdInstanceIds.push(record[marcFile.propertyName].id); + }); + }); + }); + }); + + before('Create user, login', () => { + cy.createTempUser([Permissions.uiInventoryViewInstances.gui]).then((userProperties) => { + testUser = userProperties; + cy.login(userProperties.username, userProperties.password, { + path: TopMenu.inventoryPath, + waiter: InventoryInstances.waitContentLoading, + }); + }); + }); + + after('Delete test data', () => { + cy.getAdminToken(); + Users.deleteViaApi(testUser.userId); + Users.deleteViaApi(userForImport.userId); + createdInstanceIds.forEach((id) => { + InventoryInstance.deleteInstanceViaApi(id); + }); + }); + + it( + 'C552489 Check "Date" column in the result list, and instance detail view for each date type when only Date 2 is specified in MARC bib record (spitfire)', + { tags: ['criticalPath', 'spitfire', 'C552489'] }, + () => { + InventoryInstances.searchByTitle(testData.searchQuery); + testData.instances.forEach((instance) => { + InventoryInstances.verifyValueInColumnForTitle( + instance.title, + testData.dateColumnName, + instance.date2, + ); + FilterItems.selectInstance(instance.title); + InventoryInstance.waitInventoryLoading(); + InstanceRecordView.verifyDates( + undefined, + instance.date2.replace('-', ''), + instance.dateType, + ); + InventorySearchAndFilter.closeInstanceDetailPane(); + }); + }, + ); + }); +}); diff --git a/cypress/fixtures/marcBibFileC552489.mrc b/cypress/fixtures/marcBibFileC552489.mrc new file mode 100644 index 0000000000..b7fae1c452 --- /dev/null +++ b/cypress/fixtures/marcBibFileC552489.mrc @@ -0,0 +1 @@ +02521cam a2200541 i 4500001001300000003000600013005001700019008004100036010001700077040008000094020003100174020002800205020003700233020003400270020002700304035002200331042001400353043001200367082003000379092002000409049000900429100003100438245008200469250001900551264004000570300006100610336002600671336003300697337002800730338002700758500004100785504004100826520057400867600004401441650005501485650004801540650004501588650006001633651003801693655004601731655004501777655003201822655003201854655002401886655002601910700003101936994001201967on1319733032OCoLC20220907043245.0220808b 1981nyua b b 000 0deng d a 2022286521 aNjBwBTbengerdacDLCdFMGdON8dOCOdVYGdTXHLSdUAPdOCLCFdWEXdMHDdMOU a9781984829566q(hardcover) a1984829564q(hardcover) a9781984829573q(library binding) a1984829572q(library binding) z9781984829580q(ebook) a(OCoLC)1319733032 alccopycat an-cn---04a595.78/9223/eng/20220518 a595.789bR7272m aMOUC1 aRosenstock, Barb,eauthor. aC552489 Auto (second date only) Instance 01: No dates given; BC date involved aFirst edition. 1aNew York :bAlfred A. Knopf,c2022. a32 unnumbered pages :bcolor illustrations ;c23 x 29 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier a"This is a Borzoi book" -- Colophon. aIncludes bibliographical references. a"Young Fred Urquhart was fascinated by insects, especially his favorite, the monarch butterfly. He wondered where monarchs spent the winter. No one knew. After he became an entomologist (bug scientist),Fred and his wife, Norah,tagged hundreds of butterflies,hoping to solve the mystery of the monarchs. But they soon discovered that they needed help. They started a "butterfly family," a community of children, teachers, and nature enthusiasts from three countries--Canada, the United States,and Mexico--to answer the question: Where do the monarchs go?" -- Amazon.com.10aUrquhart, Fred A.vJuvenile literature. 0aMonarch butterflyxMigrationvJuvenile literature. 0aEntomologistszCanadavJuvenile literature. 7aEntomologists.2fast0(OCoLC)fst00912732 7aMonarch butterflyxMigration.2fast0(OCoLC)fst01025048 7aCanada.2fast0(OCoLC)fst01204310 7aJuvenile works.2fast0(OCoLC)fst01411637 7aPicture books.2fast0(OCoLC)fst01726789 7aCreative nonfiction.2lcgft 7aInformational works.2lcgft 7aBiographies.2lcgft 7aPicture books.2lcgft1 aMeza, Erika,eillustrator. aC0bMOU01906cam a2200445 i 4500001001300000003000600013005001700019008004100036010001700077040003300094019017100127020003100298020001500329020003700344020001500381020002700396035028800423042001400711082001600725092001800741049000900759100002800768245008900796250001900885264004100904264001100945300005600956336002601012337002801038338002701066490003101093520011401124521003001238521003201268650003601300650003401336700003401370800004401404994001201448on1224584833OCoLC20220907043245.0201125c 1982nyua j 000 0 eng  a 2020053226 aDLCbengerdacDLCdLMJdMOU a1276798890a1286687839a1287258613a1291018716a1291607846a1294299867a1295544092a1298335991a1298683704a1299333334a1303936934a1304120728a1305526200a1305543838 a9780593300848q(hardcover) a059330084X a9780593300855q(library binding) a0593300858 z9780593300862q(ebook) a(OCoLC)1224584833z(OCoLC)1276798890z(OCoLC)1286687839z(OCoLC)1287258613z(OCoLC)1291018716z(OCoLC)1291607846z(OCoLC)1294299867z(OCoLC)1295544092z(OCoLC)1298335991z(OCoLC)1298683704z(OCoLC)1299333334z(OCoLC)1303936934z(OCoLC)1304120728z(OCoLC)1305526200z(OCoLC)1305543838 apccalcac00a591.4/1223 a591.41bK222b aMOUC1 aKeating, Jess,eauthor. aC552489 Auto (second date only) Instance 02: Continuing resource currently published aFirst edition. 1aNew York :bAlfred A. Knopf,c[2021] 4c©2021 a40 unnumbered pages :bcolor illustration ;c26 cm. atextbtxt2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier1 aThe world of weird animals a"A collection of interesting facts about some of the biggest animals on the planet"--cProvided by publisher. aAges 5-8bAlfred A. Knopf aGrades 2-3bAlfred A. Knopf 0aBody sizevJuvenile literature. 0aAnimalsvJuvenile literature.1 aDeGrand, David,eillustrator.1 aKeating, Jess.tWorld of weird animals. aC0bMOU02913cam a2200541 i 4500001001300000003000600013005001700019008004100036040015600077019012300233020002700356020002400383020003100407020002800438035021200466082002700678092001800705049000900723100003800732245008800770250001900858264004100877264001100918300005600929336002600985336003301011337002801044338002701072504004101099520061801140521001301758650003101771650003501802650003201837650004201869650005001911650005401961650005202015650003602067655003902103655004602142655004702188655003202235655003202267655002602299700003402325994001202359on1295998530OCoLC20220907043245.0220209d 1983nyua b b 000 0 eng d aNjBwBTbengerdacPNXdPNXdOQXdGO3dOCLCQdYDXdJQWdRNLdUKMGBdBDXdFHPdUAHdDLMdEHHdUAPdYBMdOCLCOdOCLCFdVP@dOCLCOdUABdZ#6dOJ4dETCdMOU a1258216448a1258219611a1294394867a1295099467a1295153914a1295167728a1295998941a1312131139a1313806667a1319169498 a9781984894366q(trade) a1984894366q(trade) a9781984894373q(lib. bdg.) a1984894374q(lib. bdg.) a(OCoLC)1295998530z(OCoLC)1258216448z(OCoLC)1258219611z(OCoLC)1294394867z(OCoLC)1295099467z(OCoLC)1295153914z(OCoLC)1295167728z(OCoLC)1295998941z(OCoLC)1312131139z(OCoLC)1313806667z(OCoLC)131916949804a535.6223/eng/20220131 a535.6bB7582b aMOUC1 aBrew-Hammond, Nana Ekua,eauthor. aC552489 Auto (second date only) Instance 03: Continuing resource ceased publication aFirst edition. 1aNew York :bAlfred A. Knopf,c[2022] 4c©2022 a32 unnumbered pages :bcolor illustrations ;c29 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier aIncludes bibliographical references. a"For centuries, blue powders and dyes were some of the most sought-after materials in the world. Ancient Afghan painters ground mass quantities of sapphire rocks to use for their paints, while snails were harvested in Eurasia for the tiny amounts of blue that their bodies would release. And then there was indigo, which was so valuable that American plantations grew it as a cash crop on the backs of African slaves. It wasn't until 1905, when Adolf von Baeyer created a chemical blue dye, that blue could be used for anything and everything--most notably that uniform of workers everywhere, blue jeans"--Amazon.1 a006-008. 0aBluevJuvenile literature. 0aPigmentsvJuvenile literature. 0aColorvJuvenile literature. 0aDyes and dyeingvJuvenile literature. 7aJUVENILE NONFICTION / Art / History.2bisacsh 7aJUVENILE NONFICTION / Concepts / Colors.2bisacsh 7aJUVENILE NONFICTION / People & Places.2bisacsh 7aBlue.2fast0(OCoLC)fst00834915 7aHistory.2fast0(OCoLC)fst01411628 7aJuvenile works.2fast0(OCoLC)fst01411637 7aPictorial works.2fast0(OCoLC)fst01423874 7aInformational works.2lcgft 7aCreative nonfiction.2lcgft 7aPicture books.2lcgft1 aMinter, Daniel,eillustrator. aC0bMOU02221cam a2200517 i 4500001001300000003000600013005001700019008004100036010001700077040006100094019008700155020003100242020001500273020003700288020001500325020002700340035015500367042001400522082001400536092001800550049000900568100003300577245006300610250001900673264012900692300005600821336002600877336003300903337002800936338002700964520021100991521003601202521003801238650003601276650003601312651003501348650003401383650004101417650004101458651004001499655004601539655004501585655002601630700003501656994001201691on1248600028OCoLC20220907043245.0210414e 1984nyua j 000 0 eng c a 2021008867 aNJQ/DLCbengerdacDLCdFTLdQQ3dBDXdOCLCFdTXHLCdMOU a1258216018a1258216454a1301033850a1303827912a1303839245a1322119782a1331150222 a9780399557033q(hardcover) a0399557032 a9780399557040q(library binding) a0399557040 z9780399557057q(ebook) a(OCoLC)1248600028z(OCoLC)1258216018z(OCoLC)1258216454z(OCoLC)1301033850z(OCoLC)1303827912z(OCoLC)1303839245z(OCoLC)1322119782z(OCoLC)1331150222 apccalcac04a523.1223 a523.1bH7773o aMOUC1 aHopkinson, Deborah,eauthor. aC552489 Auto (second date only) Instance 04: Detailed date aFirst edition. 1aNew York :bAnne Schwartz Books, an imprint of Random House Children's Books, a division of Penguin Random House LLC,c2022. a32 unnumbered pages :bcolor illustrations ;c25 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier a"This picture book showcases the unique beauty of our one-and-only universe--its galaxies, stars, and planets--as well as our one-and-only Earth, and the precious life it contains"--cProvided by publisher.1 aAges 4-8.bAnne Schwartz Books.2 aGrades K-1.bAnne Schwartz Books. 0aCosmologyvJuvenile literature. 0aAstronomyvJuvenile literature. 0aUniversevJuvenile literature. 7aSCIENCE / Astronomy.2bisacsh 7aAstronomy.2fast0(OCoLC)fst00819673 7aCosmology.2fast0(OCoLC)fst00880600 7aUniverse.2fast0(OCoLC)fst01922713 7aJuvenile works.2fast0(OCoLC)fst01411637 7aPicture books.2fast0(OCoLC)fst01726789 7aPicture books.2lcgft1 aGroenink, Chuck,eillustrator. aC0bMOU02075cam a22005058i 4500001001300000003000600013005001700019008004100036010001700077040010100094020003100195020002800226020002700254035002200281041001300303042001400316082001200330092001800342049000900360100003300369240003300402245007900435250002300514264007500537264001100612300005600623336002600679336003300705337002800738338002700766546003100793500006100824521006800885520016800953520017601121650003101297650003601328650002001364655004501384655002701429655002601456700003801482700003701520994001201557on1256589904OCoLC20220907043246.0210611i 1985nyua b 000 1 spa  a 2021020349 aDLCbengerdacDLCdOCLCOdOCLCFdXFFdOQXdOCLCOdS#LdEOSdOCLCOdIAIdBDXdGO3dORXdJTBdMOU a9781947627581q(paperback) a1947627589q(paperback) z9781947627598q(ebook) a(OCoLC)12565899041 aspaheng apccalcac00a[E]223 a055.2bG5899w aMOUC1 aGonzález, Xelena,eauthor.10aWhere wonder grows.lSpanish aC552489 Auto (second date only) Instance 05: Inclusive dates of collection aPrimera edición. 1aNew York :bCinco Puntos Press, an imprint of Lee & Low Books,c[2022] 4c©2022 a36 unnumbered pages :bcolor illustrations ;c22 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier aEn español = In Spanish. a"Una selección de Junior Literary Guild."--Back cover.2 aGrades 2-3.bCinco Puntos Press, an imprint of Lee & Low Books. aTres niñas siguen a su abuela a su jardín, donde examinan su colección de rocas, cristales, conchas y meteoritos y aprenden sobre las maravillas que revelan. aThree girls follow their grandmother into her garden, where they examine her collection of rocks, crystals, shells, and meteorites and learn about the marvels they reveal. 0aGardensvJuvenile fiction. 0aGrandmothersvJuvenile fiction. 0aNature stories. 7aPicture books.2fast0(OCoLC)fst01726789 7aNature fiction.2lcgft 7aPicture books.2lcgft1 aGarcia, Adriana M.,eillustrator.1 aUrquijo-Ruiz, Rita,etranslator. aC0bMOU02654cam a2200637 i 4500001001300000003000600013005001700019008004100036040011100077019001500188020003100203020002800234020003700262020003400299035004100333041001300374043002100387082002500408092001600433049000900449100003300458240003900491245008600530250001900616264004100635264001100676300005600687336002600743336003300769337002800802338002700830546004500857520016600902520014101068650004201209650004101251650003901292650002801331650002901359651003601388650003601424650004401460650003701504650005001541650004701591650003601638650004901674651004601723655003901769655004601808655004501854655002601899700003601925700004301961994001202004on1292634308OCoLC20220907043246.0220119k 1986nyua b 000 f spa d aNjBwBTbengerdacJRQdJRQdOCLCQdIUOdOCLCOdOCLCFdOQXdZP7dOCLCOdJQWdOCLCOdSAPdJTHdQS3dOCLdMOU a1295637539 a9780593381069q(hardcover) a0593381068q(hardcover) a9780593381076q(library binding) a0593381076q(library binding) a(OCoLC)1292634308z(OCoLC)12956375391 aspaheng an-us-flanwcu---04a[E]223/eng/20220107 a468bB3947t aMOUC1 aBehar, Ruth,d1956-eauthor.10aTía Fortuna's new home.lSpanish aC552489 Auto (second date only) Instance 06: Range of years of bulk of collection aFirst edition. 1aNew York :bAlfred A. Knopf,c[2022] 4c©2022 a24 unnumbered pages :bcolor illustrations ;c29 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier aIn Spanish, translated from the English. aHogar significa esperanza en tiempos de cambio. Hogar significa mazal bueno en un nuevo comienzo. Hogar es una llave a las historias de familia que no se ovidan. aEstrella learns about her Cuban and Jewish heritage as she helps her aunt move from her Miami apartment to an assisted living community. 0aCongregate housingvJuvenile fiction. 0aMoving, HouseholdvJuvenile fiction. 0aCuban AmericansvJuvenile fiction. 0aJewsvJuvenile fiction. 0aAuntsvJuvenile fiction. 0aMiami (Fla.)vJuvenile fiction. 0aOlder peoplevJuvenile fiction. 7aOlder people.2fast0(OCoLC)fst01199093 7aAunts.2fast0(OCoLC)fst00821339 7aCongregate housing.2fast0(OCoLC)fst00875173 7aCuban Americans.2fast0(OCoLC)fst00884777 7aJews.2fast0(OCoLC)fst00983135 7aMoving, Household.2fast0(OCoLC)fst01028534 7aFloridazMiami.2fast0(OCoLC)fst01213727 7aFiction.2fast0(OCoLC)fst01423787 7aJuvenile works.2fast0(OCoLC)fst01411637 7aPicture books.2fast0(OCoLC)fst01726789 7aPicture books.2lcgft1 aHolzwarth, Devon,eillustrator.1 aCanetti, Yanitzia,d1967-etranslator. aC0bMOU01729cam a2200397 i 4500001001300000003000600013005001700019008004100036010001700077040003400094019011100128020003100239020001500270020003700285020001500322020002700337035019300364042000800557082001700565092002000582049000900602100003600611245006400647250001900711264005500730300005600785336002600841337002800867338002700895520023600922521004501158521004701203650003401250700003501284994001201319on1240826518OCoLC20220907043246.0210220m 1987nyu j 000 0 eng c a 2021005438 aLBSOR/DLCbengerdacDLCdMOU a1237100763a1237101638a1291887305a1294406781a1304472368a1305201334a1313835603a1320869729a1322459412 a9780593176627q(hardcover) a0593176626 a9780593176665q(library binding) a0593176669 z9780593176658q(ebook) a(OCoLC)1240826518z(OCoLC)1237100763z(OCoLC)1237101638z(OCoLC)1291887305z(OCoLC)1294406781z(OCoLC)1304472368z(OCoLC)1305201334z(OCoLC)1313835603z(OCoLC)1320869729z(OCoLC)1322459412 apcc00a320.01/1223 a320.011bB4694j aMOUC1 aBharara, Preet,d1968-eauthor. aC552489 Auto (second date only) Instance 07: Multiple dates aFirst edition. 1aNew York :bCrown Books for Young Readers,c[2021] a30 unnumbered pages :bcolor illustrations ;c29 cm atextbtxt2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier a"Introduce the concept of justice to young people with this picture book by former U.S. Attorney for the Southern District of New York and New York Times bestselling author of Doing Justice, Preet Bharara"--cProvided by publisher. aAges 4-8bCrown Books for Young Readers. aGrades K-1bCrown Books for Young Readers. 0aJusticevJuvenile literature.1 aCornelison, Sue,eillustrator. aC0bMOU02733cam a2200589 i 4500001001300000003000600013005001700019008004100036010001700077040011800094020003100212020002800243020003700271020003400308020003700342035002200379042000800401082001400409092001700423049000900440100004200449245006300491250001900554264004500573264001100618300005600629336002600685336003300711337002800744338002700772520014400799520044400943521003601387521003801423650004201461650004501503650003301548650003501581650005801616650004401674650004301718650005201761650005001813650004701863650003801910650005001948655004601998655003202044655002602076700002902102994001202131on1227789622OCoLC20220907043246.0201027n 1988nyua j 000 0 eng  a 2020046340 aDLCbengerdacDLCdOCLCOdOCLCFdOI6dSO$dUAPdOCLCOdGO3dLMJdZ#6dOCLCOdVP@dFHPdRCLdYDXdEHHdTXHLSdMOU a9780593178638q(hardcover) a0593178637q(hardcover) a9780593178645q(library binding) a0593178645q(library binding) z9780593178652q(electronic book) a(OCoLC)1227789622 apcc00a305.3223 a305.3bG781p aMOUC1 aGravel, Elise,eauthor,eillustrator. aC552489 Auto (second date only) Instance 08: Dates unknown aFirst edition. 1aNew York :bAnne Schwartz Books,c[2022] 4c©2022 a32 unnumbered pages :bcolor illustrations ;c26 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier a"An easy-to-grasp picture book, exploring questions relating to gender identity, sexual orientation, and sexism."--cProvided by publisher. a"Is it okay for boys to cry? Can girls be strong? Should girls and boys be given different toys to play with and different clothes to wear? Should we all feel free to love whoever we choose to love? In this incredibly kid-friendly and easy-to-grasp picture book, author-illustrator Elise Gravel and transgender collaborator Mykaell Blais raise these questions and others relating to gender roles, acceptance, and stereotyping." --cAmazon.1 aAges 4-8.bAnne Schwartz Books.2 aGrades K-1.bAnne Schwartz Books. 0aGender identityvJuvenile literature. 0aSexual orientationvJuvenile literature. 0aSexismvJuvenile literature. 0aSex rolevJuvenile literature. 0aStereotypes (Social psychology)vJuvenile literature. 0aSexual minoritiesvJuvenile literature. 7aJUVENILE NONFICTION / LGBTQ+.2bisacsh 7aJUVENILE NONFICTION / Concepts / Body.2bisacsh 7aJUVENILE NONFICTION / Social Topics.2bisacsh 7aGender identity.2fast0(OCoLC)fst00939593 7aSexism.2fast0(OCoLC)fst01114686 7aSexual orientation.2fast0(OCoLC)fst01114902 7aJuvenile works.2fast0(OCoLC)fst01411637 7aInformational works.2lcgft 7aPicture books.2lcgft1 aBlais, Mykaell,eauthor. aC0bMOU03722cam a2200685 i 4500001001300000003000600013005001700019008004100036040009400077019008700171020003700258020003400295020003700329020003400366020002700400035015500427037010700582082001500689092002000704049000900724100003700733245013200770246002900902246005800931250001900989264005501008264001101063300005601074336002601130336003301156337002801189338002701217521005301244520065401297500002001951650003801971650005002009650006702059650004702126650004702173650004602220651005102266650005102317650003902368650006402407650005502471650003802526650003902564651004302603650004602646650004502692650005802737655004602795655004702841655005402888655003502942655003002977655001703007994001203024on1258219212OCoLC20220907043246.0210701p 1989nyua c 001 0 eng d aYDXbengerdacYDXdZACdOCLCOdLJWdNZ1dOCLCFdUAPdILCdOCLCOdILCdCLEdETCdFHPdMOU a1258216564a1295225270a1299241804a1312130830a1319169605a1320869268a1331077619 a9780593450376q(library binding) a059345037Xq(library binding) a9780593450314q(trade paperback) a0593450310q(trade paperback) z9780593516126q(ebook) a(OCoLC)1258219212z(OCoLC)1258216564z(OCoLC)1295225270z(OCoLC)1299241804z(OCoLC)1312130830z(OCoLC)1319169605z(OCoLC)1320869268z(OCoLC)1331077619 bRandom House Childrens Books, Attn Order Entry 400 Hahn rd, Westminister, MD, USA, 21157nSAN 201-397504a031.02223 a031.02bB4177to aMOUC1 aBellows, Melina Gerosa,eauthor. aC552489 Auto (second date only) Instance 09: Date of distribution/release/issue and production/recording session when different3 a101 odd and awesome Q&As30aOne hundred one wild and weird questions and answers. aFirst edition. 1aNew York :bRandom House Children's Books,c[2022] 4c©2022 a215 pages :billustrations (chiefly color) ;c18 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier8 aFor ages 8 to 12.bRandom House Children's Books a"Can pigeons do math? How long would it take to drive to the moon? What happens when a seahorse gets angry? Discover the answers to these questions and more in this kid-friendly book of fun, fascinating Q&As! Got a random question? This book has the answer! Filled with cool photos and crazy curiosities, Totally Random Questions Volume 2 presents snack-sized answers to a series of wacky and fascinating questions about our wonderfully weird world! Kids will love testing their knowledge and stumping their friends with the unlikely info they'll find inside covering animals, science, sports, food, pop culture, and more"--cProvided by publisher. aIncludes index. 0aChildren's questions and answers. 0aCuriosities and wondersvJuvenile literature. 0aCuriosities and wondersvPictorial worksvJuvenile literature. 0aAnimalsxMiscellaneavJuvenile literature. 0aSciencexMiscellaneavJuvenile literature. 0aNaturexMiscellaneavJuvenile literature. 0aOuter spacexMiscellaneavJuvenile literature. 0aAnimalsvPictorial worksvJuvenile literature. 7aAnimals.2fast0(OCoLC)fst00809468 7aChildren's questions and answers.2fast0(OCoLC)fst00856515 7aCuriosities and wonders.2fast0(OCoLC)fst00885285 7aNature.2fast0(OCoLC)fst01034561 7aScience.2fast0(OCoLC)fst01108176 7aOuter space.2fast0(OCoLC)fst01243437 7aJUVENILE NONFICTION / Reference.2bisacsh 7aJUVENILE NONFICTION / Concepts.2bisacsh 7aJUVENILE NONFICTION / Curiosities & Wonders.2bisacsh 7aJuvenile works.2fast0(OCoLC)fst01411637 7aPictorial works.2fast0(OCoLC)fst01423874 7aTrivia and miscellanea.2fast0(OCoLC)fst01921748 7aTrivia and miscellanea.2lcgft 7aIllustrated works.2lcgft 7aFAQs.2lcgft aC0bMOU02396cam a2200457 i 4500001001300000003000600013005001700019008004100036040008900077019001500166020003100181020002800212035004100240082001500281092001900296049000900315100003700324245006700361246002800428246004000456250001900496264005500515264001100570300005600581336002600637336003300663337002800696338002700724520076000751500002001511650003801531650005001569650006401619650005501683655003601738655004601774655005401820655003501874655001701909994001201926on1258216098OCoLC20220907043246.0210701q 1990nyua j 001 0 eng d aYDXbengerdacYDXdZACdOCLCOdNZ1dOCLCFdUAPdILCdOCLCOdSPPdHCOdETCdJQFdMOU a1258217083 a9780593450369q(hardcover) a0593450361q(hardcover) a(OCoLC)1258216098z(OCoLC)125821708304a031.02223 a031.02bB4177t aMOUC1 aBellows, Melina Gerosa,eauthor. aC552489 Auto (second date only) Instance 10: Questionable date30a101 wild and weird Q&As3 aOne hundred one wild and weird Q&As aFirst edition. 1aNew York :bRandom House Children's Books,c[2022] 4c©2022 a215 pages :billustrations (chiefly color) ;c18 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier a"Are there volcanoes in space? Is a cloud heavier than an elephant? Why don't woodpeckers get concussions? Discover the answers to these questions and more in this kid-friendly book of fun, fascinating Q&As! Got a random question? This book has the answer! Packed with surprising facts and colorful photos, Totally Random Questions, Volume 1 presents snack-sized answers to a series of wacky, weird, but always amazing questions about our wonderfully wild world! Kids will love testing their knowledge and stumping their friends with the unlikely info they'll find inside covering animals, science, sports, food, pop culture, and more. Written and designed to make any kid an instant genius--and maybe even a few parents too!"--cProvided by publisher. aIncludes index. 0aChildren's questions and answers. 0aCuriosities and wondersvJuvenile literature. 7aChildren's questions and answers.2fast0(OCoLC)fst00856515 7aCuriosities and wonders.2fast0(OCoLC)fst00885285 7aFAQs.2fast0(OCoLC)fst01919925 7aJuvenile works.2fast0(OCoLC)fst01411637 7aTrivia and miscellanea.2fast0(OCoLC)fst01921748 7aTrivia and miscellanea.2lcgft 7aFAQs.2lcgft aC0bMOU03686cam a2200637 i 4500001001300000003000600013005001700019008004100036010001700077040013300094019005100227020003100278020002800309020003100337020002800368024001500396035009800411041001300509043001200522082002500534092002100559049000900580100003300589245008800622250001900710264014000729264001100869300005000880336002600930336003300956337002800989338002701017500004701044504005301091520091301144521001502057521002402072600004602096650009102142650007302233650007102306650005302377650007802430650010102508600005002609650004702659650006702706651004802773655004302821655004602864655004502910655002402955655002602979700003103005994001203036on1259586675OCoLC20220907043246.0210710r 1991nyua j b 000 0beng d a 2022286396 aYDXbengerdacYDXdBDXdGZDdJASdOCLCOdGO3dJQWdOCLCFdOCLCOdJTHdEHHdYU6dZGXdGK8dUKMGBdFHPdTXSCHdJPLdOCLdILCdMOU a1259587054a1294392743a1302878783a1314381295 a9780593121924q(hardcover) a0593121929q(hardcover) a9780593121931q(lib. bdg.) a0593121937q(lib. bdg.)8 a0028369131 a(OCoLC)1259586675z(OCoLC)1259587054z(OCoLC)1294392743z(OCoLC)1302878783z(OCoLC)13143812950 aengachi aa-cc-hk04a791.4302/8092aB223 a927.9143bC4215g aMOUC1 aGiang, Kristen Mai,eauthor. aC552489 Auto (second date only) Instance 11: Reprint/reissue date and original date aFirst edition. 1aNew York :bCrown Books for Young Readers, an imprint of Random House Children's Books, a division of Penguin Random House LLC,c[2022] 4c©2022 a34 pages :bcolor illustrations ;c24 x 29 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier aIncludes a glossary of Chinese characters. aIncludes bibliographical references (page [37]). a"An action-packed picture book biography about Hollywood actor, stuntman, and beloved superstar Jackie Chan! A great read for Chan fans hoping to share their love of Rush Hour, Supercop, and Jackie's original brand of martial arts with their ready-to-tumble tyke. Pow! Bam! Wow! Jackie Chan has been making movies and amazing audiences with his original and comedic stunts for decades. Pow! Bam! Ow! But before he was an international star, Jackie grew up in relative poverty in China, studied martial arts at the grueling China Drama Academy, and worked for years trying to find his way in film. Pow! Bam! How? Twist, tumble, and train alongside martial arts hero Jackie Chan in this picture book biography from lauded author Kristen Mai Giang and illustrator and Hong Kong native Alina Chau. Discover how Jackie used his goofball acrobatics to make a name and a style all his own."--cProvided by publisher1 a4-8 years.2 aGrades preschool-3.10aCheng, Long,d1954-vJuvenile literature. 0aMotion picture actors and actresseszChinazHong KongvBiographyvJuvenile literature. 0aMotion picture actors and actressesvBiographyvJuvenile literature. 0aMartial artistszChinazHong KongvBiographyvJuvenile literature. 0aMartial artistsvBiographyvJuvenile literature. 7aJUVENILE NONFICTIONxBiography & AutobiographyxPerforming Arts.2bisacsh 7aJUVENILE NONFICTIONxPeople & PlaceszUnited StatesxAsian American & Pacific Islander.2bisacsh17aCheng, Long,d1954-2fast0(OCoLC)fst00378913 7aMartial artists.2fast0(OCoLC)fst01010818 7aMotion picture actors and actresses.2fast0(OCoLC)fst01027096 7aChinazHong Kong.2fast0(OCoLC)fst01260796 7aBiographies.2fast0(OCoLC)fst01919896 7aJuvenile works.2fast0(OCoLC)fst01411637 7aPicture books.2fast0(OCoLC)fst01726789 7aBiographies.2lcgft 7aPicture books.2lcgft1 aChau, Alina,eillustrator. aC0bMOU02138cam a22005418i 4500001001300000003000600013005001700019008004100036010001700077040008600094020003100180020002800211020002500239035002200264042000800286043001200294082001800306092001700324049000900341100003100350245008100381250001900462264004100481264001100522300005600533336002600589336003300615337002800648338002700676520020600703504004100909521003200950521003300982600004601015650005401061650005401115600005001169650005901219650004101278651003701319655004901356655004301405655004601448655002401494655003001518700003601548994001201584on1233022138OCoLC20220907043246.0201228s 1992nyua j b 000 0beng  a 2020057959 aDLCbengerdacDLCdOCLCOdOCLCFdOCLCOdOCLdOCLCOdINOdIMDdVIAdUAHdOCLdMOU a9781620149669q(hardcover) a1620149664q(hardcover) z9781620149973q(ebk) a(OCoLC)1233022138 apcc af-gh---00a730.92aB223 a927.3bAn16g aMOUC1 aGoldberg, Alison,eauthor. aC552489 Auto (second date only) Instance 12: Single known date/probable date aFirst edition. 1aNew York :bLee & Low Books,c[2022] 4c©2022 a37 unnumbered pages :bcolor illustrations ;c29 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier a"The life story of Ghanaian sculptor El Anatsui, a highly acclaimed African artist, whose tapestries made from repurposed bottle tops have been exhibited throughout the world"--cProvided by publisher. aIncludes bibliographical references. aAges 7-11bLee & Low Books. aGrades 4-6bLee & Low Books.10aAnatsui, El,d1944-vJuvenile literature. 0aSculptorszGhanavBiographyvJuvenile literature. 0aBottle caps as art materialvJuvenile literature.17aAnatsui, El,d1944-2fast0(OCoLC)fst00300453 7aBottle caps as art material.2fast0(OCoLC)fst02025510 7aSculptors.2fast0(OCoLC)fst01109473 7aGhana.2fast0(OCoLC)fst01208741 7aIllustrated works.2fast0(OCoLC)fst01423873 7aBiographies.2fast0(OCoLC)fst01919896 7aJuvenile works.2fast0(OCoLC)fst01411637 7aBiographies.2lcgft 7aIllustrated works.2lcgft1 aZunon, Elizabeth,eillustrator. aC0bMOU04280cam a22007098i 4500001001300000003000600013005001700019008004100036010001700077040010900094019005100203020003100254020002800285020003700313020003400350020003100384020002800415020002700443020002400470035009800494042000800592043001200600082003600612092002100648049000900669100004500678245008500723246005000808250001900858264005500877264001100932300005700943336002601000336003301026337002801059338002701087500007501114500018001189504005101369520113401420521004502554521004702599600005002646650006202696650006902758650007502827650006002902650004102962650006303003650004103066650005403107651004503161655004503206655004303251655004603294655002403340655002603364700003503390710004703425710008603472994001203558on1280600448OCoLC20220907043246.0211004t 1993nyuab j b 000 0beng  a 2021043783 aDLCbengerdacDLCdBDXdOCLCFdOCLCOdTP7dON8dOCLCOdYDMdUAPdTOHdUAHdCADdVP@dOCLdBKLdILCdMOU a1280600683a1281134004a1281140297a1313483570 a9780525645856q(hardcover) a0525645853q(hardcover) a9780525645863q(library binding) a0525645861q(library binding) a9780525645887q(paperback) a0525645888q(paperback) a9780525645870q(ebook) a052564587Xq(ebook) a(OCoLC)1280600448z(OCoLC)1280600683z(OCoLC)1281134004z(OCoLC)1281140297z(OCoLC)1313483570 apcc an-us---00a646.5/04092aB223/eng/20211029 a926.465bR25952r aMOUC1 aRhuday-Perkovich, Olugbemisola,eauthor. aC552489 Auto (second date only) Instance 13: Publication date and copyright date30aTrue story of Mae Reeves, hat & history maker aFirst edition. 1aNew York :bCrown Books for Young Readers,c[2022] 4c©2022 a48 pages :bcolor illustrations, color map ;c29 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier a"Smithsonian / National Museum of African American History & Culture." aIncludes interviews with Mae Reeve's daughter, Donna Limerick, and Dr. Reneé S. Anderson, head of collections at the National Museum of African American History and Culture. aIncludes bibliographical references (page 48). a"Mae had a dream to make one-of-a-kind hats. But the path for a Black female designer was unclear, so Mae made a way, leaving her home in the segregated South to study at the Chicago School of Millinery. Now, Mae had the skills, but craved the independence to create her own styles. So Mae found a way. In Philadelphia, she became the first Black woman to own a business on South Street. Whether you were Lena Horne, Ella Fitzgerald, Marian Anderson or a lady from the neighborhood, Mae wanted you to look good and feel special in one of her original hats. A mother, successful entrepreneur, and community advocate, Mae led the way. Published in collaboration with the Smithsonian National Museum of African American History and Culture, acclaimed author Olugbemisola Rhuday-Perkovich (Two Naomis) and award-winning illustrator Andrea Pippins (I Love My Hair) bring the life of fashion entrepreneur and civic organizer Mae Reeves to the page. And when you are done reading, explore Mae's store and styles in person at her permanent exhibit at the National Museum of African American History and Culture"--cProvided by publisher. aAges 5-7bCrown Books for Young Readers. aGrades K-1bCrown Books for Young Readers.10aReeves, Mae,d1912-2016vJuvenile literature. 0aMillineryzUnited StatesvBiographyvJuvenile literature. 0aAfrican American businesspeoplevBiographyvJuvenile literature. 0aMinority businesswomenzUnited StatesvBiographyvJuvenile literature. 0aAfrican American womenvBiographyvJuvenile literature. 7aCRAFTS & HOBBIES / General.2bisacsh 7aAfrican American businesspeople.2fast0(OCoLC)fst00799064 7aMillinery.2fast0(OCoLC)fst01021825 7aMinority businesswomen.2fast0(OCoLC)fst01764043 7aUnited States.2fast0(OCoLC)fst01204155 7aPicture books.2fast0(OCoLC)fst01726789 7aBiographies.2fast0(OCoLC)fst01919896 7aJuvenile works.2fast0(OCoLC)fst01411637 7aBiographies.2lcgft 7aPicture books.2lcgft1 aPippins, Andrea,eillustrator.2 aSmithsonian Institution,esponsoring body.2 aNational Museum of African American History and Culture (U.S.),esponsoring body. aC0bMOU02592cam a2200625 i 4500001001300000003000600013005001700019008004100036010001700077040004700094019001500141020003100156020001500187020002700202035004100229042000800270043001200278082003900290092002200329049000900351100002700360245008400387250002000471264004500491264001100536300005600547336002600603337002800629338002700657521004100684521003700725520012800762500002500890504004100915600003900956650007600995650008001071651008801151651006001239650010001299600004401399650005501443650004701498650004301545650005501588651005701643648002001700655004301720655003901763655004601802655002401848655002601872700005601898994001201954on1287752735OCoLC20220907043246.0211119u 1994nyua j b 000 0beng  a 2021054400 aDLCbengerdacDLCdOCLCFdOCLCOdIULdMOU a1287744569 a9781643796000q(Paperback) a1643796003 z9781643796017q(eBook) a(OCoLC)1287752735z(OCoLC)1287744569 apcc an-us-ca00a979.4/61053092aB223/eng/20211206 a923.62896bM5998k aMOUC1 aKrakow, Kari,eauthor. aC552489 Auto (second date only) Instance 14: Continuing resource status unknown aSecond edition. 1aNew York :bLee & Low Books Inc.,c2022. 4c©2001 a30 unnumbered pages :bcolor illustrations ;c26 cm atextbtxt2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier aAges 6-8 yearsbLee & Low Books Inc. aGrades 2-3bLee & Low Books Inc. a"Picture book biography of Harvey Milk, one of the first openly gay elected officials in the U.S"--cProvided by publisher. aFirst edition: 2001. aIncludes bibliographical references.10aMilk, HarveyvJuvenile literature. 0aPoliticianszCaliforniazSan FranciscovBiographyvJuvenile literature. 0aGay politicianszCaliforniazSan FranciscovBiographyvJuvenile literature. 0aSan Francisco (Calif.)xPolitics and governmenty20th centuryvJuvenile literature. 0aSan Francisco (Calif.)vBiographyvJuvenile literature. 0aGay liberation movementzCaliforniazSan FranciscoxHistoryy20th centuryvJuvenile literature.17aMilk, Harvey.2fast0(OCoLC)fst00079384 7aGay liberation movement.2fast0(OCoLC)fst00939104 7aGay politicians.2fast0(OCoLC)fst00939207 7aPoliticians.2fast0(OCoLC)fst01069915 7aPolitics and government.2fast0(OCoLC)fst01919741 7aCaliforniazSan Francisco.2fast0(OCoLC)fst01204481 7a1900-19992fast 7aBiographies.2fast0(OCoLC)fst01919896 7aHistory.2fast0(OCoLC)fst01411628 7aJuvenile works.2fast0(OCoLC)fst01411637 7aBiographies.2lcgft 7aPicture books.2lcgft1 aGardner, Davidq(David Colby),d1959-eillustrator. aC0bMOU03533cam a2200685 i 4500001001300000003000600013005001700019008004100036010001700077040018000094019012300274020003100397020002800428020003700456020003400493020003700527035021200564042000800776043001200784082001900796092001900815049000900834100002900843245006800872246005100940250001900991264004501010264001101055300005601066336002601122336003301148337002801181338002701209504004101236520015901277586003901436600005501475650007801530650010201608650009601710650007901806651007701885650007301962650007202035650009202107650006902199650007502268650005202343650004902395651005102444647008902495648002002584655004502604655004302649655004602692655002402738655002602762700004702788994001202835on1111658457OCoLC20220907043246.0190726| 1995nyua j b 000 0deng  a 2019028118 aDLCbengerdacDLCdOCLCFdOCLCOdOCLdBDXdYDXdOCLdOQXdFHPdFMGdUKMGBdLMJdILCdTCHdGO3dEHHdDLMdJQWdOCLCOdOQXdOCLdMNMdOCLCOdNTEdOCLCQdYDXdETCdTY7dOCLdMOU a1287260216a1289264174a1289271916a1290247788a1292921934a1293655871a1303566120a1308756115a1311956420a1322309922 a9781524720643q(hardcover) a152472064Xq(hardcover) a9781524720650q(library binding) a1524720658q(library binding) z9781524720667q(electronic book) a(OCoLC)1111658457z(OCoLC)1287260216z(OCoLC)1289264174z(OCoLC)1289271916z(OCoLC)1290247788z(OCoLC)1292921934z(OCoLC)1293655871z(OCoLC)1303566120z(OCoLC)1308756115z(OCoLC)1311956420z(OCoLC)1322309922 apcc an-us-al00a323.092aB223 a001.234bG423r aMOUC1 aRockliff, Mara,eauthor. aC552489 Auto (second date only) Instance 15: No attempt to code30aGeorgia Gilmore and the Montgomery Bus Boycott aFirst edition. 1aNew York :bRandom House Studio,c[2022] 4c©2022 a32 unnumbered pages :bcolor illustrations ;c29 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier aIncludes bibliographical references. a"A picture book biography about Georgia Gilmore, the woman whose cooking helped feed and fund the Montgomery bus boycott of 1956"--cProvided by publisher aA Junior Library Guild Selections.10aGilmore, Georgia,d1920-1990vJuvenile literature. 0aMontgomery Bus Boycott, Montgomery, Ala., 1955-1956vJuvenile literature. 0aAfrican American women civil rights workerszAlabamazMontgomeryvBiographyvJuvenile literature. 0aAfrican American civil rights workerszAlabamazMontgomeryvBiographyvJuvenile literature. 0aCivil rights workerszAlabamazMontgomeryvBiographyvJuvenile literature. 0aMontgomery (Ala.)xSocial conditionsy20th centuryvJuvenile literature. 7aJUVENILE NONFICTIONxBiography & AutobiographyxHistorical.2bisacsh 7aJUVENILE NONFICTIONzUnited StatesxHistoryy20th century.2bisacsh 7aJUVENILE NONFICTIONxPeople & PlaceszUnited StatesxAfrican American & Black.2bisacsh 7aAfrican American civil rights workers.2fast0(OCoLC)fst00799093 7aAfrican American women civil rights workers.2fast0(OCoLC)fst00799481 7aCivil rights workers.2fast0(OCoLC)fst00862721 7aSocial conditions.2fast0(OCoLC)fst01919811 7aAlabamazMontgomery.2fast0(OCoLC)fst01202689 7aMontgomery Bus Boycottc(Montgomery, Alabama :d1955-1956)2fast0(OCoLC)fst01755412 7a1900-19992fast 7aPicture books.2fast0(OCoLC)fst01726789 7aBiographies.2fast0(OCoLC)fst01919896 7aJuvenile works.2fast0(OCoLC)fst01411637 7aBiographies.2lcgft 7aPicture books.2lcgft1 aChristie, R. Gregory,d1971-eillustrator. aC0bMOU03039cam a2200625 i 4500001001300000003000600013005001700019008004100036010001700077040016200094019008700256020003100343020002800374020003700402020003400439020003700473035015500510042000800665043002100673082002200694092002000716049000900736100004800745245006300793250001900856264004500875264001100920300006100931336002600992336003301018337002801051338002701079504004101106520014601147521003601293521003801329600004301367610007001410650007601480650007501556650005501631650007201686650009201758650013001850610006401980650006902044650006002113651004002173655004302213655004602256655002402302655002602326700004902352994001202401on1200834171OCoLC20220907043246.0201010 1996nyua j b 000 0beng  a 2020032889 aLBSOR/DLCbengerdacDLCdOCLCOdOCLCFdUKMGBdILCdOCLCOdFSPdYDXdBDXdWIQdYXFdRNLdOCLCOdTCHdGO3dYDXdEHHdOCLCOdY32dOCLCQdOCLCOdVP@dTXHLSdMOU a1236090420a1236090796a1287262119a1290169005a1291112674a1303638372a1303804504 a9780593306505q(hardcover) a0593306503q(hardcover) a9780593306512q(library binding) a0593306511q(library binding) z9780593306529q(electronic book) a(OCoLC)1200834171z(OCoLC)1236090420z(OCoLC)1236090796z(OCoLC)1287262119z(OCoLC)1290169005z(OCoLC)1291112674z(OCoLC)1303638372z(OCoLC)1303804504 apcc an-us---an-us-md00a328.73/092aB223 a923.673bC9124w aMOUC1 aWeatherford, Carole Boston,d1956-eauthor. aC552489 Auto (second date only) Instance 16: Not specified aFirst edition. 1aNew York :bRandom House Studio,c[2021] 4c©2021 a32 unnumbered pages :bcolor illustrations ;c26 x 27 cm atextbtxt2rdacontent astill imagebsti2rdacontent aunmediatedbn2rdamedia avolumebnc2rdacarrier aIncludes bibliographical references. a"A picture book biography of Elijah Cummings, outlining major events in his childhood, career and fight for justice"--cProvided by publisher1 aAges 6-9.bRandom House Studio.2 aGrades 2-3.bRandom House Studio.10aCummings, ElijahvJuvenile literature.10aUnited States.bCongress.bHousevBiographyvJuvenile literature. 0aAfrican American legislatorszMarylandvBiographyvJuvenile literature. 0aAfrican American civil rights workersvBiographyvJuvenile literature. 0aAfrican AmericansvBiographyvJuvenile literature. 7aJUVENILE NONFICTIONxBiography & AutobiographyxPolitical.2bisacsh 7aJUVENILE NONFICTIONxPeople & PlaceszUnited StatesxAfrican American & Black.2bisacsh 7aJUVENILE NONFICTIONxReligiousxChristianxBiography & Autobiography (see also Biography & AutobiographyxReligious)2bisacsh17aUnited States.bCongress.bHouse.2fast0(OCoLC)fst00536930 7aAfrican American civil rights workers.2fast0(OCoLC)fst00799093 7aAfrican American legislators.2fast0(OCoLC)fst00799220 7aMaryland.2fast0(OCoLC)fst01204739 7aBiographies.2fast0(OCoLC)fst01919896 7aJuvenile works.2fast0(OCoLC)fst01411637 7aBiographies.2lcgft 7aPicture books.2lcgft1 aFreeman, Laurac(Illustrator),eillustrator. aC0bMOU \ No newline at end of file