Skip to content

Commit 510fe71

Browse files
authored
Merge pull request #7113 from folio-org/FAT-26217
FAT-26217: Implements C499692
2 parents 2396893 + 3fa359f commit 510fe71

7 files changed

Lines changed: 266 additions & 11 deletions

File tree

cypress/e2e/linked-data/LD Edit/classification-marc.cy.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -203,35 +203,35 @@ describe('Citation: check classification number MARC codes', () => {
203203
// Review editor sections
204204
EditResource.clickEditWork();
205205
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK);
206-
EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType);
206+
EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType);
207207
EditResource.checkTextValueOnField(resourceData.dewey1Number, fieldData.classificationNumber);
208208
EditResource.checkTextValueOnField(resourceData.dewey1Additional, fieldData.classificationAdditional);
209209
EditResource.checkTextValueOnField(resourceData.dewey1Edition, fieldData.classificationEdition);
210210
EditResource.checkTextValueOnField(resourceData.dewey1Full, fieldData.classificationFull);
211211
EditResource.checkTextValueOnDisabledField(resourceData.dnlmAgency, fieldData.classificationAssigner);
212-
EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType);
212+
EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType);
213213
EditResource.checkTextValueOnField(resourceData.dewey2Number, fieldData.classificationNumber);
214214
EditResource.checkTextValueOnField(resourceData.dewey2Additional, fieldData.classificationAdditional);
215215
EditResource.checkTextValueOnField(resourceData.dewey2Edition, fieldData.classificationEdition);
216216
EditResource.checkTextValueOnField(resourceData.dewey2Full, fieldData.classificationFull);
217217
EditResource.checkTextValueOnDisabledField(resourceData.assigningAgency, fieldData.classificationAssigner);
218-
EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType);
218+
EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType);
219219
EditResource.checkTextValueOnField(resourceData.dewey3Number, fieldData.classificationNumber);
220220
EditResource.checkTextValueOnField(resourceData.dewey3Additional, fieldData.classificationAdditional);
221221
EditResource.checkTextValueOnField(resourceData.dewey3Edition, fieldData.classificationEdition);
222222
EditResource.checkTextValueOnField(resourceData.dewey3Full, fieldData.classificationFull);
223223
EditResource.checkTextValueOnDisabledField(resourceData.caoonlAgency, fieldData.classificationAssigner);
224-
EditResource.checkDropdownTextValue(fieldData.lccn, fieldData.classificationType);
224+
EditResource.checkSectionDropdownTextValue(fieldData.lccn, fieldData.classificationType);
225225
EditResource.checkTextValueOnField(resourceData.lccn1Number, fieldData.classificationNumber);
226226
EditResource.checkTextValueOnField(resourceData.lccn1Additional, fieldData.classificationAdditional);
227227
EditResource.checkTextValueOnDisabledField(resourceData.assigningAgency, fieldData.classificationAgency);
228228
EditResource.checkLabelOnSimpleField(resourceData.lccn1Used, fieldData.classificationUsed);
229-
EditResource.checkDropdownTextValue(fieldData.lccn, fieldData.classificationType);
229+
EditResource.checkSectionDropdownTextValue(fieldData.lccn, fieldData.classificationType);
230230
EditResource.checkTextValueOnField(resourceData.lccn2Number, fieldData.classificationNumber);
231231
EditResource.checkTextValueOnField(resourceData.lccn2Additional, fieldData.classificationAdditional);
232232
EditResource.checkTextValueOnDisabledField(resourceData.assigningAgency, fieldData.classificationAgency);
233233
EditResource.checkLabelOnSimpleField(resourceData.lccn2Used, fieldData.classificationUsed);
234-
EditResource.checkDropdownTextValue(fieldData.lccn, fieldData.classificationType);
234+
EditResource.checkSectionDropdownTextValue(fieldData.lccn, fieldData.classificationType);
235235
EditResource.checkTextValueOnField(resourceData.lccn3Number, fieldData.classificationNumber);
236236
EditResource.checkTextValueOnField(resourceData.lccn3Additional, fieldData.classificationAdditional);
237237
EditResource.checkTextValueOnDisabledField('', fieldData.classificationAgency);
@@ -283,7 +283,7 @@ describe('Citation: check classification number MARC codes', () => {
283283
SearchAndFilter.checkSearchResultsByTitle(resourceData.marigoldTitle);
284284
Marigold.clickEditWorkFromSearch();
285285
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK);
286-
EditResource.checkDropdownTextValue(fieldData.dewey, fieldData.classificationType);
286+
EditResource.checkSectionDropdownTextValue(fieldData.dewey, fieldData.classificationType);
287287
EditResource.checkTextValueOnField(resourceData.marigoldDeweyNumber, fieldData.classificationNumber);
288288
EditResource.checkTextValueOnField(resourceData.marigoldDeweyAdditional, fieldData.classificationAdditional);
289289
EditResource.checkTextValueOnField(resourceData.marigoldDeweyEdition, fieldData.classificationEdition);
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
import {
2+
APPLICATION_NAMES,
3+
DEFAULT_JOB_PROFILE_NAMES,
4+
EDIT_RESOURCE_HEADINGS,
5+
} from '../../../support/constants';
6+
import CapabilitySets from '../../../support/dictionary/capabilitySets';
7+
import getRandomPostfix from '../../../support/utils/stringTools';
8+
import FileManager from '../../../support/utils/fileManager';
9+
10+
import DataImport from '../../../support/fragments/data_import/dataImport';
11+
import InventoryInstance from '../../../support/fragments/inventory/inventoryInstance';
12+
import InventoryInstances from '../../../support/fragments/inventory/inventoryInstances';
13+
import InstanceRecordEdit from '../../../support/fragments/inventory/instanceRecordEdit';
14+
import InventorySearchAndFilter from '../../../support/fragments/inventory/inventorySearchAndFilter';
15+
import TopMenu from '../../../support/fragments/topMenu';
16+
import TopMenuNavigation from '../../../support/fragments/topMenuNavigation';
17+
import Users from '../../../support/fragments/users/users';
18+
19+
import EditResource from '../../../support/fragments/linked-data/editResource';
20+
import InstanceProfileModal from '../../../support/fragments/linked-data/instanceProfileModal';
21+
import Marigold from '../../../support/fragments/linked-data/marigold';
22+
import PreviewResource from '../../../support/fragments/linked-data/previewResource';
23+
import SearchAndFilter from '../../../support/fragments/linked-data/searchAndFilter';
24+
import ViewMarc from '../../../support/fragments/linked-data/viewMarc';
25+
import Work from '../../../support/fragments/linked-data/work';
26+
import WorkProfileModal from '../../../support/fragments/linked-data/workProfileModal';
27+
28+
import {
29+
MARIGOLD_CAPABILITIES,
30+
MARIGOLD_CAPABILITY_SETS,
31+
} from '../../../support/dictionary/marigoldCapabilities';
32+
33+
let user;
34+
35+
describe('Citation: check language MARC codes', () => {
36+
const testData = {
37+
workId: null,
38+
instanceId: null,
39+
marcFilePath: 'marcFileForC499692.mrc',
40+
modifiedMarcFile: `C499692 editedMarcFile${getRandomPostfix()}.mrc`,
41+
marcFileName: `C499692 marcFile${getRandomPostfix()}.mrc`,
42+
uniqueInventoryTitle: `Language code inventory ${getRandomPostfix()}`,
43+
uniqueMarigoldWorkTitle: `Lanuage code Marigold ${getRandomPostfix()}`,
44+
uniqueMarigoldInstanceTitle: `Lanuage code Marigold ${getRandomPostfix()}`,
45+
};
46+
47+
const resourceData = {
48+
inventoryTitle: testData.uniqueInventoryTitle,
49+
marigoldWorkTitle: testData.uniqueMarigoldWorkTitle,
50+
marigoldInstanceTitle: testData.uniqueMarigoldInstanceTitle,
51+
language: 'English',
52+
languageCode: 'eng',
53+
languageRel: 'Primary source language',
54+
languageLink: 'http://id.loc.gov/vocabulary/languages/eng',
55+
languageSelect: 'English (eng)',
56+
marcLanguageCode: '$a eng',
57+
marc008LangPosition: 36,
58+
languagesSubset: [
59+
'Akkadian (akk)',
60+
'Bemba (bem)',
61+
'Croatian (hrv)',
62+
'Kanuri (kau)',
63+
'Nepali (nep)',
64+
'Uighur (uig)',
65+
'Zaza (zza)',
66+
],
67+
languageRelationships: [
68+
'Primary source language',
69+
'Summary or abstract',
70+
'Sung or spoken text',
71+
'Librettos',
72+
'Table of contents',
73+
'Accompanying material other than librettos and transcripts',
74+
'Original language',
75+
'Intertitles',
76+
'Subtitles',
77+
'Intermediate translation',
78+
'Original accompanying materials other than librettos',
79+
'Original libretto',
80+
'Captions',
81+
'Accessible audio',
82+
'Accessible visual language (non-textual)',
83+
'Accompanying transcripts for audiovisual material',
84+
],
85+
};
86+
87+
const fieldData = {
88+
languageSection: 'Language code',
89+
languageField: 'Language',
90+
languageRelField: 'Language relationship',
91+
workTitle: 'Preferred Title for Work',
92+
instanceTitle: 'Main Title',
93+
ldSource: 'LINKED_DATA',
94+
};
95+
96+
before('Create test data', () => {
97+
DataImport.editMarcFile(
98+
testData.marcFilePath,
99+
testData.modifiedMarcFile,
100+
['Placeholder Title Language Code'],
101+
[testData.uniqueInventoryTitle],
102+
);
103+
cy.getAdminToken();
104+
105+
cy.createTempUser([]).then((userProperties) => {
106+
user = userProperties;
107+
cy.assignCapabilitiesToExistingUser(
108+
user.userId,
109+
MARIGOLD_CAPABILITIES,
110+
[
111+
...MARIGOLD_CAPABILITY_SETS,
112+
CapabilitySets.uiInventoryInstanceView,
113+
CapabilitySets.uiInventoryInstanceEdit,
114+
],
115+
);
116+
});
117+
118+
DataImport.uploadFileViaApi(
119+
testData.modifiedMarcFile,
120+
testData.marcFileName,
121+
DEFAULT_JOB_PROFILE_NAMES.CREATE_INSTANCE_AND_SRS,
122+
);
123+
});
124+
125+
after('Delete test data', () => {
126+
FileManager.deleteFile(`cypress/fixtures/${testData.modifiedMarcFile}`);
127+
cy.getAdminToken();
128+
InventoryInstances.deleteFullInstancesByTitleViaApi(resourceData.inventoryTitle);
129+
InventoryInstances.deleteFullInstancesByTitleViaApi(resourceData.marigoldInstanceTitle);
130+
Work.getInstancesByTitle(resourceData.inventoryTitle).then((instances) => {
131+
const filteredInstances = instances.filter(
132+
(element) => element.titles[0].value === resourceData.inventoryTitle,
133+
);
134+
Work.deleteById(filteredInstances[0].id);
135+
});
136+
Work.getIdByTitle(resourceData.inventoryTitle).then((id) => Work.deleteById(id));
137+
if (testData.instanceId) Work.deleteInstanceViaApi(testData.instanceId);
138+
if (testData.workId) Work.deleteById(testData.workId);
139+
Users.deleteViaApi(user.userId);
140+
});
141+
142+
beforeEach(() => {
143+
cy.login(user.username, user.password, {
144+
path: TopMenu.inventoryPath,
145+
waiter: InventoryInstances.waitContentLoading,
146+
authRefresh: true,
147+
});
148+
});
149+
150+
it(
151+
'C499692 Marigold - Language Code Work / Inventory / View MARC (citation)',
152+
{ tags: ['criticalPath', 'citation', 'C499692', 'marigold'] },
153+
() => {
154+
// Edit instance from Inventory
155+
InventoryInstances.searchByTitle(resourceData.inventoryTitle);
156+
InventoryInstance.editInstanceInMG();
157+
PreviewResource.waitLoading();
158+
PreviewResource.clickContinue();
159+
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE);
160+
EditResource.clickEditWork();
161+
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK);
162+
163+
// Check work language fields
164+
EditResource.checkLabelOnSimpleField(resourceData.languageSelect, fieldData.languageField);
165+
EditResource.checkDropdownTextValue(resourceData.languageRel, fieldData.languageRelField);
166+
EditResource.checkSimpleFieldDropdownContainsOptions(fieldData.languageField, resourceData.languagesSubset);
167+
EditResource.checkDropdownContainsOptions(fieldData.languageRelField, resourceData.languageRelationships);
168+
169+
// Review MARC
170+
EditResource.editInstanceFormViaActions();
171+
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE);
172+
EditResource.viewMarc();
173+
ViewMarc.waitLoading();
174+
ViewMarc.checkMarcFieldContainsDataAtPosition('008', resourceData.marc008LangPosition, resourceData.languageCode);
175+
ViewMarc.checkMarcFieldIndicators('041', ' ');
176+
ViewMarc.checkMarcFieldContainsData('041', resourceData.marcLanguageCode);
177+
178+
// Create new work and instance
179+
ViewMarc.closeMarcView();
180+
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE);
181+
EditResource.clickCloseResourceButton();
182+
Marigold.waitLoading();
183+
Marigold.openNewResourceForm();
184+
WorkProfileModal.waitLoading();
185+
WorkProfileModal.selectDefaultOption();
186+
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.NEW_WORK);
187+
EditResource.setValueForTheField(testData.uniqueMarigoldWorkTitle, fieldData.workTitle);
188+
EditResource.setValueForSectionSimpleField(resourceData.languageSelect, fieldData.languageField);
189+
// Primary source language is already the default language relationship selection
190+
EditResource.saveAndKeepEditingWithId(({ resourceId }) => {
191+
testData.workId = resourceId;
192+
});
193+
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_WORK);
194+
EditResource.openNewInstanceFormViaNewInstanceButton();
195+
InstanceProfileModal.waitLoading();
196+
InstanceProfileModal.selectDefaultOption();
197+
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.NEW_INSTANCE);
198+
EditResource.setValueForTheField(testData.uniqueMarigoldInstanceTitle, fieldData.instanceTitle);
199+
EditResource.saveAndKeepEditingWithId(({ resourceId }) => {
200+
testData.instanceId = resourceId;
201+
});
202+
EditResource.clickCloseResourceButton();
203+
204+
Marigold.waitLoading();
205+
SearchAndFilter.searchResourceByTitle(resourceData.marigoldWorkTitle);
206+
SearchAndFilter.verifySearchResultField(resourceData.languageCode);
207+
SearchAndFilter.openSearchResultPreviewByTitle(resourceData.marigoldWorkTitle);
208+
SearchAndFilter.waitPreviewLoading();
209+
EditResource.checkPreviewSectionContainsLink(fieldData.languageSection, fieldData.languageField, resourceData.language, resourceData.languageLink);
210+
211+
// Review in inventory
212+
TopMenuNavigation.navigateToApp(APPLICATION_NAMES.INVENTORY);
213+
InventorySearchAndFilter.bySource(fieldData.ldSource);
214+
InventoryInstances.searchByTitle(resourceData.marigoldInstanceTitle);
215+
InventoryInstance.editInstance();
216+
InstanceRecordEdit.waitLoading();
217+
InstanceRecordEdit.verifyLanguage(resourceData.language);
218+
},
219+
);
220+
});

