Phase 9
This commit is contained in:
parent
a1801af63b
commit
d2a7e652b3
16 changed files with 113 additions and 92 deletions
|
|
@ -190,7 +190,7 @@ export function ProductModal({
|
|||
|
||||
{error && <p style={{ color: 'var(--danger)', fontSize: 13, marginBottom: 12 }}>{error}</p>}
|
||||
|
||||
<form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
||||
<form onSubmit={handleSubmit} noValidate style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
|
||||
{/* Basic info */}
|
||||
<div>
|
||||
<label style={labelStyle}>Name *</label>
|
||||
|
|
|
|||
|
|
@ -36,10 +36,9 @@ describe('ImportDialog', () => {
|
|||
expect(screen.getByText('Choose .csv or .json file...')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('shows error when upload clicked without file', async () => {
|
||||
it('Upload button is disabled without file', () => {
|
||||
render(<ImportDialog {...defaultProps} />);
|
||||
fireEvent.click(screen.getByText('Upload'));
|
||||
expect(screen.getByText('Please select a file')).toBeInTheDocument();
|
||||
expect(screen.getByText('Upload')).toBeDisabled();
|
||||
});
|
||||
|
||||
it('shows file name after selection', () => {
|
||||
|
|
|
|||
|
|
@ -108,11 +108,11 @@ describe('ProductModal', () => {
|
|||
|
||||
// Fill nutrition
|
||||
const numberInputs = screen.getAllByRole('spinbutton');
|
||||
// serving size is index 0, calories=1, protein=2, carbs=3, fat=4
|
||||
fireEvent.change(numberInputs[1]!, { target: { value: '165' } });
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '31' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '0' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '3.6' } });
|
||||
// serving size is index 0, density=1, calories=2, protein=3, carbs=4, fat=5
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '165' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '31' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '0' } });
|
||||
fireEvent.change(numberInputs[5]!, { target: { value: '3.6' } });
|
||||
|
||||
fireEvent.click(screen.getByText('Save'));
|
||||
|
||||
|
|
@ -141,10 +141,10 @@ describe('ProductModal', () => {
|
|||
fireEvent.change(screen.getByPlaceholderText('e.g. 100'), { target: { value: '50' } });
|
||||
|
||||
const numberInputs = screen.getAllByRole('spinbutton');
|
||||
fireEvent.change(numberInputs[1]!, { target: { value: '10' } });
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '5' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '2' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '1' } });
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '10' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '5' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '2' } });
|
||||
fireEvent.change(numberInputs[5]!, { target: { value: '1' } });
|
||||
|
||||
fireEvent.click(screen.getByText('Save'));
|
||||
|
||||
|
|
@ -163,10 +163,10 @@ describe('ProductModal', () => {
|
|||
fireEvent.change(screen.getByPlaceholderText('e.g. 100'), { target: { value: '50' } });
|
||||
|
||||
const numberInputs = screen.getAllByRole('spinbutton');
|
||||
fireEvent.change(numberInputs[1]!, { target: { value: '10' } });
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '5' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '2' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '1' } });
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '10' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '5' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '2' } });
|
||||
fireEvent.change(numberInputs[5]!, { target: { value: '1' } });
|
||||
|
||||
fireEvent.click(screen.getByText('Save'));
|
||||
|
||||
|
|
@ -185,10 +185,10 @@ describe('ProductModal', () => {
|
|||
fireEvent.change(screen.getByPlaceholderText('e.g. 100'), { target: { value: '50' } });
|
||||
|
||||
const numberInputs = screen.getAllByRole('spinbutton');
|
||||
fireEvent.change(numberInputs[1]!, { target: { value: '10' } });
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '5' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '2' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '1' } });
|
||||
fireEvent.change(numberInputs[2]!, { target: { value: '10' } });
|
||||
fireEvent.change(numberInputs[3]!, { target: { value: '5' } });
|
||||
fireEvent.change(numberInputs[4]!, { target: { value: '2' } });
|
||||
fireEvent.change(numberInputs[5]!, { target: { value: '1' } });
|
||||
|
||||
fireEvent.click(screen.getByText('Save'));
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { describe, it, expect, vi } from 'vitest';
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen } from '@testing-library/react';
|
||||
|
||||
const { mockUsePathname } = vi.hoisted(() => ({
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { describe, it, expect, vi } from 'vitest';
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen, fireEvent, act } from '@testing-library/react';
|
||||
import { ThemeProvider, useTheme } from '../ThemeProvider';
|
||||
import { Providers } from '../Providers';
|
||||
|
|
|
|||
BIN
packages/web/test-output.txt
Normal file
BIN
packages/web/test-output.txt
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue