import React, {useState, useCallback} from 'react'; import PropTypes from 'prop-types'; import {Plus, Loader, Play} from 'lucide-react'; import FormatUnitTest from './FormatUnitTest'; import AddFormatTestModal from './AddFormatTestModal'; import DeleteConfirmationModal from '@ui/DeleteConfirmationModal'; const FormatTestingTab = ({ conditions, tests, onTestsChange, isRunningTests, onRunTests }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [editingTest, setEditingTest] = useState(null); const [deleteTestId, setDeleteTestId] = useState(null); const handleAddOrUpdateTest = useCallback( testData => { let updatedTests; if (editingTest) { // Update existing test updatedTests = tests.map(test => test.id === testData.id ? testData : test ); } else { // Add new test updatedTests = [...tests, testData]; } onTestsChange(updatedTests); onRunTests(conditions, updatedTests); setEditingTest(null); }, [tests, onTestsChange, onRunTests, conditions, editingTest] ); const handleEditTest = useCallback(test => { setEditingTest(test); setIsModalOpen(true); }, []); const handleDeleteTest = useCallback(() => { const updatedTests = tests.filter(test => test.id !== deleteTestId); onTestsChange(updatedTests); setDeleteTestId(null); }, [tests, deleteTestId, onTestsChange]); const handleCloseModal = useCallback(() => { setIsModalOpen(false); setEditingTest(null); }, []); // Calculate test statistics const totalTests = tests?.length || 0; const passedTests = tests?.filter(test => test.passes)?.length || 0; return (
{/* Header Section with Progress Bar */}

Unit Tests

{totalTests > 0 ? `${passedTests}/${totalTests} tests passing` : 'No tests added yet'}
{tests?.length > 0 && ( )}
{/* Test List */}
{tests?.length > 0 ? (
{tests.map(test => ( setDeleteTestId(test.id)} onEdit={() => handleEditTest(test)} /> ))}
) : (

No tests added yet

)}
{/* Modals */} setDeleteTestId(null)} onConfirm={handleDeleteTest} />
); }; FormatTestingTab.propTypes = { conditions: PropTypes.arrayOf( PropTypes.shape({ name: PropTypes.string.isRequired, type: PropTypes.string.isRequired, pattern: PropTypes.string, required: PropTypes.bool.isRequired, negate: PropTypes.bool.isRequired }) ).isRequired, tests: PropTypes.arrayOf( PropTypes.shape({ id: PropTypes.number.isRequired, input: PropTypes.string.isRequired, expected: PropTypes.bool.isRequired, passes: PropTypes.bool.isRequired, lastRun: PropTypes.string, conditionResults: PropTypes.array.isRequired }) ).isRequired, onTestsChange: PropTypes.func.isRequired, isRunningTests: PropTypes.bool.isRequired, onRunTests: PropTypes.func.isRequired }; export default FormatTestingTab;