cypress/e2e/linked-data/LD Edit/statement-of-responsibility-marc.cy.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import TopMenu from '../../../support/fragments/topMenu';
99
import Users from '../../../support/fragments/users/users';
1010

1111
import EditResource from '../../../support/fragments/linked-data/editResource';
12-
import ExternalResourcePreview from '../../../support/fragments/linked-data/externalResourcePreview';
12+
import PreviewResource from '../../../support/fragments/linked-data/previewResource';
1313
import InstanceProfileModal from '../../../support/fragments/linked-data/instanceProfileModal';
1414
import Marigold from '../../../support/fragments/linked-data/marigold';
1515
import NewInstance from '../../../support/fragments/linked-data/newInstance';
@@ -98,8 +98,8 @@ describe('Citation: Statement of Responsibility - Inventory / View MARC', () =>
9898
// Import MARC bib into Marigold
9999
InventoryInstances.searchByTitle(testData.uniqueMarcTitle);
100100
InventoryInstance.editInstanceInMG();
101-
ExternalResourcePreview.waitLoading();
102-
ExternalResourcePreview.clickContinueButton();
101+
PreviewResource.waitLoading();
102+
PreviewResource.clickContinue();
103103
EditResource.waitLoading(EDIT_RESOURCE_HEADINGS.EDIT_INSTANCE);
104104
EditResource.clickCloseResourceButton();
105105

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
00182naa a2200073uu 4500001001400000005001700014008004100031245003600072in0000000070520260508181845.2260508| ||| | eng  aPlaceholder Title Language Code

cypress/support/fragments/inventory/instanceRecordEdit.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ const staffSuppressCheckbox = Checkbox({ name: 'staffSuppress' });
3737
const previoslyHeldCheckbox = Checkbox({ name: 'previouslyHeld' });
3838
const setForDeletionChecbox = Checkbox({ name: 'deleted' });
3939
const instanceStatusTerm = Select('Instance status term');
40+
const descriptiveDataAccordion = Accordion('Descriptive data');
41+
const languageSelect = Select('Language*');
4042
const addStatisticalCodeButton = Button('Add statistical code');
4143
const statisticalCodeFieldSet = rootSection.find(FieldSet('Statistical code'));
4244
const statisticalCodeSelectionList = SelectionList();
@@ -676,6 +678,11 @@ export default {
676678
cy.expect(Select('Nature of content term').has({ checkedOptionText: including(nature) }));
677679
},
678680

681+
verifyLanguage(language) {
682+
cy.do(descriptiveDataAccordion.clickHeader());
683+
cy.expect(languageSelect.has({ checkedOptionText: including(language) }));
684+
},
685+
679686
verifyParentInstance(title, hrid) {
680687
cy.expect([
681688
parentInstanceFieldSet

cypress/support/fragments/linked-data/editResource.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,15 @@ export default {
334334
).should('be.visible');
335335
},
336336

337+
checkDropdownContainsOptions(field, optionLabels) {
338+
cy.xpath(
339+
`//div[text()="${field}"]/../following-sibling::div//select/option`
340+
).then(($options) => {
341+
const labels = [...$options].map(opt => opt.text);
342+
expect(labels).to.include.members(optionLabels);
343+
});
344+
},
345+
337346
checkSectionDropdownContainsOptions(section, field, optionLabels, repeatPosition = 1) {
338347
cy.xpath(
339348
`(//div[text()='${section}']/../../div/following-sibling::div/div[@class="label" and text()="${field}"])[${repeatPosition}]/following-sibling::div/select/option`
@@ -353,7 +362,7 @@ export default {
353362
const labels = [...$options].map(opt => opt.textContent);
354363
expect(labels).to.include.members(optionLabels);
355364
});
356-
cy.do(Keyboard.escape());
365+
cy.get('body').type('{esc}');
357366
cy.wait(500);
358367
},
359368

@@ -486,6 +495,15 @@ export default {
486495
},
487496

488497
checkDropdownTextValue(textValue, field) {
498+
cy.xpath(`//div[text()="${field}"]/../following-sibling::div//select[@data-testid="dropdown-field"]`)
499+
.filter((_selectIdx, selectBlock) => {
500+
const opt = selectBlock.options[selectBlock.selectedIndex];
501+
return opt && opt.text === textValue;
502+
})
503+
.should('have.length.at.least', 1);
504+
},
505+
506+
checkSectionDropdownTextValue(textValue, field) {
489507
cy.xpath(`//div[text()="${field}"]/following-sibling::div//select[@data-testid="dropdown-field"]`)
490508
.filter((_selectIdx, selectBlock) => {
491509
const opt = selectBlock.options[selectBlock.selectedIndex];

cypress/support/fragments/linked-data/searchAndFilter.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,15 @@ export default {
9696
});
9797
},
9898

99+
verifySearchResultField(fieldValue) {
100+
cy.get('[class*="search-result-entry-container"]')
101+
.first()
102+
.find('[class*="work-details-card"]')
103+
.find('[class*="details"]')
104+
.contains(fieldValue)
105+
.should('exist');
106+
},
107+
99108
verifyNoResultsFound() {
100109
cy.get('[class*="search-result-entry-container"]').should('not.exist');
101110
cy.get('[class*="item-search-content"]')

0 commit comments

Comments
 (0)