feat: ajout de la fonctionnalité de test de configuration de scraper, incluant la mise à jour de l'API pour tester les configurations en temps réel, la gestion des erreurs détaillées et l'intégration des tests unitaires pour valider le bon fonctionnement de cette nouvelle fonctionnalité.
This commit is contained in:
parent
ee2a9b3750
commit
cbb62989d4
@@ -152,12 +152,21 @@
|
||||
<input
|
||||
id="testChapterNumber"
|
||||
v-model="testData.chapterNumber"
|
||||
type="text"
|
||||
type="number"
|
||||
step="0.1"
|
||||
class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:text-white"
|
||||
placeholder="1" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Preview de l'URL qui sera testée -->
|
||||
<div v-if="generatedTestUrl" class="mb-4 p-3 bg-blue-50 dark:bg-blue-900 border border-blue-200 dark:border-blue-700 rounded-md">
|
||||
<div class="text-sm text-blue-800 dark:text-blue-200">
|
||||
<strong>URL qui sera testée :</strong>
|
||||
<div class="mt-1 font-mono text-xs break-all">{{ generatedTestUrl }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
type="button"
|
||||
@click="testConfiguration"
|
||||
@@ -206,7 +215,7 @@ const form = ref({
|
||||
chapterUrlFormat: '',
|
||||
nextPageSelector: '',
|
||||
chapterSelector: '',
|
||||
scrapingType: 'HTML',
|
||||
scrapingType: 'html',
|
||||
token: ''
|
||||
});
|
||||
|
||||
@@ -224,6 +233,15 @@ const canTest = computed(() => {
|
||||
testData.value.chapterNumber;
|
||||
});
|
||||
|
||||
const generatedTestUrl = computed(() => {
|
||||
if (!form.value.chapterUrlFormat || !testData.value.mangaSlug || !testData.value.chapterNumber) {
|
||||
return '';
|
||||
}
|
||||
return form.value.chapterUrlFormat
|
||||
.replace('{slug}', testData.value.mangaSlug)
|
||||
.replace('{chapterNumber}', testData.value.chapterNumber);
|
||||
});
|
||||
|
||||
// Initialize form with source data if editing, clear if creating new
|
||||
watch(() => props.source, (newSource) => {
|
||||
if (newSource) {
|
||||
@@ -233,7 +251,7 @@ watch(() => props.source, (newSource) => {
|
||||
chapterUrlFormat: newSource.chapterUrlFormat || '',
|
||||
nextPageSelector: newSource.nextPageSelector || '',
|
||||
chapterSelector: newSource.chapterSelector || '',
|
||||
scrapingType: newSource.scrapingType || 'HTML',
|
||||
scrapingType: (newSource.scrapingType || 'html').toLowerCase(),
|
||||
token: newSource.token || ''
|
||||
};
|
||||
} else {
|
||||
@@ -244,7 +262,7 @@ watch(() => props.source, (newSource) => {
|
||||
chapterUrlFormat: '',
|
||||
nextPageSelector: '',
|
||||
chapterSelector: '',
|
||||
scrapingType: 'HTML',
|
||||
scrapingType: 'html',
|
||||
token: ''
|
||||
};
|
||||
}
|
||||
@@ -259,7 +277,10 @@ const testConfiguration = async () => {
|
||||
try {
|
||||
await emit('test', {
|
||||
configuration: { ...form.value },
|
||||
testData: { ...testData.value }
|
||||
testData: {
|
||||
...testData.value,
|
||||
testUrl: generatedTestUrl.value
|
||||
}
|
||||
});
|
||||
} finally {
|
||||
testing.value = false;
|
||||
|
||||
Reference in New Issue
Block a user