@openmrs/esm-stock-management-app 1.0.1-pre.618 → 1.0.1-pre.621
Sign up to get free protection for your applications and to get access to all the features.
- package/.eslintignore +1 -2
- package/.eslintrc +4 -2
- package/dist/routes.json +1 -1
- package/package.json +2 -1
- package/src/core/components/carbon/controlled-combo-box/controlled-combo-box.test.tsx +0 -3
- package/src/core/components/carbon/controlled-dropdown/controlled-dropdown.test.tsx +0 -3
- package/src/core/components/carbon/controlled-number-input/controlled-number-input.test.tsx +0 -3
- package/src/core/components/carbon/controlled-radio-button-group/controlled-radio-button-group.test.tsx +0 -3
- package/src/core/components/carbon/controlled-text-area/controlled-text-area.test.tsx +1 -2
- package/src/core/components/carbon/controlled-text-input/controlled-text-input.test.tsx +0 -3
- package/src/stock-items/add-stock-item/concepts-selector/concepts-selector.test.tsx +0 -3
- package/src/stock-items/add-stock-item/dispensing-unit-selector/dispensing-unit-selector.test.tsx +0 -3
- package/src/stock-items/add-stock-item/preferred-vendor-selector/preferred-vendor-selector.test.tsx +0 -3
- package/src/stock-items/add-stock-item/stock-item-category-selector/stock-item-category-selector.test.tsx +0 -3
- package/src/stock-operations/add-stock-operation/stock-items-addition-row.test.tsx +1 -2
- package/src/stock-operations/batch-no-selector/batch-no-selector.test.tsx +1 -2
- package/src/stock-operations/qty-uom-selector/qty-uom-selector.test.tsx +1 -2
- package/src/stock-operations/stock-item-selector/stock-item-selector.test.tsx +1 -2
- package/src/stock-sources/add-stock-sources/add-stock-sources.test.tsx +40 -44
- package/src/stock-sources/stock-sources-delete/stock-sources-delete.test.tsx +33 -35
package/.eslintignore
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
**/*.d.tsx
|
1
|
+
**/*.d.tsx
|
package/.eslintrc
CHANGED
@@ -4,12 +4,14 @@
|
|
4
4
|
},
|
5
5
|
"extends": [
|
6
6
|
"eslint:recommended",
|
7
|
-
"plugin:@typescript-eslint/recommended"
|
7
|
+
"plugin:@typescript-eslint/recommended",
|
8
|
+
"plugin:testing-library/react"
|
8
9
|
],
|
9
10
|
"parser": "@typescript-eslint/parser",
|
10
11
|
"plugins": [
|
11
12
|
"@typescript-eslint",
|
12
|
-
"react-hooks"
|
13
|
+
"react-hooks",
|
14
|
+
"testing-library"
|
13
15
|
],
|
14
16
|
"root": true,
|
15
17
|
"rules": {
|
package/dist/routes.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":"^2.24.0"},"extensions":[{"name":"stock-nav-menu","slot":"stock-sidebar-slot","component":"stockNavMenu","online":true,"offline":true},{"name":"overview-db-link","slot":"stock-page-dashboard-slot","component":"stockOverviewLink","meta":{"name":"overview","slot":"overview-dashboard-slot","title":"overview"},"order":0,"online":true,"offline":true},{"name":"stock-overview-db","slot":"overview-dashboard-slot","component":"stockOverview"},{"name":"operations-db-link","slot":"stock-page-dashboard-slot","component":"stockOperationsLink","meta":{"name":"operations","slot":"operations-dashboard-slot","title":"operations"},"order":2,"online":true,"offline":true},{"name":"stock-operations-db","slot":"operations-dashboard-slot","component":"stockOperations"},{"name":"items-db-link","slot":"stock-page-dashboard-slot","component":"stockItemsLink","meta":{"name":"items","slot":"items-dashboard-slot","title":"items"},"order":1,"online":true,"offline":true},{"name":"stock-items-db","slot":"items-dashboard-slot","component":"stockItems"},{"name":"user-scopes-db-link","slot":"stock-page-dashboard-slot","component":"stockUserScopesLink","meta":{"name":"user-scopes","slot":"user-scopes-dashboard-slot","title":"user-scopes"},"order":3,"online":true,"offline":true},{"name":"stock-user-scopes-db","slot":"user-scopes-dashboard-slot","component":"stockUserScopes"},{"name":"sources-db-link","slot":"stock-page-dashboard-slot","component":"stockSourcesLink","meta":{"name":"sources","slot":"sources-dashboard-slot","title":"Sources"},"order":2,"online":true,"offline":true},{"name":"stock-sources-db","slot":"sources-dashboard-slot","component":"stockSources"},{"name":"locations-db-link","slot":"stock-page-dashboard-slot","component":"stockLocationsLink","meta":{"name":"locations","slot":"locations-dashboard-slot","title":"Locations"},"order":4,"online":true,"offline":true},{"name":"stock-locations-db","slot":"locations-dashboard-slot","component":"stockLocations"},{"name":"reports-db-link","slot":"stock-page-dashboard-slot","component":"stockReportsLink","meta":{"name":"reports","slot":"reports-dashboard-slot","title":"Reports"},"order":5,"online":true,"offline":true},{"name":"stock-reports-db","slot":"reports-dashboard-slot","component":"stockReports"},{"name":"settings-db-link","slot":"stock-page-dashboard-slot","component":"stockSettingsLink","meta":{"name":"settings","slot":"settings-dashboard-slot","title":"Settings"},"order":6,"online":true,"offline":true},{"name":"stock-settings-db","slot":"settings-dashboard-slot","component":"stockSettings"},{"name":"stock-management-admin-card-link","slot":"system-admin-page-card-link-slot","component":"stockManagementAdminCardLink"},{"name":"stock-operation-dialog","component":"stockOperationDialog"},{"name":"import-bulk-stock-items","component":"importBulkStockItemsDialog"},{"name":"delete-stock-modal","component":"deleteStockModal"},{"name":"delete-stock-user-scope-modal","component":"deleteUserScopeModal"},{"name":"stock-management-app-menu-item","component":"stockManagementAppMenuItem","slot":"app-menu-item-slot","meta":{"name":" Stock Management"}},{"name":"delete-stock-rule-modal","component":"deleteStockRuleModal"},{"name":"delete-packaging-unit-modal","component":"deletePackagingUnitModal"},{"name":"delete-packaging-unit-button","component":"deletePackagingUnitButton"}],"pages":[{"component":"root","route":"stock-management"}],"version":"1.0.1-pre.
|
1
|
+
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":"^2.24.0"},"extensions":[{"name":"stock-nav-menu","slot":"stock-sidebar-slot","component":"stockNavMenu","online":true,"offline":true},{"name":"overview-db-link","slot":"stock-page-dashboard-slot","component":"stockOverviewLink","meta":{"name":"overview","slot":"overview-dashboard-slot","title":"overview"},"order":0,"online":true,"offline":true},{"name":"stock-overview-db","slot":"overview-dashboard-slot","component":"stockOverview"},{"name":"operations-db-link","slot":"stock-page-dashboard-slot","component":"stockOperationsLink","meta":{"name":"operations","slot":"operations-dashboard-slot","title":"operations"},"order":2,"online":true,"offline":true},{"name":"stock-operations-db","slot":"operations-dashboard-slot","component":"stockOperations"},{"name":"items-db-link","slot":"stock-page-dashboard-slot","component":"stockItemsLink","meta":{"name":"items","slot":"items-dashboard-slot","title":"items"},"order":1,"online":true,"offline":true},{"name":"stock-items-db","slot":"items-dashboard-slot","component":"stockItems"},{"name":"user-scopes-db-link","slot":"stock-page-dashboard-slot","component":"stockUserScopesLink","meta":{"name":"user-scopes","slot":"user-scopes-dashboard-slot","title":"user-scopes"},"order":3,"online":true,"offline":true},{"name":"stock-user-scopes-db","slot":"user-scopes-dashboard-slot","component":"stockUserScopes"},{"name":"sources-db-link","slot":"stock-page-dashboard-slot","component":"stockSourcesLink","meta":{"name":"sources","slot":"sources-dashboard-slot","title":"Sources"},"order":2,"online":true,"offline":true},{"name":"stock-sources-db","slot":"sources-dashboard-slot","component":"stockSources"},{"name":"locations-db-link","slot":"stock-page-dashboard-slot","component":"stockLocationsLink","meta":{"name":"locations","slot":"locations-dashboard-slot","title":"Locations"},"order":4,"online":true,"offline":true},{"name":"stock-locations-db","slot":"locations-dashboard-slot","component":"stockLocations"},{"name":"reports-db-link","slot":"stock-page-dashboard-slot","component":"stockReportsLink","meta":{"name":"reports","slot":"reports-dashboard-slot","title":"Reports"},"order":5,"online":true,"offline":true},{"name":"stock-reports-db","slot":"reports-dashboard-slot","component":"stockReports"},{"name":"settings-db-link","slot":"stock-page-dashboard-slot","component":"stockSettingsLink","meta":{"name":"settings","slot":"settings-dashboard-slot","title":"Settings"},"order":6,"online":true,"offline":true},{"name":"stock-settings-db","slot":"settings-dashboard-slot","component":"stockSettings"},{"name":"stock-management-admin-card-link","slot":"system-admin-page-card-link-slot","component":"stockManagementAdminCardLink"},{"name":"stock-operation-dialog","component":"stockOperationDialog"},{"name":"import-bulk-stock-items","component":"importBulkStockItemsDialog"},{"name":"delete-stock-modal","component":"deleteStockModal"},{"name":"delete-stock-user-scope-modal","component":"deleteUserScopeModal"},{"name":"stock-management-app-menu-item","component":"stockManagementAppMenuItem","slot":"app-menu-item-slot","meta":{"name":" Stock Management"}},{"name":"delete-stock-rule-modal","component":"deleteStockRuleModal"},{"name":"delete-packaging-unit-modal","component":"deletePackagingUnitModal"},{"name":"delete-packaging-unit-button","component":"deletePackagingUnitButton"}],"pages":[{"component":"root","route":"stock-management"}],"version":"1.0.1-pre.621"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@openmrs/esm-stock-management-app",
|
3
|
-
"version": "1.0.1-pre.
|
3
|
+
"version": "1.0.1-pre.621",
|
4
4
|
"license": "MPL-2.0",
|
5
5
|
"description": "Stock management microfrontend for OpenMRS 3.x",
|
6
6
|
"browser": "dist/openmrs-esm-stock-management-app.js",
|
@@ -82,6 +82,7 @@
|
|
82
82
|
"dayjs": "^1.11.9",
|
83
83
|
"eslint": "^8.44.0",
|
84
84
|
"eslint-plugin-react-hooks": "^4.6.2",
|
85
|
+
"eslint-plugin-testing-library": "^6.3.0",
|
85
86
|
"i18next": "^23.2.8",
|
86
87
|
"i18next-parser": "^8.0.0",
|
87
88
|
"identity-obj-proxy": "^3.0.0",
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
|
-
import { render
|
3
|
+
import { render } from '@testing-library/react';
|
4
4
|
import ControlledTextArea from './controlled-text-area.component';
|
5
5
|
|
6
6
|
describe('Test the controlled text area', () => {
|
7
|
-
afterEach(cleanup);
|
8
7
|
it(`renders without dying`, () => {
|
9
8
|
// render(<ControlledTextArea />);
|
10
9
|
});
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
|
-
import { render
|
3
|
+
import { render } from '@testing-library/react';
|
4
4
|
import StockItemsAdditionRow from './stock-items-addition-row.component';
|
5
5
|
|
6
6
|
describe('Test the stock items addition row', () => {
|
7
|
-
afterEach(cleanup);
|
8
7
|
it(`renders without dying`, () => {
|
9
8
|
// render(<StockItemsAdditionRow />);
|
10
9
|
});
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
|
-
import { render
|
3
|
+
import { render } from '@testing-library/react';
|
4
4
|
import BatchNoSelector from './batch-no-selector.component';
|
5
5
|
|
6
6
|
describe('Test the batch no selector', () => {
|
7
|
-
afterEach(cleanup);
|
8
7
|
it(`renders without dying`, () => {
|
9
8
|
// render(<BatchNoSelector />);
|
10
9
|
});
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
|
-
import { render
|
3
|
+
import { render } from '@testing-library/react';
|
4
4
|
import QtyUomSelector from './qty-uom-selector.component';
|
5
5
|
|
6
6
|
describe('Test the qty uom selector', () => {
|
7
|
-
afterEach(cleanup);
|
8
7
|
it(`renders without dying`, () => {
|
9
8
|
// render(<QtyUomSelector />);
|
10
9
|
});
|
@@ -1,10 +1,9 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
|
3
|
-
import { render
|
3
|
+
import { render } from '@testing-library/react';
|
4
4
|
import StockItemSelector from './stock-item-selector.component';
|
5
5
|
|
6
6
|
describe('Test the stock item selector', () => {
|
7
|
-
afterEach(cleanup);
|
8
7
|
it(`renders without dying`, () => {
|
9
8
|
// render(<StockItemSelector />);
|
10
9
|
});
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { render, screen
|
2
|
+
import { render, screen } from '@testing-library/react';
|
3
|
+
import userEvent from '@testing-library/user-event';
|
3
4
|
import '@testing-library/jest-dom/extend-expect';
|
4
5
|
import StockSourcesAddOrUpdate from './add-stock-sources.component';
|
5
6
|
import { createOrUpdateStockSource } from '../stock-sources.resource';
|
@@ -28,7 +29,6 @@ jest.mock('../../stock-lookups/stock-lookups.resource', () => ({
|
|
28
29
|
|
29
30
|
describe('StockSourcesAddOrUpdate', () => {
|
30
31
|
beforeEach(() => {
|
31
|
-
jest.clearAllMocks();
|
32
32
|
(useConfig as jest.Mock).mockReturnValue({ stockSourceTypeUUID: 'mock-uuid' });
|
33
33
|
});
|
34
34
|
|
@@ -96,79 +96,75 @@ describe('StockSourcesAddOrUpdate', () => {
|
|
96
96
|
expect(screen.getByLabelText('Source Type')).toHaveValue('type1');
|
97
97
|
});
|
98
98
|
|
99
|
-
it('updates form fields correctly on user input', () => {
|
99
|
+
it('updates form fields correctly on user input', async () => {
|
100
|
+
const user = userEvent.setup();
|
100
101
|
render(<StockSourcesAddOrUpdate />);
|
101
102
|
|
102
|
-
|
103
|
-
|
104
|
-
fireEvent.change(screen.getByLabelText('Source Type'), { target: { value: 'type2' } });
|
103
|
+
await user.type(screen.getByLabelText('Full Name'), 'New Source');
|
104
|
+
await user.type(screen.getByLabelText('Acronym/Code'), 'NS');
|
105
105
|
|
106
106
|
expect(screen.getByLabelText('Full Name')).toHaveValue('New Source');
|
107
107
|
expect(screen.getByLabelText('Acronym/Code')).toHaveValue('NS');
|
108
|
-
expect(screen.getByLabelText('Source Type')).toHaveValue('type2');
|
109
108
|
});
|
110
109
|
|
111
110
|
it('calls createOrUpdateStockSource with correct data on form submission', async () => {
|
111
|
+
const user = userEvent.setup();
|
112
112
|
(createOrUpdateStockSource as jest.Mock).mockResolvedValue({});
|
113
113
|
|
114
114
|
render(<StockSourcesAddOrUpdate />);
|
115
115
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
sourceType: { uuid: 'type2', display: 'Type 2' },
|
128
|
-
}),
|
129
|
-
);
|
130
|
-
});
|
116
|
+
await user.type(screen.getByLabelText('Full Name'), 'New Source');
|
117
|
+
await user.type(screen.getByLabelText('Acronym/Code'), 'NS');
|
118
|
+
await user.type(screen.getByLabelText('Source Type'), 'type2');
|
119
|
+
await user.click(screen.getByText('Save'));
|
120
|
+
|
121
|
+
expect(createOrUpdateStockSource).toHaveBeenCalledWith(
|
122
|
+
expect.objectContaining({
|
123
|
+
name: 'New Source',
|
124
|
+
acronym: 'NS',
|
125
|
+
}),
|
126
|
+
);
|
131
127
|
});
|
132
128
|
|
133
129
|
it('shows success message and closes overlay on successful submission', async () => {
|
130
|
+
const user = userEvent.setup();
|
134
131
|
(createOrUpdateStockSource as jest.Mock).mockResolvedValue({});
|
135
132
|
|
136
133
|
render(<StockSourcesAddOrUpdate />);
|
137
134
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
expect
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
});
|
135
|
+
await user.click(screen.getByText('Save'));
|
136
|
+
|
137
|
+
expect(showSnackbar).toHaveBeenCalledWith(
|
138
|
+
expect.objectContaining({
|
139
|
+
kind: 'success',
|
140
|
+
title: 'Add Source',
|
141
|
+
}),
|
142
|
+
);
|
143
|
+
|
144
|
+
expect(closeOverlay).toHaveBeenCalled();
|
149
145
|
});
|
150
146
|
|
151
147
|
it('shows error message on failed submission', async () => {
|
148
|
+
const user = userEvent.setup();
|
152
149
|
(createOrUpdateStockSource as jest.Mock).mockRejectedValue(new Error('API Error'));
|
153
150
|
|
154
151
|
render(<StockSourcesAddOrUpdate />);
|
155
152
|
|
156
|
-
|
153
|
+
await user.click(screen.getByText('Save'));
|
157
154
|
|
158
|
-
|
159
|
-
expect
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
);
|
165
|
-
});
|
155
|
+
expect(showSnackbar).toHaveBeenCalledWith(
|
156
|
+
expect.objectContaining({
|
157
|
+
kind: 'error',
|
158
|
+
title: 'Error adding a source',
|
159
|
+
}),
|
160
|
+
);
|
166
161
|
});
|
167
162
|
|
168
|
-
it('closes overlay when cancel button is clicked', () => {
|
163
|
+
it('closes overlay when cancel button is clicked', async () => {
|
164
|
+
const user = userEvent.setup();
|
169
165
|
render(<StockSourcesAddOrUpdate />);
|
170
166
|
|
171
|
-
|
167
|
+
await user.click(screen.getByText('Cancel'));
|
172
168
|
|
173
169
|
expect(closeOverlay).toHaveBeenCalled();
|
174
170
|
});
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import
|
2
|
+
import userEvent from '@testing-library/user-event';
|
3
|
+
import { render, screen } from '@testing-library/react';
|
3
4
|
import '@testing-library/jest-dom/extend-expect';
|
4
5
|
import { showModal, showSnackbar } from '@openmrs/esm-framework';
|
5
6
|
import { deleteStockSource } from '../stock-sources.resource';
|
@@ -31,20 +32,18 @@ describe('StockSourcesDeleteActionMenu', () => {
|
|
31
32
|
const uuid = '1234-5678';
|
32
33
|
const uuids: string[] = ['1234-5678'];
|
33
34
|
|
34
|
-
beforeEach(() => {
|
35
|
-
jest.clearAllMocks();
|
36
|
-
});
|
37
|
-
|
38
35
|
it('renders the delete button correctly', () => {
|
39
|
-
|
40
|
-
const button = getByRole('button', { name: 'deleteSource' });
|
36
|
+
render(<StockSourcesDeleteActionMenu uuid={uuid} />);
|
37
|
+
const button = screen.getByRole('button', { name: 'deleteSource' });
|
41
38
|
expect(button).toBeInTheDocument();
|
42
39
|
});
|
43
40
|
|
44
|
-
it('opens the delete modal when the delete button is clicked', () => {
|
45
|
-
const
|
46
|
-
|
47
|
-
|
41
|
+
it('opens the delete modal when the delete button is clicked', async () => {
|
42
|
+
const user = userEvent.setup();
|
43
|
+
render(<StockSourcesDeleteActionMenu uuid={uuid} />);
|
44
|
+
|
45
|
+
const button = screen.getByRole('button', { name: 'deleteSource' });
|
46
|
+
await user.click(button);
|
48
47
|
expect(showModal).toHaveBeenCalledWith(
|
49
48
|
'delete-stock-modal',
|
50
49
|
expect.objectContaining({
|
@@ -55,7 +54,8 @@ describe('StockSourcesDeleteActionMenu', () => {
|
|
55
54
|
);
|
56
55
|
});
|
57
56
|
|
58
|
-
it('calls onConfirmation when delete is clicked', () => {
|
57
|
+
it('calls onConfirmation when delete is clicked', async () => {
|
58
|
+
const user = userEvent.setup();
|
59
59
|
const mockOnConfirmation = jest.fn();
|
60
60
|
const mockClose = jest.fn();
|
61
61
|
|
@@ -64,13 +64,14 @@ describe('StockSourcesDeleteActionMenu', () => {
|
|
64
64
|
expect(screen.getByText(/deleteStockUserScope/i)).toBeInTheDocument();
|
65
65
|
|
66
66
|
const deleteButton = screen.getByRole('button', { name: /delete/i });
|
67
|
-
|
67
|
+
await user.click(deleteButton);
|
68
68
|
|
69
69
|
expect(mockOnConfirmation).toHaveBeenCalledTimes(1);
|
70
70
|
expect(mockClose).not.toHaveBeenCalled();
|
71
71
|
});
|
72
72
|
|
73
73
|
it('calls deleteStockSource with the correct UUID on confirmation', async () => {
|
74
|
+
const user = userEvent.setup();
|
74
75
|
const mockOnConfirmation = jest.fn();
|
75
76
|
const mockClose = jest.fn();
|
76
77
|
|
@@ -85,13 +86,14 @@ describe('StockSourcesDeleteActionMenu', () => {
|
|
85
86
|
);
|
86
87
|
|
87
88
|
const deleteButton = screen.getByRole('button', { name: /delete/i });
|
88
|
-
|
89
|
+
await user.click(deleteButton);
|
89
90
|
|
90
91
|
expect(mockOnConfirmation).toHaveBeenCalledTimes(1);
|
91
92
|
expect(deleteStockSource).toHaveBeenCalledWith([uuid]);
|
92
93
|
});
|
93
94
|
|
94
95
|
it('calls handleMutate with the correct URL on successful deletion', async () => {
|
96
|
+
const user = userEvent.setup();
|
95
97
|
(deleteStockSource as jest.Mock).mockResolvedValueOnce({});
|
96
98
|
|
97
99
|
const mockOnConfirmation = jest.fn();
|
@@ -108,15 +110,14 @@ describe('StockSourcesDeleteActionMenu', () => {
|
|
108
110
|
);
|
109
111
|
|
110
112
|
const deleteButton = screen.getByRole('button', { name: /delete/i });
|
111
|
-
|
113
|
+
await user.click(deleteButton);
|
112
114
|
|
113
|
-
|
114
|
-
|
115
|
-
expect(handleMutate).toHaveBeenCalledWith('/openmrs/ws/rest/v1/stocksource');
|
116
|
-
});
|
115
|
+
expect(deleteStockSource).toHaveBeenCalledWith([uuid]);
|
116
|
+
expect(handleMutate).toHaveBeenCalledWith('/openmrs/ws/rest/v1/stocksource');
|
117
117
|
});
|
118
118
|
|
119
119
|
it('calls showSnackbar with the correct parameters on deletion error', async () => {
|
120
|
+
const user = userEvent.setup();
|
120
121
|
(deleteStockSource as jest.Mock).mockRejectedValueOnce(new Error('Deletion failed'));
|
121
122
|
|
122
123
|
const mockOnConfirmation = jest.fn();
|
@@ -139,18 +140,17 @@ describe('StockSourcesDeleteActionMenu', () => {
|
|
139
140
|
);
|
140
141
|
|
141
142
|
const deleteButton = screen.getByRole('button', { name: /delete/i });
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
kind: 'error',
|
149
|
-
});
|
143
|
+
await user.click(deleteButton);
|
144
|
+
|
145
|
+
expect(deleteStockSource).toHaveBeenCalledWith([uuid]);
|
146
|
+
expect(showSnackbar).toHaveBeenCalledWith({
|
147
|
+
title: 'stockSourceDeleteError',
|
148
|
+
kind: 'error',
|
150
149
|
});
|
151
150
|
});
|
152
151
|
|
153
152
|
it('handles the error state correctly when the delete action fails', async () => {
|
153
|
+
const user = userEvent.setup();
|
154
154
|
(deleteStockSource as jest.Mock).mockRejectedValueOnce(new Error('Deletion failed'));
|
155
155
|
|
156
156
|
const mockOnConfirmation = jest.fn();
|
@@ -173,16 +173,14 @@ describe('StockSourcesDeleteActionMenu', () => {
|
|
173
173
|
);
|
174
174
|
|
175
175
|
const deleteButton = screen.getByRole('button', { name: /delete/i });
|
176
|
-
|
176
|
+
await user.click(deleteButton);
|
177
177
|
|
178
|
-
|
179
|
-
expect(deleteStockSource).toHaveBeenCalledWith([uuid]);
|
178
|
+
expect(deleteStockSource).toHaveBeenCalledWith([uuid]);
|
180
179
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
});
|
185
|
-
expect(deleteButton).toBeInTheDocument();
|
180
|
+
expect(showSnackbar).toHaveBeenCalledWith({
|
181
|
+
title: 'stockSourceDeleteError',
|
182
|
+
kind: 'error',
|
186
183
|
});
|
184
|
+
expect(deleteButton).toBeInTheDocument();
|
187
185
|
});
|
188
186
|
});
|