feat: bulk test case creation (#346)

This commit is contained in:
Mucahit Bilal GOKER
2025-11-27 16:13:04 +03:00
committed by GitHub
parent 8585976d38
commit 92d6340ddc
7 changed files with 49 additions and 15 deletions

View File

@@ -217,7 +217,7 @@
"delete": "Delete", "delete": "Delete",
"close": "Close", "close": "Close",
"are_you_sure": "Are you sure you want to delete test cases?", "are_you_sure": "Are you sure you want to delete test cases?",
"new_test_case": "New Test Case", "new_test_case": "New",
"export": "Export", "export": "Export",
"status": "Status", "status": "Status",
"no_cases_found": "No test cases found", "no_cases_found": "No test cases found",
@@ -248,7 +248,8 @@
"click_to_upload": "Click to upload", "click_to_upload": "Click to upload",
"or_drag_and_drop": " or drag and drop", "or_drag_and_drop": " or drag and drop",
"max_file_size": "Max. file size", "max_file_size": "Max. file size",
"cases_imported": "Test cases imported" "cases_imported": "Test cases imported",
"create_more": "Create more"
}, },
"Case": { "Case": {
"back_to_cases": "Back to test cases", "back_to_cases": "Back to test cases",

View File

@@ -217,7 +217,7 @@
"delete": "削除", "delete": "削除",
"close": "閉じる", "close": "閉じる",
"are_you_sure": "テストケースを削除してもよろしいですか?", "are_you_sure": "テストケースを削除してもよろしいですか?",
"new_test_case": "新規テストケース", "new_test_case": "新規",
"export": "エクスポート", "export": "エクスポート",
"status": "ステータス", "status": "ステータス",
"no_cases_found": "テストケースがありません", "no_cases_found": "テストケースがありません",
@@ -248,7 +248,8 @@
"click_to_upload": "クリックしてアップロード", "click_to_upload": "クリックしてアップロード",
"or_drag_and_drop": "またはドラッグアンドドロップ", "or_drag_and_drop": "またはドラッグアンドドロップ",
"max_file_size": "最大ファイルサイズ", "max_file_size": "最大ファイルサイズ",
"cases_imported": "テストケースがインポートされました" "cases_imported": "テストケースがインポートされました",
"create_more": "さらに作成"
}, },
"Case": { "Case": {
"back_to_cases": "テストケース一覧に戻る", "back_to_cases": "テストケース一覧に戻る",

View File

@@ -217,7 +217,7 @@
"delete": "Excluir", "delete": "Excluir",
"close": "Fechar", "close": "Fechar",
"are_you_sure": "Tem certeza de que deseja excluir os casos de teste?", "are_you_sure": "Tem certeza de que deseja excluir os casos de teste?",
"new_test_case": "Novo Caso de Teste", "new_test_case": "Novo",
"export": "Exportar", "export": "Exportar",
"status": "Status", "status": "Status",
"no_cases_found": "Nenhum caso de teste encontrado", "no_cases_found": "Nenhum caso de teste encontrado",
@@ -248,7 +248,8 @@
"click_to_upload": "Clique para enviar", "click_to_upload": "Clique para enviar",
"or_drag_and_drop": " ou arraste e solte", "or_drag_and_drop": " ou arraste e solte",
"max_file_size": "Tamanho máx. do arquivo", "max_file_size": "Tamanho máx. do arquivo",
"cases_imported": "Casos de teste importados" "cases_imported": "Casos de teste importados",
"create_more": "Criar mais"
}, },
"Case": { "Case": {
"back_to_cases": "Voltar para os casos de teste", "back_to_cases": "Voltar para os casos de teste",

View File

@@ -1,12 +1,22 @@
'use client'; 'use client';
import { useState } from 'react'; import { useState } from 'react';
import { Button, Input, Textarea, Modal, ModalContent, ModalHeader, ModalBody, ModalFooter } from '@heroui/react'; import {
Button,
Input,
Textarea,
Modal,
ModalContent,
ModalHeader,
ModalBody,
ModalFooter,
Switch,
} from '@heroui/react';
import { CasesMessages } from '@/types/case'; import { CasesMessages } from '@/types/case';
type Props = { type Props = {
isOpen: boolean; isOpen: boolean;
onCancel: () => void; onCancel: () => void;
onSubmit: (title: string, description: string) => void; onSubmit: (title: string, description: string, createMore: boolean) => void;
messages: CasesMessages; messages: CasesMessages;
}; };
@@ -23,6 +33,8 @@ export default function CaseDialog({ isOpen, onCancel, onSubmit, messages }: Pro
errorMessage: '', errorMessage: '',
}); });
const [createMore, setCreateMore] = useState(false);
const clear = () => { const clear = () => {
setCaseName({ setCaseName({
isValid: false, isValid: false,
@@ -47,8 +59,23 @@ export default function CaseDialog({ isOpen, onCancel, onSubmit, messages }: Pro
return; return;
} }
onSubmit(caseTitle.text, caseDescription.text); onSubmit(caseTitle.text, caseDescription.text, createMore);
clear();
if (!createMore) {
clear();
} else {
// Reset form fields but keep dialog open
setCaseName({
isValid: false,
text: 'Untitled Case',
errorMessage: '',
});
setCaseDescription({
isValid: false,
text: '',
errorMessage: '',
});
}
}; };
return ( return (
@@ -88,9 +115,9 @@ export default function CaseDialog({ isOpen, onCancel, onSubmit, messages }: Pro
/> />
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant="light" onPress={onCancel}> <Switch size="sm" isSelected={createMore} onValueChange={setCreateMore}>
{messages.close} {messages.createMore}
</Button> </Switch>
<Button color="primary" onPress={validate}> <Button color="primary" onPress={validate}>
{messages.create} {messages.create}
</Button> </Button>

View File

@@ -112,10 +112,12 @@ export default function CasesPane({
const closeDialog = () => setIsCaseDialogOpen(false); const closeDialog = () => setIsCaseDialogOpen(false);
const onSubmit = async (title: string, description: string) => { const onSubmit = async (title: string, description: string, createMore: boolean) => {
const newCase = await createCase(context.token.access_token, folderId, title, description); const newCase = await createCase(context.token.access_token, folderId, title, description);
setCases([...cases, newCase]); setCases([...cases, newCase]);
closeDialog(); if (!createMore) {
closeDialog();
}
}; };
const closeDeleteConfirmDialog = () => { const closeDeleteConfirmDialog = () => {

View File

@@ -57,6 +57,7 @@ export default function Page({ params }: { params: { projectId: string; folderId
orDragAndDrop: t('or_drag_and_drop'), orDragAndDrop: t('or_drag_and_drop'),
maxFileSize: t('max_file_size'), maxFileSize: t('max_file_size'),
casesImported: t('cases_imported'), casesImported: t('cases_imported'),
createMore: t('create_more'),
}; };
const priorityTranslation = useTranslations('Priority'); const priorityTranslation = useTranslations('Priority');

View File

@@ -105,6 +105,7 @@ type CasesMessages = {
orDragAndDrop: string; orDragAndDrop: string;
maxFileSize: string; maxFileSize: string;
casesImported: string; casesImported: string;
createMore: string;
}; };
type CaseMessages = { type CaseMessages = {