fix initial balance logic and add edit for cycle data
This commit is contained in:
1 parent
7a9d600aa6
commit
697feb206c
15 files changed
+402
-93
No files matched your search
@@ -2,11 +2,12 @@ import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import SettingsPage from '../SettingsPage.tsx';
|
||||
|
||||
const { createKandangMock, createFlockMock, createCycleMock, reloadMock, farmState } = vi.hoisted(
|
||||
const { createKandangMock, createFlockMock, createCycleMock, updateCycleMock, reloadMock, farmState } = vi.hoisted(
|
||||
() => ({
|
||||
createKandangMock: vi.fn(),
|
||||
createFlockMock: vi.fn(),
|
||||
createCycleMock: vi.fn(),
|
||||
updateCycleMock: vi.fn(),
|
||||
reloadMock: vi.fn().mockResolvedValue(undefined),
|
||||
farmState: {
|
||||
sites: [{ id: 7, site_name: 'Site A', user: 99, created_at: '', updated_at: '' }],
|
||||
@@ -49,6 +50,7 @@ vi.mock('../../services/apiClient.ts', () => ({
|
||||
},
|
||||
cycles: {
|
||||
create: createCycleMock,
|
||||
update: updateCycleMock,
|
||||
remove: vi.fn(),
|
||||
},
|
||||
},
|
||||
@@ -89,6 +91,7 @@ describe('SettingsPage settings forms', () => {
|
||||
createKandangMock.mockReset();
|
||||
createFlockMock.mockReset();
|
||||
createCycleMock.mockReset();
|
||||
updateCycleMock.mockReset();
|
||||
reloadMock.mockClear();
|
||||
farmState.kandangs = [];
|
||||
farmState.flocks = [];
|
||||
@@ -124,6 +127,19 @@ describe('SettingsPage settings forms', () => {
|
||||
created_at: '',
|
||||
updated_at: '',
|
||||
});
|
||||
updateCycleMock.mockResolvedValue({
|
||||
id: 22,
|
||||
kandang: 11,
|
||||
total_days: 40,
|
||||
current_day: 1,
|
||||
start_date: '2026-08-01',
|
||||
end_date: '2026-09-09',
|
||||
chick_in_weight: 38,
|
||||
doc_in_count: 18000,
|
||||
status: 'closed',
|
||||
created_at: '',
|
||||
updated_at: '',
|
||||
});
|
||||
});
|
||||
|
||||
it('submits only backend-supported kandang fields', async () => {
|
||||
@@ -188,4 +204,46 @@ describe('SettingsPage settings forms', () => {
|
||||
doc_in_count: 20000,
|
||||
});
|
||||
});
|
||||
|
||||
it('updates an existing cycle from the edit form', async () => {
|
||||
farmState.kandangs = [
|
||||
{ id: 11, kandang_name: 'Kandang 1', site: 7, created_at: '', updated_at: '' },
|
||||
];
|
||||
farmState.selectedKandangId = 11;
|
||||
farmState.cycles = [
|
||||
{
|
||||
id: 22,
|
||||
kandang: 11,
|
||||
kandang_name: 'Kandang 1',
|
||||
total_days: 35,
|
||||
current_day: 1,
|
||||
visible_through_date: '2026-08-18',
|
||||
start_date: '2026-08-01',
|
||||
end_date: '2026-09-04',
|
||||
chick_in_weight: 35,
|
||||
doc_in_count: 20000,
|
||||
feed_initial_balance: 0,
|
||||
status: 'active',
|
||||
created_at: '',
|
||||
updated_at: '',
|
||||
},
|
||||
];
|
||||
|
||||
render(<SettingsPage />);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Ubah' }));
|
||||
fireEvent.change(screen.getByLabelText(/DOC in/i), { target: { value: '18000' } });
|
||||
fireEvent.change(screen.getByLabelText(/Berat DOC/i), { target: { value: '38' } });
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Simpan perubahan' }));
|
||||
|
||||
await waitFor(() => expect(updateCycleMock).toHaveBeenCalledTimes(1));
|
||||
expect(updateCycleMock).toHaveBeenCalledWith(22, {
|
||||
kandang: 11,
|
||||
total_days: 35,
|
||||
start_date: '2026-08-01',
|
||||
end_date: '2026-09-04',
|
||||
chick_in_weight: 38,
|
||||
doc_in_count: 18000,
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user