Prevent deletion of in-use records
This commit is contained in:
1 parent
b8b85dbbec
commit
3a84537d42
5 files changed
+178
-7
No files matched your search
@@ -0,0 +1,59 @@
|
||||
import { MemoryRouter } from 'react-router-dom';
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import { ManageCategoriesScreen } from './ManageCategoriesScreen';
|
||||
|
||||
const categoriesMock = [{ id: 'cat-1', name: 'Snacks', created_at: 0, updated_at: 0 }];
|
||||
const productsMock = [
|
||||
{
|
||||
id: 'prod-1',
|
||||
name: 'Chips',
|
||||
category: 'Snacks',
|
||||
archived: false,
|
||||
created_at: 0,
|
||||
updated_at: 0,
|
||||
},
|
||||
];
|
||||
|
||||
vi.mock('../hooks/dataHooks', () => ({
|
||||
useCategories: () => categoriesMock,
|
||||
useProducts: () => productsMock,
|
||||
}));
|
||||
|
||||
const categoryDeleteMock = vi.fn();
|
||||
|
||||
vi.mock('../context/DBProvider', () => ({
|
||||
useDatabase: () => ({
|
||||
categories: {
|
||||
add: vi.fn(),
|
||||
update: vi.fn(),
|
||||
delete: categoryDeleteMock,
|
||||
},
|
||||
products: {
|
||||
where: () => ({
|
||||
equals: () => ({
|
||||
modify: vi.fn(),
|
||||
}),
|
||||
}),
|
||||
},
|
||||
}),
|
||||
}));
|
||||
|
||||
describe('ManageCategoriesScreen deletion safeguards', () => {
|
||||
it('shows an error when trying to delete an in-use category', async () => {
|
||||
const user = userEvent.setup();
|
||||
render(
|
||||
<MemoryRouter>
|
||||
<ManageCategoriesScreen />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
|
||||
await user.click(screen.getByRole('button', { name: /delete snacks/i }));
|
||||
|
||||
expect(categoryDeleteMock).not.toHaveBeenCalled();
|
||||
expect(
|
||||
await screen.findByText(/cannot delete 'snacks' while 1 product\(s\) use it/i),
|
||||
).toBeVisible();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user