Skip to content

Commit f7f5e23

Browse files
authored
Merge branch 'master' into UIFC-262-limit-file-upload-size
2 parents eb8930b + 720a649 commit f7f5e23

48 files changed

Lines changed: 507 additions & 252 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# Change history for ui-finc-select
22

33
## 8.2.0 (IN PROGRESS)
4-
4+
* Use EditCard from stripes-leipzig-components ([UIFC-451](https://folio-org.atlassian.net/browse/UIFC-451))
5+
* Add error handling and loading states to EZB Credentials settings page ([UIFC-457](https://folio-org.atlassian.net/browse/UIFC-457))
6+
* Include mod-settings global permissions ([UIFC-459](https://folio-org.atlassian.net/browse/UIFC-459))
57
* Add file upload size validation and improved error handling ([UIFC-262](https://folio-org.atlassian.net/browse/UIFC-262))
68

79
## [8.1.0](https://github.com/folio-org/ui-finc-select/tree/v8.1.0) (2025-08-21)

package.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"react-router-dom": "^5.2.0"
3535
},
3636
"dependencies": {
37+
"@folio/stripes-leipzig-components": "^1.0.0",
3738
"file-saver": "^2.0.0",
3839
"final-form": "^4.18.7",
3940
"final-form-arrays": "^3.0.2",
@@ -72,17 +73,26 @@
7273
"finc-select-ezb-credentials": "1.0",
7374
"organizations-storage.organizations": "3.0"
7475
},
76+
"stripesDeps": [
77+
"@folio/stripes-leipzig-components"
78+
],
7579
"permissionSets": [
7680
{
7781
"permissionName": "module.finc-select.enabled",
7882
"displayName": "UI: finc-select module is enabled",
83+
"subPermissions": [
84+
"mod-settings.global.read.stripes-core.prefs.manage",
85+
"mod-settings.entries.collection.get"
86+
],
7987
"visible": false
8088
},
8189
{
8290
"permissionName": "settings.finc-select.enabled",
8391
"displayName": "Settings (finc-select): display list of settings pages",
8492
"subPermissions": [
85-
"settings.enabled"
93+
"settings.enabled",
94+
"mod-settings.global.read.stripes-core.prefs.manage",
95+
"mod-settings.entries.collection.get"
8696
],
8797
"visible": false
8898
},

src/components/DisplayUtils/EditCard/EditCard.js

Lines changed: 0 additions & 59 deletions
This file was deleted.

src/components/DisplayUtils/EditCard/EditCard.test.js

Lines changed: 0 additions & 42 deletions
This file was deleted.

src/components/Filters/FilterFile/FilterFileForm.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import PropTypes from 'prop-types';
22
import { FormattedMessage } from 'react-intl';
3-
import { FieldArray } from 'react-final-form-arrays';
43

54
import { Accordion } from '@folio/stripes/components';
65
import { useStripes } from '@folio/stripes/core';
@@ -30,9 +29,7 @@ const FilterFileForm = ({
3029
onToggle={onToggle}
3130
open={expanded}
3231
>
33-
<FieldArray
34-
addDocBtnLabel={<FormattedMessage id="ui-finc-select.filter.file.addFile" />}
35-
component={DocumentsFieldArray}
32+
<DocumentsFieldArray
3633
name="filterFiles"
3734
onUploadFile={handleUploadFile}
3835
/>

src/components/Filters/FilterFile/FilterFileForm.test.js

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,40 @@
11
import { MemoryRouter } from 'react-router-dom';
22
import { Form } from 'react-final-form';
3-
import { FieldArray } from 'react-final-form-arrays';
3+
import arrayMutators from 'final-form-arrays';
44

5-
import { fireEvent, screen, waitFor } from '@folio/jest-config-stripes/testing-library/react';
5+
import { screen, waitFor } from '@folio/jest-config-stripes/testing-library/react';
66
import userEvent from '@folio/jest-config-stripes/testing-library/user-event';
77
import { StripesContext, useStripes } from '@folio/stripes/core';
88

99
import renderWithIntlConfiguration from '../../../../test/jest/helpers/renderWithIntlConfiguration';
10-
import FilterForm from '../FilterForm';
1110
import FilterFileForm from './FilterFileForm';
12-
import FILTER from '../../../../test/fixtures/filter';
11+
import fetchWithDefaultOptions from '../../DisplayUtils/fetchWithDefaultOptions';
1312

1413
const onToggle = jest.fn();
15-
const onDelete = jest.fn();
16-
const onClose = jest.fn();
17-
const handleSubmit = jest.fn();
1814
const onSubmit = jest.fn();
19-
const onUploadFile = jest.fn();
20-
const onDownloadFile = jest.fn();
2115

2216
const file = new File(['foo'], 'file.json', { type: 'text/plain' });
2317

24-
const renderFilterFileForm = (stripes, initialValues = FILTER) => {
18+
jest.mock('../../DisplayUtils/fetchWithDefaultOptions');
19+
20+
const mockPost = jest.fn(() => Promise.resolve({
21+
ok: true,
22+
text: () => Promise.resolve('34bdd9da-b765-448a-8519-11d460a4df5d'),
23+
}));
24+
25+
const renderFilterFileForm = (stripes) => {
2526
return renderWithIntlConfiguration(
2627
<StripesContext.Provider value={stripes}>
2728
<MemoryRouter>
2829
<Form
2930
onSubmit={onSubmit}
31+
mutators={arrayMutators}
3032
render={() => (
31-
<FilterForm
32-
initialValues={initialValues}
33-
handlers={{ onClose, onDelete }}
34-
handleSubmit={handleSubmit}
35-
onSubmit={onSubmit}
36-
onDelete={onDelete}
37-
>
38-
<FilterFileForm
39-
accordionId="accordionId"
40-
expanded
41-
onToggle={onToggle}
42-
stripes={stripes}
43-
>
44-
<FieldArray
45-
addDocBtnLabel="Add file to filter"
46-
name="filterFiles"
47-
onDownloadFile={onDownloadFile}
48-
onUploadFile={onUploadFile}
49-
/>
50-
</FilterFileForm>
51-
</FilterForm>
33+
<FilterFileForm
34+
accordionId="accordionId"
35+
expanded
36+
onToggle={onToggle}
37+
/>
5238
)}
5339
/>
5440
</MemoryRouter>
@@ -59,43 +45,49 @@ const renderFilterFileForm = (stripes, initialValues = FILTER) => {
5945
jest.unmock('react-intl');
6046

6147
describe('FilterFileForm', () => {
62-
let stripes;
48+
beforeEach(() => {
49+
jest.clearAllMocks();
50+
fetchWithDefaultOptions.mockImplementation(mockPost);
51+
});
6352

6453
describe('render FilterFileForm', () => {
6554
beforeEach(() => {
66-
stripes = useStripes();
55+
const stripes = useStripes();
6756
renderFilterFileForm(stripes);
6857
});
6958

7059
test('Add file button is rendered', () => {
71-
const selectFile = screen.getByRole('button', {
72-
name: 'Add file to filter',
73-
});
60+
const selectFile = screen.getByRole('button', { name: 'Add file to filter' });
7461
expect(selectFile).toBeInTheDocument();
7562
});
7663

7764
describe('Click add file button', () => {
7865
beforeEach(async () => {
79-
const selectFile = screen.getByRole('button', {
80-
name: 'Add file to filter',
81-
});
66+
const selectFile = screen.getByRole('button', { name: 'Add file to filter' });
8267
await userEvent.click(selectFile);
8368
});
8469

85-
test('should render filter file upload button', () => {
86-
expect(document.querySelector('#filter-file-label-1')).toBeInTheDocument();
70+
it('should render filter file upload card', () => {
71+
expect(document.querySelector('#filter-file-label-0')).toBeInTheDocument();
8772
expect(document.querySelector('#filter-file-upload-button')).toBeInTheDocument();
8873
});
8974

90-
test('should render filter file upload button', async () => {
91-
const filenameInput = document.querySelector('#filter-file-label-1');
75+
test('upload file should call fetch', async () => {
76+
const filenameInput = document.querySelector('#filter-file-label-0');
9277
const uploadFileInput = document.querySelector('#filter-file-input');
93-
const saveButton = screen.getByRole('button', { name: 'Save & close' });
9478

9579
await userEvent.type(filenameInput, 'my filename');
96-
fireEvent.change(uploadFileInput, { target: { filterFiles: [file] } });
80+
await userEvent.upload(uploadFileInput, file);
81+
9782
await waitFor(() => {
98-
expect(saveButton).toBeEnabled();
83+
expect(fetchWithDefaultOptions).toHaveBeenCalledWith(
84+
expect.any(Object),
85+
expect.stringContaining('/finc-select/files'),
86+
expect.objectContaining({
87+
method: 'POST',
88+
body: file,
89+
})
90+
);
9991
});
10092
});
10193
});

0 commit comments

Comments
 (0)