import { ProductForm } from '../../../../app/frontend/src/javascript/components/store/product-form';
import { render, fireEvent, waitFor, screen } from '@testing-library/react';
import '@testing-library/jest-dom';
import products from '../../__fixtures__/products';
import machines from '../../__fixtures__/machines';
import { uiRouter } from '../../__lib__/ui-router';
describe('ProductForm', () => {
const onError = jest.fn();
const onSuccess = jest.fn();
test('render ProductForm', async () => {
render();
await waitFor(() => screen.getByRole('combobox', { name: /app.admin.store.product_form.linking_product_to_category/ }));
expect(screen.getByLabelText(/app.admin.store.product_form.name/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.sku/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.slug/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.is_active_price/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.price/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.quantity_min/)).toBeInTheDocument();
expect(screen.getByRole('button', { name: /app.admin.store.product_form.add_product_image/ })).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.linking_product_to_category/)).toBeInTheDocument();
expect(screen.getByRole('heading', { name: /app.admin.store.product_form.assigning_machines/ })).toBeInTheDocument();
for (const machine of machines) {
expect(screen.getByLabelText(machine.name)).toBeInTheDocument();
}
expect(screen.getByLabelText(/app.admin.store.product_form.product_description/)).toBeInTheDocument();
expect(screen.getByRole('button', { name: /app.admin.store.product_form.add_product_file/ })).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.advanced_accounting_form.code/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.advanced_accounting_form.analytical_section/)).toBeInTheDocument();
fireEvent.click(screen.getByRole('tab', { name: /app.admin.store.product_form.stock_management/ }));
await waitFor(() =>
expect(screen.getByRole('heading', { name: /app.admin.store.product_stock_form.stock_up_to_date/ })).toBeInTheDocument()
);
expect(screen.getByLabelText(/app.admin.store.product_stock_form.stock_threshold_toggle/)).toBeInTheDocument();
});
test('toggle off the price', async () => {
render();
await waitFor(() => screen.getByRole('combobox', { name: /app.admin.store.product_form.linking_product_to_category/ }));
expect(screen.getByLabelText(/app.admin.store.product_form.price/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.quantity_min/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/)).toBeChecked();
fireEvent.click(screen.getByLabelText(/app.admin.store.product_form.is_active_price/));
expect(screen.queryByLabelText(/app.admin.store.product_form.price/)).toBeNull();
expect(screen.queryByLabelText(/app.admin.store.product_form.quantity_min/)).toBeNull();
expect(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/)).not.toBeChecked();
});
test('toggle off the visibility', async () => {
render();
await waitFor(() => screen.getByRole('combobox', { name: /app.admin.store.product_form.linking_product_to_category/ }));
expect(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/)).toBeChecked();
expect(screen.getByLabelText(/app.admin.store.product_form.is_active_price/)).toBeChecked();
expect(screen.getByLabelText(/app.admin.store.product_form.price/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.quantity_min/)).toBeInTheDocument();
fireEvent.click(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/));
expect(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/)).not.toBeChecked();
expect(screen.getByLabelText(/app.admin.store.product_form.is_active_price/)).toBeChecked();
expect(screen.getByLabelText(/app.admin.store.product_form.price/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.quantity_min/)).toBeInTheDocument();
});
test('toggle on the visibility', async () => {
render();
await waitFor(() => screen.getByRole('combobox', { name: /app.admin.store.product_form.linking_product_to_category/ }));
expect(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/)).not.toBeChecked();
expect(screen.getByLabelText(/app.admin.store.product_form.is_active_price/)).not.toBeChecked();
expect(screen.queryByLabelText(/app.admin.store.product_form.price/)).toBeNull();
expect(screen.queryByLabelText(/app.admin.store.product_form.quantity_min/)).toBeNull();
fireEvent.click(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/));
expect(screen.getByLabelText(/app.admin.store.product_form.is_show_in_store/)).toBeChecked();
expect(screen.getByLabelText(/app.admin.store.product_form.is_active_price/)).toBeChecked();
expect(screen.getByLabelText(/app.admin.store.product_form.price/)).toBeInTheDocument();
expect(screen.getByLabelText(/app.admin.store.product_form.quantity_min/)).toBeInTheDocument();
});
});