From be0419ebd73a435121b6ede6478af27696b3ce7b Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Fri, 8 May 2026 16:10:58 -0700 Subject: [PATCH 1/7] Removed ExternalResourcePreview in favor of PreviewResource previously, fix in statement-of-responsibility-marc --- .../LD Edit/statement-of-responsibility-marc.cy.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cypress/e2e/linked-data/LD Edit/statement-of-responsibility-marc.cy.js b/cypress/e2e/linked-data/LD Edit/statement-of-responsibility-marc.cy.js index 74ad63b1c0..10e4ef1ef3 100644 --- a/cypress/e2e/linked-data/LD Edit/statement-of-responsibility-marc.cy.js +++ b/cypress/e2e/linked-data/LD Edit/statement-of-responsibility-marc.cy.js @@ -9,7 +9,7 @@ import TopMenu from '../../../support/fragments/topMenu'; import Users from '../../../support/fragments/users/users'; import EditResource from '../../../support/fragments/linked-data/editResource'; -import ExternalResourcePreview from '../../../support/fragments/linked-data/externalResourcePreview'; +import PreviewResource from '../../../support/fragments/linked-data/previewResource'; import InstanceProfileModal from '../../../support/fragments/linked-data/instanceProfileModal'; import Marigold from '../../../support/fragments/linked-data/marigold'; import NewInstance from '../../../support/fragments/linked-data/newInstance'; @@ -98,8 +98,8 @@ describe('Citation: Statement of Responsibility - Inventory / View MARC', () => // Import MARC bib into Marigold InventoryInstances.searchByTitle(testData.uniqueMarcTitle); InventoryInstance.editInstanceInMG(); - ExternalResourcePreview.waitLoading(); - ExternalResourcePreview.clickContinueButton(); + PreviewResource.waitLoading(); + PreviewResource.clickContinue(); EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE); EditResource.clickCloseResourceButton(); From d5366c39e6583d938ac467fcb2187b9906b4a235 Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Fri, 8 May 2026 17:21:20 -0700 Subject: [PATCH 2/7] Add nearly complete test for language code with supporting fixture and methods; updated a method name and the lone test that uses it --- .../LD Edit/classification-marc.cy.js | 14 +- .../LD Edit/language-code-marc.cy.js | 196 ++++++++++++++++++ cypress/fixtures/marcFileForC499692.mrc | 1 + .../fragments/inventory/instanceRecordEdit.js | 7 + .../fragments/linked-data/editResource.js | 18 ++ .../fragments/linked-data/searchAndFilter.js | 9 + 6 files changed, 238 insertions(+), 7 deletions(-) create mode 100644 cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js create mode 100644 cypress/fixtures/marcFileForC499692.mrc diff --git a/cypress/e2e/linked-data/LD Edit/classification-marc.cy.js b/cypress/e2e/linked-data/LD Edit/classification-marc.cy.js index 9fc6292f16..2cf5982285 100644 --- a/cypress/e2e/linked-data/LD Edit/classification-marc.cy.js +++ b/cypress/e2e/linked-data/LD Edit/classification-marc.cy.js @@ -203,35 +203,35 @@ describe('Citation: check classification number MARC codes', () => { // Review editor sections EditResource.clickEditWork(); EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK); - EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType); + EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType); EditResource.checkTextValueOnField(resourceData.dewey1Number, fieldData.classificationNumber); EditResource.checkTextValueOnField(resourceData.dewey1Additional, fieldData.classificationAdditional); EditResource.checkTextValueOnField(resourceData.dewey1Edition, fieldData.classificationEdition); EditResource.checkTextValueOnField(resourceData.dewey1Full, fieldData.classificationFull); EditResource.checkTextValueOnDisabledField(resourceData.dnlmAgency, fieldData.classificationAssigner); - EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType); + EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType); EditResource.checkTextValueOnField(resourceData.dewey2Number, fieldData.classificationNumber); EditResource.checkTextValueOnField(resourceData.dewey2Additional, fieldData.classificationAdditional); EditResource.checkTextValueOnField(resourceData.dewey2Edition, fieldData.classificationEdition); EditResource.checkTextValueOnField(resourceData.dewey2Full, fieldData.classificationFull); EditResource.checkTextValueOnDisabledField(resourceData.assigningAgency, fieldData.classificationAssigner); - EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType); + EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType); EditResource.checkTextValueOnField(resourceData.dewey3Number, fieldData.classificationNumber); EditResource.checkTextValueOnField(resourceData.dewey3Additional, fieldData.classificationAdditional); EditResource.checkTextValueOnField(resourceData.dewey3Edition, fieldData.classificationEdition); EditResource.checkTextValueOnField(resourceData.dewey3Full, fieldData.classificationFull); EditResource.checkTextValueOnDisabledField(resourceData.caoonlAgency, fieldData.classificationAssigner); - EditResource.checkDropdownTextValue(fieldData.lccn, fieldData.classificationType); + EditResource.checkSectionDropdownTextValue(fieldData.lccn, fieldData.classificationType); EditResource.checkTextValueOnField(resourceData.lccn1Number, fieldData.classificationNumber); EditResource.checkTextValueOnField(resourceData.lccn1Additional, fieldData.classificationAdditional); EditResource.checkTextValueOnDisabledField(resourceData.assigningAgency, fieldData.classificationAgency); EditResource.checkLabelOnSimpleField(resourceData.lccn1Used, fieldData.classificationUsed); - EditResource.checkDropdownTextValue(fieldData.lccn, fieldData.classificationType); + EditResource.checkSectionDropdownTextValue(fieldData.lccn, fieldData.classificationType); EditResource.checkTextValueOnField(resourceData.lccn2Number, fieldData.classificationNumber); EditResource.checkTextValueOnField(resourceData.lccn2Additional, fieldData.classificationAdditional); EditResource.checkTextValueOnDisabledField(resourceData.assigningAgency, fieldData.classificationAgency); EditResource.checkLabelOnSimpleField(resourceData.lccn2Used, fieldData.classificationUsed); - EditResource.checkDropdownTextValue(fieldData.lccn, fieldData.classificationType); + EditResource.checkSectionDropdownTextValue(fieldData.lccn, fieldData.classificationType); EditResource.checkTextValueOnField(resourceData.lccn3Number, fieldData.classificationNumber); EditResource.checkTextValueOnField(resourceData.lccn3Additional, fieldData.classificationAdditional); EditResource.checkTextValueOnDisabledField('', fieldData.classificationAgency); @@ -283,7 +283,7 @@ describe('Citation: check classification number MARC codes', () => { SearchAndFilter.checkSearchResultsByTitle(resourceData.marigoldTitle); Marigold.clickEditWorkFromSearch(); EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK); - EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType); + EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType); EditResource.checkTextValueOnField(resourceData.marigoldDeweyNumber, fieldData.classificationNumber); EditResource.checkTextValueOnField(resourceData.marigoldDeweyAdditional, fieldData.classificationAdditional); EditResource.checkTextValueOnField(resourceData.marigoldDeweyEdition, fieldData.classificationEdition); diff --git a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js new file mode 100644 index 0000000000..254864e750 --- /dev/null +++ b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js @@ -0,0 +1,196 @@ +import { DEFAULT_JOB_PROFILE_NAMES, EDIT_RESOURCE_HEADINGS } from '../../../support/constants'; +//import Permissions from '../../../support/dictionary/permissions'; +import getRandomPostfix from '../../../support/utils/stringTools'; +import FileManager from '../../../support/utils/fileManager'; + +import DataImport from '../../../support/fragments/data_import/dataImport'; +import InventoryInstance from '../../../support/fragments/inventory/inventoryInstance'; +import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances'; +import InstanceRecordEdit from '../../../support/fragments/inventory/instanceRecordEdit'; +import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter'; +import TopMenu from '../../../support/fragments/topMenu'; +import Users from '../../../support/fragments/users/users'; + +import EditResource from '../../../support/fragments/linked-data/editResource'; +import InstanceProfileModal from '../../../support/fragments/linked-data/instanceProfileModal'; +import Marigold from '../../../support/fragments/linked-data/marigold'; +import PreviewResource from '../../../support/fragments/linked-data/previewResource'; +import SearchAndFilter from '../../../support/fragments/linked-data/searchAndFilter'; +import ViewMarc from '../../../support/fragments/linked-data/viewMarc'; +import Work from '../../../support/fragments/linked-data/work'; +import WorkProfileModal from '../../../support/fragments/linked-data/workProfileModal'; + +import { + MARIGOLD_CAPABILITIES, + MARIGOLD_CAPABILITY_SETS, +} from '../../../support/dictionary/marigoldCapabilities'; + +let user; + +describe('Citation: check language MARC codes', () => { + const testData = { + workId: null, + instanceId: null, + marcFilePath: 'marcFileForC499692.mrc', + modifiedMarcFile: `C499692 editedMarcFile${getRandomPostfix()}.mrc`, + marcFileName: `C499692 marcFile${getRandomPostfix()}.mrc`, + uniqueInventoryTitle: `Language code inventory ${getRandomPostfix()}`, + uniqueMarigoldWorkTitle: `Lanuage code Marigold ${getRandomPostfix()}`, + uniqueMarigoldInstanceTitle: `Lanuage code Marigold ${getRandomPostfix()}`, + }; + + const resourceData = { + inventoryTitle: testData.uniqueInventoryTitle, + marigoldWorkTitle: testData.uniqueMarigoldWorkTitle, + marigoldInstanceTitle: testData.uniqueMarigoldInstanceTitle, + languagesSubset: [ + 'Akkadian (akk)', + 'Bemba (bem)', + 'Croatian (hrv)', + 'Kanuri (kau)', + 'Nepali (nep)', + 'Uighur (uig)', + 'Zaza (zza)', + ], + languageRelationships: [ + 'Primary source language', + 'Summary or abstract', + 'Sung or spoken text', + 'Librettos', + 'Table of contents', + 'Accompanying material other than librettos and transcripts', + 'Original language', + 'Intertitles', + 'Subtitles', + 'Intermediate translation', + 'Original accompanying materials other than librettos', + 'Original libretto', + 'Captions', + 'Accessible audio', + 'Accessible visual language (non-textual)', + 'Accompanying transcripts for audiovisual material', + ], + }; + + before('Create test data', () => { + DataImport.editMarcFile( + testData.marcFilePath, + testData.modifiedMarcFile, + ['Placeholder Title Language Code'], + [testData.uniqueInventoryTitle], + ); + cy.getAdminToken(); + + cy.createTempUser([]).then((userProperties) => { + user = userProperties; + //cy.assignPermissionsToExistingUser(user.userId, [Permissions.inventoryAll.gui]); + cy.assignCapabilitiesToExistingUser( + user.userId, + MARIGOLD_CAPABILITIES, + MARIGOLD_CAPABILITY_SETS, + ); + }); + + DataImport.uploadFileViaApi( + testData.modifiedMarcFile, + testData.marcFileName, + DEFAULT_JOB_PROFILE_NAMES.CREATE_INSTANCE_AND_SRS, + ); + }); + + after('Delete test data', () => { + FileManager.deleteFile(`cypress/fixtures/${testData.modifiedMarcFile}`); + cy.getAdminToken(); + InventoryInstances.deleteFullInstancesByTitleViaApi(resourceData.inventoryTitle); + InventoryInstances.deleteFullInstancesByTitleViaApi(resourceData.marigoldInstanceTitle); + Work.getInstancesByTitle(resourceData.inventoryTitle).then((instances) => { + const filteredInstances = instances.filter( + (element) => element.titles[0].value === resourceData.inventoryTitle, + ); + Work.deleteById(filteredInstances[0].id); + }); + Work.getIdByTitle(resourceData.inventoryTitle).then((id) => Work.deleteById(id)); + if (testData.instanceId) Work.deleteInstanceViaApi(testData.instanceId); + if (testData.workId) Work.deleteById(testData.workId); + Users.deleteViaApi(user.userId); + }); + + beforeEach(() => { + cy.login(user.username, user.password, { + path: TopMenu.inventoryPath, + waiter: InventoryInstances.waitContentLoading, + authRefresh: true, + }); + }); + + it( + 'C499692 Marigold - Language Code Work / Inventory / View MARC', + { tags: ['criticalPath', 'citation', 'C499692', 'marigold'] }, + () => { + // Edit instance from Inventory + InventoryInstances.searchByTitle(resourceData.inventoryTitle); + InventoryInstance.editInstanceInMG(); + PreviewResource.waitLoading(); + PreviewResource.clickContinue(); + EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE); + EditResource.clickEditWork(); + EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK); + + // Check work language fields + EditResource.checkLabelOnSimpleField('English (eng)', 'Language'); + EditResource.checkDropdownTextValue('Primary source language', 'Language relationship'); + EditResource.checkSimpleFieldDropdownContainsOptions('Language', resourceData.languagesSubset); + EditResource.checkDropdownContainsOptions('Language relationship', resourceData.languageRelationships); + + // Review MARC + EditResource.editInstanceFormViaActions(); + EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE); + EditResource.viewMarc(); + ViewMarc.waitLoading(); + ViewMarc.checkMarcFieldContainsDataAtPosition('008', 36, 'eng'); + ViewMarc.checkMarcFieldIndicators('041', ' '); + ViewMarc.checkMarcFieldContainsData('041', '$a eng'); + + // Create new work and instance + ViewMarc.closeMarcView(); + EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE); + EditResource.clickCloseResourceButton(); + Marigold.waitLoading(); + Marigold.openNewResourceForm(); + WorkProfileModal.waitLoading(); + WorkProfileModal.selectDefaultOption(); + EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.NEW_WORK); + EditResource.setValueForTheField(testData.uniqueMarigoldWorkTitle, 'Preferred Title for Work'); + EditResource.setValueForSectionSimpleField('English (eng)', 'Language'); + // Primary source language is already the default language relationship selection + EditResource.saveAndKeepEditingWithId(({ resourceId }) => { + testData.workId = resourceId; + }); + EditResource.openNewInstanceFormViaNewInstanceButton(); + InstanceProfileModal.waitLoading(); + InstanceProfileModal.selectDefaultOption(); + EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.NEW_INSTANCE); + EditResource.setValueForTheField(testData.uniqueMarigoldInstanceTitle, 'Main Title'); + EditResource.saveAndKeepEditingWithId(({ resourceId }) => { + testData.instanceId = resourceId; + }); + EditResource.clickCloseResourceButton(); + + Marigold.waitLoading(); + SearchAndFilter.searchResourceByTitle(resourceData.marigoldWorkTitle); + SearchAndFilter.verifySearchResultField('eng'); + SearchAndFilter.openSearchResultPreviewByTitle(resourceData.marigoldWorkTitle); + SearchAndFilter.waitPreviewLoading(); + EditResource.checkPreviewSectionContainsLink('Language code', 'Language', 'English', 'http://id.loc.gov/vocabulary/languages/eng'); + + // Review in inventory + cy.visit(TopMenu.inventoryPath); + InventoryInstances.waitContentLoading(); + //InventorySearchAndFilter.bySource('LINKED_DATA'); + InventoryInstances.searchByTitle(resourceData.marigoldInstanceTitle); + InventoryInstance.editInstance(); + InstanceRecordEdit.waitLoading(); + //InstanceRecordEdit.verifyLanguage('English'); + }, + ); +}); diff --git a/cypress/fixtures/marcFileForC499692.mrc b/cypress/fixtures/marcFileForC499692.mrc new file mode 100644 index 0000000000..95580a1347 --- /dev/null +++ b/cypress/fixtures/marcFileForC499692.mrc @@ -0,0 +1 @@ +00182naa a2200073uu 4500001001400000005001700014008004100031245003600072in0000000070520260508181845.2260508| ||| | eng  aPlaceholder Title Language Code \ No newline at end of file diff --git a/cypress/support/fragments/inventory/instanceRecordEdit.js b/cypress/support/fragments/inventory/instanceRecordEdit.js index 18d6fbd30b..bcdadc29ce 100644 --- a/cypress/support/fragments/inventory/instanceRecordEdit.js +++ b/cypress/support/fragments/inventory/instanceRecordEdit.js @@ -37,6 +37,8 @@ const staffSuppressCheckbox = Checkbox({ name: 'staffSuppress' }); const previoslyHeldCheckbox = Checkbox({ name: 'previouslyHeld' }); const setForDeletionChecbox = Checkbox({ name: 'deleted' }); const instanceStatusTerm = Select('Instance status term'); +const descriptiveDataAccordion = Accordion('Descriptive data'); +const languageSelect = Select('Language*'); const addStatisticalCodeButton = Button('Add statistical code'); const addNatureOfContentButton = Button('Add nature of content'); const addFormatsButton = Button('Add format'); @@ -645,6 +647,11 @@ export default { cy.expect(Select('Nature of content term').has({ checkedOptionText: including(nature) })); }, + verifyLanguage(language) { + cy.do(descriptiveDataAccordion.clickHeader()); + cy.expect(languageSelect.has({ checkedOptionText: including(language) })); + }, + verifyParentInstance(title, hrid) { cy.expect([ parentInstanceFieldSet diff --git a/cypress/support/fragments/linked-data/editResource.js b/cypress/support/fragments/linked-data/editResource.js index b26150d324..17ef18d2dd 100644 --- a/cypress/support/fragments/linked-data/editResource.js +++ b/cypress/support/fragments/linked-data/editResource.js @@ -334,6 +334,15 @@ export default { ).should('be.visible'); }, + checkDropdownContainsOptions(field, optionLabels) { + cy.xpath( + `//div[text()="${field}"]/../following-sibling::div//select/option` + ).then(($options) => { + const labels = [...$options].map(opt => opt.text); + expect(labels).to.include.members(optionLabels); + }); + }, + checkSectionDropdownContainsOptions(section, field, optionLabels, repeatPosition = 1) { cy.xpath( `(//div[text()='${section}']/../../div/following-sibling::div/div[@class="label" and text()="${field}"])[${repeatPosition}]/following-sibling::div/select/option` @@ -486,6 +495,15 @@ export default { }, checkDropdownTextValue(textValue, field) { + cy.xpath(`//div[text()="${field}"]/../following-sibling::div//select[@data-testid="dropdown-field"]`) + .filter((_selectIdx, selectBlock) => { + const opt = selectBlock.options[selectBlock.selectedIndex]; + return opt && opt.text === textValue; + }) + .should('have.length.at.least', 1); + }, + + checkSectionDropdownTextValue(textValue, field) { cy.xpath(`//div[text()="${field}"]/following-sibling::div//select[@data-testid="dropdown-field"]`) .filter((_selectIdx, selectBlock) => { const opt = selectBlock.options[selectBlock.selectedIndex]; diff --git a/cypress/support/fragments/linked-data/searchAndFilter.js b/cypress/support/fragments/linked-data/searchAndFilter.js index ad98194f2a..75e6e58888 100644 --- a/cypress/support/fragments/linked-data/searchAndFilter.js +++ b/cypress/support/fragments/linked-data/searchAndFilter.js @@ -96,6 +96,15 @@ export default { }); }, + verifySearchResultField(fieldValue) { + cy.get('[class*="search-result-entry-container"]') + .first() + .find('[class*="work-details-card"]') + .find('[class*="details"]') + .contains(fieldValue) + .should('exist'); + }, + verifyNoResultsFound() { cy.get('[class*="search-result-entry-container"]').should('not.exist'); cy.get('[class*="item-search-content"]') From 0baa00557205fde48d782cfc9d454ac5e30b703d Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Mon, 11 May 2026 11:07:03 -0700 Subject: [PATCH 3/7] Include inventory capability sets --- .../linked-data/LD Edit/language-code-marc.cy.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js index 254864e750..1a82095f66 100644 --- a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js +++ b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js @@ -1,5 +1,5 @@ import { DEFAULT_JOB_PROFILE_NAMES, EDIT_RESOURCE_HEADINGS } from '../../../support/constants'; -//import Permissions from '../../../support/dictionary/permissions'; +import CapabilitySets from '../../../support/dictionary/capabilitySets'; import getRandomPostfix from '../../../support/utils/stringTools'; import FileManager from '../../../support/utils/fileManager'; @@ -83,11 +83,14 @@ describe('Citation: check language MARC codes', () => { cy.createTempUser([]).then((userProperties) => { user = userProperties; - //cy.assignPermissionsToExistingUser(user.userId, [Permissions.inventoryAll.gui]); cy.assignCapabilitiesToExistingUser( user.userId, MARIGOLD_CAPABILITIES, - MARIGOLD_CAPABILITY_SETS, + [ + ...MARIGOLD_CAPABILITY_SETS, + CapabilitySets.uiInventoryInstanceView, + CapabilitySets.uiInventoryInstanceEdit, + ], ); }); @@ -166,6 +169,7 @@ describe('Citation: check language MARC codes', () => { EditResource.saveAndKeepEditingWithId(({ resourceId }) => { testData.workId = resourceId; }); + EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK); EditResource.openNewInstanceFormViaNewInstanceButton(); InstanceProfileModal.waitLoading(); InstanceProfileModal.selectDefaultOption(); @@ -186,11 +190,11 @@ describe('Citation: check language MARC codes', () => { // Review in inventory cy.visit(TopMenu.inventoryPath); InventoryInstances.waitContentLoading(); - //InventorySearchAndFilter.bySource('LINKED_DATA'); + InventorySearchAndFilter.bySource('LINKED_DATA'); InventoryInstances.searchByTitle(resourceData.marigoldInstanceTitle); InventoryInstance.editInstance(); InstanceRecordEdit.waitLoading(); - //InstanceRecordEdit.verifyLanguage('English'); + InstanceRecordEdit.verifyLanguage('English'); }, ); }); From 1f9370998b0e7c4a73e9e5702492e2f364877090 Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Tue, 12 May 2026 10:49:35 -0700 Subject: [PATCH 4/7] Use TopMenuNavigation, and swap out keyboard interactor for .type() --- cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js | 5 +++-- cypress/support/fragments/linked-data/editResource.js | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js index 1a82095f66..6b7c469e1a 100644 --- a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js +++ b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js @@ -1,4 +1,4 @@ -import { DEFAULT_JOB_PROFILE_NAMES, EDIT_RESOURCE_HEADINGS } from '../../../support/constants'; +import { APPLICATION_NAMES, DEFAULT_JOB_PROFILE_NAMES, EDIT_RESOURCE_HEADINGS } from '../../../support/constants'; import CapabilitySets from '../../../support/dictionary/capabilitySets'; import getRandomPostfix from '../../../support/utils/stringTools'; import FileManager from '../../../support/utils/fileManager'; @@ -9,6 +9,7 @@ import InventoryInstances from '../../../support/fragments/inventory/inventoryIn import InstanceRecordEdit from '../../../support/fragments/inventory/instanceRecordEdit'; import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter'; import TopMenu from '../../../support/fragments/topMenu'; +import TopMenuNavigation from '../../../support/fragments/topMenuNavigation'; import Users from '../../../support/fragments/users/users'; import EditResource from '../../../support/fragments/linked-data/editResource'; @@ -188,7 +189,7 @@ describe('Citation: check language MARC codes', () => { EditResource.checkPreviewSectionContainsLink('Language code', 'Language', 'English', 'http://id.loc.gov/vocabulary/languages/eng'); // Review in inventory - cy.visit(TopMenu.inventoryPath); + TopMenuNavigation.navigateToApp(APPLICATION_NAMES.INVENTORY); InventoryInstances.waitContentLoading(); InventorySearchAndFilter.bySource('LINKED_DATA'); InventoryInstances.searchByTitle(resourceData.marigoldInstanceTitle); diff --git a/cypress/support/fragments/linked-data/editResource.js b/cypress/support/fragments/linked-data/editResource.js index 17ef18d2dd..a63ca16ead 100644 --- a/cypress/support/fragments/linked-data/editResource.js +++ b/cypress/support/fragments/linked-data/editResource.js @@ -362,7 +362,7 @@ export default { const labels = [...$options].map(opt => opt.textContent); expect(labels).to.include.members(optionLabels); }); - cy.do(Keyboard.escape()); + cy.get('body').type('{esc}'); cy.wait(500); }, From 5d1fb477f0505aff8f10c82de5d303e860c04a31 Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Tue, 12 May 2026 13:41:13 -0700 Subject: [PATCH 5/7] Pull out constants --- .../LD Edit/language-code-marc.cy.js | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js index 6b7c469e1a..46bef79528 100644 --- a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js +++ b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js @@ -1,4 +1,8 @@ -import { APPLICATION_NAMES, DEFAULT_JOB_PROFILE_NAMES, EDIT_RESOURCE_HEADINGS } from '../../../support/constants'; +import { + APPLICATION_NAMES, + DEFAULT_JOB_PROFILE_NAMES, + EDIT_RESOURCE_HEADINGS, +} from '../../../support/constants'; import CapabilitySets from '../../../support/dictionary/capabilitySets'; import getRandomPostfix from '../../../support/utils/stringTools'; import FileManager from '../../../support/utils/fileManager'; @@ -44,6 +48,13 @@ describe('Citation: check language MARC codes', () => { inventoryTitle: testData.uniqueInventoryTitle, marigoldWorkTitle: testData.uniqueMarigoldWorkTitle, marigoldInstanceTitle: testData.uniqueMarigoldInstanceTitle, + language: 'English', + languageCode: 'eng', + languageRel: 'Primary source language', + languageLink: 'http://id.loc.gov/vocabulary/languages/eng', + languageSelect: 'English (eng)', + marcLanguageCode: '$a eng', + marc008LangPosition: 36, languagesSubset: [ 'Akkadian (akk)', 'Bemba (bem)', @@ -73,6 +84,15 @@ describe('Citation: check language MARC codes', () => { ], }; + const fieldData = { + languageSection: 'Language code', + languageField: 'Language', + languageRelField: 'Language relationship', + workTitle: 'Preferred Title for Work', + instanceTitle: 'Main Title', + ldSource: 'LINKED_DATA', + }; + before('Create test data', () => { DataImport.editMarcFile( testData.marcFilePath, @@ -141,19 +161,19 @@ describe('Citation: check language MARC codes', () => { EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK); // Check work language fields - EditResource.checkLabelOnSimpleField('English (eng)', 'Language'); - EditResource.checkDropdownTextValue('Primary source language', 'Language relationship'); - EditResource.checkSimpleFieldDropdownContainsOptions('Language', resourceData.languagesSubset); - EditResource.checkDropdownContainsOptions('Language relationship', resourceData.languageRelationships); + EditResource.checkLabelOnSimpleField(resourceData.languageSelect, fieldData.languageField); + EditResource.checkDropdownTextValue(resource, fieldData.languageRelField); + EditResource.checkSimpleFieldDropdownContainsOptions(fieldData.languageField, resourceData.languagesSubset); + EditResource.checkDropdownContainsOptions(fieldData.languageRelField, resourceData.languageRelationships); // Review MARC EditResource.editInstanceFormViaActions(); EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE); EditResource.viewMarc(); ViewMarc.waitLoading(); - ViewMarc.checkMarcFieldContainsDataAtPosition('008', 36, 'eng'); + ViewMarc.checkMarcFieldContainsDataAtPosition('008', resourceData.marc008LangPosition, resourceData.languageCode); ViewMarc.checkMarcFieldIndicators('041', ' '); - ViewMarc.checkMarcFieldContainsData('041', '$a eng'); + ViewMarc.checkMarcFieldContainsData('041', resourceData.marcLanguageCode); // Create new work and instance ViewMarc.closeMarcView(); @@ -164,8 +184,8 @@ describe('Citation: check language MARC codes', () => { WorkProfileModal.waitLoading(); WorkProfileModal.selectDefaultOption(); EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.NEW_WORK); - EditResource.setValueForTheField(testData.uniqueMarigoldWorkTitle, 'Preferred Title for Work'); - EditResource.setValueForSectionSimpleField('English (eng)', 'Language'); + EditResource.setValueForTheField(testData.uniqueMarigoldWorkTitle, fieldData.workTitle); + EditResource.setValueForSectionSimpleField(resourceData.languageSelect, fieldData.languageField); // Primary source language is already the default language relationship selection EditResource.saveAndKeepEditingWithId(({ resourceId }) => { testData.workId = resourceId; @@ -175,7 +195,7 @@ describe('Citation: check language MARC codes', () => { InstanceProfileModal.waitLoading(); InstanceProfileModal.selectDefaultOption(); EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.NEW_INSTANCE); - EditResource.setValueForTheField(testData.uniqueMarigoldInstanceTitle, 'Main Title'); + EditResource.setValueForTheField(testData.uniqueMarigoldInstanceTitle, fieldData.instanceTitle); EditResource.saveAndKeepEditingWithId(({ resourceId }) => { testData.instanceId = resourceId; }); @@ -183,19 +203,19 @@ describe('Citation: check language MARC codes', () => { Marigold.waitLoading(); SearchAndFilter.searchResourceByTitle(resourceData.marigoldWorkTitle); - SearchAndFilter.verifySearchResultField('eng'); + SearchAndFilter.verifySearchResultField(resourceData.languageCode); SearchAndFilter.openSearchResultPreviewByTitle(resourceData.marigoldWorkTitle); SearchAndFilter.waitPreviewLoading(); - EditResource.checkPreviewSectionContainsLink('Language code', 'Language', 'English', 'http://id.loc.gov/vocabulary/languages/eng'); + EditResource.checkPreviewSectionContainsLink(fieldData.languageSection, fieldData.languageField, resourceData.language, resourceData.languageLink); // Review in inventory TopMenuNavigation.navigateToApp(APPLICATION_NAMES.INVENTORY); InventoryInstances.waitContentLoading(); - InventorySearchAndFilter.bySource('LINKED_DATA'); + InventorySearchAndFilter.bySource(fieldData.ldSource); InventoryInstances.searchByTitle(resourceData.marigoldInstanceTitle); InventoryInstance.editInstance(); InstanceRecordEdit.waitLoading(); - InstanceRecordEdit.verifyLanguage('English'); + InstanceRecordEdit.verifyLanguage(resourceData.language); }, ); }); From b776eb6f674743eda5908287ecd0ddbf4af96a88 Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Tue, 12 May 2026 13:59:29 -0700 Subject: [PATCH 6/7] Fix constant substitution --- cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js index 46bef79528..33262a668e 100644 --- a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js +++ b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js @@ -162,7 +162,7 @@ describe('Citation: check language MARC codes', () => { // Check work language fields EditResource.checkLabelOnSimpleField(resourceData.languageSelect, fieldData.languageField); - EditResource.checkDropdownTextValue(resource, fieldData.languageRelField); + EditResource.checkDropdownTextValue(resourceData.languageRel, fieldData.languageRelField); EditResource.checkSimpleFieldDropdownContainsOptions(fieldData.languageField, resourceData.languagesSubset); EditResource.checkDropdownContainsOptions(fieldData.languageRelField, resourceData.languageRelationships); From 077c352c6ede87b19bd76958299218589973771f Mon Sep 17 00:00:00 2001 From: Ryan Lee Date: Wed, 13 May 2026 09:40:27 -0700 Subject: [PATCH 7/7] Address PR feedback --- cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js index 33262a668e..ba53146ae3 100644 --- a/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js +++ b/cypress/e2e/linked-data/LD Edit/language-code-marc.cy.js @@ -148,7 +148,7 @@ describe('Citation: check language MARC codes', () => { }); it( - 'C499692 Marigold - Language Code Work / Inventory / View MARC', + 'C499692 Marigold - Language Code Work / Inventory / View MARC (citation)', { tags: ['criticalPath', 'citation', 'C499692', 'marigold'] }, () => { // Edit instance from Inventory @@ -210,7 +210,6 @@ describe('Citation: check language MARC codes', () => { // Review in inventory TopMenuNavigation.navigateToApp(APPLICATION_NAMES.INVENTORY); - InventoryInstances.waitContentLoading(); InventorySearchAndFilter.bySource(fieldData.ldSource); InventoryInstances.searchByTitle(resourceData.marigoldInstanceTitle); InventoryInstance.editInstance();