refactor(scenario): remove validateCode — assertions live in execCode

- drop validateCode column, DTOs, service mappings, and scheduler branch
- remove parseValidateResult helper and ValidateResult interface
- inject playwright expect into code executor for direct use in execCode
- strip validateCode from MCP tool schemas, client types, and UI forms
This commit is contained in:
2026-04-11 00:52:50 +03:00
parent 29e91b0078
commit 238c52610a
16 changed files with 32 additions and 123 deletions
-2
View File
@@ -274,14 +274,12 @@ export const scenarioCredentials = {
export interface CreateStepPayload {
title?: string;
execCode?: string;
validateCode?: string;
}
export interface UpdateStepPayload {
title?: string;
order?: number;
execCode?: string;
validateCode?: string;
}
export const steps = {
-1
View File
@@ -66,7 +66,6 @@ export interface ScenarioStep {
order: number;
title: string | null;
execCode: string | null;
validateCode: string | null;
createdAt: string;
updatedAt: string;
}
+1 -3
View File
@@ -183,9 +183,7 @@
"form_session_placeholder": "e.g. my-session",
"form_session_required": "Session name is required",
"form_exec_code": "Exec code",
"form_exec_code_placeholder": "return await page.title();",
"form_validate_code": "Validate code",
"form_validate_code_placeholder": "return { success: result !== null, description: \"…\" };"
"form_exec_code_placeholder": "return await page.title();"
},
"runs": {
"title": "Runs",
@@ -16,7 +16,6 @@ export function CreateStepPage() {
const [scenario, setScenario] = useState<Scenario | null>(null);
const [title, setTitle] = useState('');
const [execCode, setExecCode] = useState('');
const [validateCode, setValidateCode] = useState('');
const [saving, setSaving] = useState(false);
const [error, setError] = useState<string | null>(null);
@@ -36,7 +35,6 @@ export function CreateStepPage() {
await steps.create(id!, {
title: title.trim() || undefined,
execCode: execCode.trim() || undefined,
validateCode: validateCode.trim() || undefined,
});
toast.success('Step created');
navigate(`/scenarios/${id}`);
@@ -77,10 +75,6 @@ export function CreateStepPage() {
<label className={styles.fieldLabel}>{t('steps.form_exec_code')}</label>
<CodeEditor value={execCode} onChange={setExecCode} rows={6} />
</div>
<div className={styles.formField}>
<label className={styles.fieldLabel}>{t('steps.form_validate_code')}</label>
<CodeEditor value={validateCode} onChange={setValidateCode} rows={6} />
</div>
</div>
<div className={styles.formActions}>
@@ -17,7 +17,6 @@ export function EditStepPage() {
const [step, setStep] = useState<ScenarioStep | null>(null);
const [title, setTitle] = useState('');
const [execCode, setExecCode] = useState('');
const [validateCode, setValidateCode] = useState('');
const [loading, setLoading] = useState(true);
const [saving, setSaving] = useState(false);
const [error, setError] = useState<string | null>(null);
@@ -30,7 +29,6 @@ export function EditStepPage() {
setStep(st);
setTitle(st.title ?? '');
setExecCode(st.execCode ?? '');
setValidateCode(st.validateCode ?? '');
})
.catch((err: Error) => setError(err.message))
.finally(() => setLoading(false));
@@ -44,7 +42,6 @@ export function EditStepPage() {
await steps.update(id!, stepId!, {
title: title.trim() || undefined,
execCode: execCode.trim() || undefined,
validateCode: validateCode.trim() || undefined,
});
toast.success('Step updated');
navigate(`/scenarios/${id}`);
@@ -88,10 +85,6 @@ export function EditStepPage() {
<label className={styles.fieldLabel}>{t('steps.form_exec_code')}</label>
<CodeEditor value={execCode} onChange={setExecCode} rows={6} />
</div>
<div className={styles.formField}>
<label className={styles.fieldLabel}>{t('steps.form_validate_code')}</label>
<CodeEditor value={validateCode} onChange={setValidateCode} rows={6} />
</div>
</div>
<div className={styles.formActions}>