T4: MarkdownRegistrySource test + fix isPersonTable check [checkpoint]

This commit is contained in:
Artur Kruszewski
2026-07-08 00:34:58 +02:00
parent bc4eaac8a4
commit 7f636a19fe
116 changed files with 355 additions and 44 deletions
+2 -2
View File
@@ -37,8 +37,8 @@
"id": "T4",
"title": "MarkdownRegistrySource test na fixture",
"tag": null,
"status": "todo",
"startedAt": null,
"status": "in_progress",
"startedAt": "2026-07-07T00:00:00Z",
"finishedAt": null,
"note": ""
},
@@ -138,8 +138,14 @@ public class MarkdownRegistrySource implements VoivodeshipSource {
if (rows.size() < 2) continue;
Elements headerCells = rows.get(0).select("th, td");
boolean isPersonTable = headerCells.stream().anyMatch(h ->
h.text().contains("Funkcja") && h.text().contains("Imię"));
boolean isPersonTable = headerCells.stream()
.map(Element::text)
.collect(java.util.stream.Collectors.joining(" "))
.contains("Funkcja") &&
headerCells.stream()
.map(Element::text)
.collect(java.util.stream.Collectors.joining(" "))
.contains("Imię");
if (!isPersonTable) continue;
@@ -0,0 +1,76 @@
package com.developx.szpitale.ingest.source;
import org.junit.jupiter.api.Test;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.*;
class MarkdownRegistrySourceTest {
@Test
void fetch_fromFileResource_returnsRecord() throws Exception {
URI uri = getClass().getResource("/fixtures/research-test.md").toURI();
Path tempDir = Files.createTempDirectory("markdown-test");
Files.copy(Path.of(uri), tempDir.resolve("research-test.md"));
MarkdownRegistrySource source = new MarkdownRegistrySource(tempDir, "test");
var records = source.fetch();
assertTrue(records.size() >= 1, "Should parse at least one hospital record, got: " + records.size());
var record = records.get(0);
assertNotNull(record.hospitalName());
assertFalse(record.hospitalName().isEmpty());
assertNotNull(record.persons());
assertTrue(record.persons().size() >= 1,
"Should have at least one person entry, got: " + record.persons().size());
var person = record.persons().get(0);
assertEquals("Jan Kowalski", person.fullName());
assertFalse(person.sourceUrl().isEmpty());
}
@Test
void fetch_rowWithoutUrl_flaggedOrSkipped() throws Exception {
Path tempDir = Files.createTempDirectory("markdown-test");
Files.writeString(tempDir.resolve("research-test.md"), """
## 1. Test Hospital 2
<table>
<tr><th>Funkcja</th><th>Imię i nazwisko</th><th>A</th><th>B</th></tr>
<tr><td>Dyrektor</td><td>Anna Nowak</td><td>brak danych</td><td>BRAK_DANYSCH</td></tr>
<tr><td>Z-ca</td><td>Piotr Wiśniewski</td><td>PO</td><td>https://szpital.pl/zca</td></tr>
</table>
""", StandardCharsets.UTF_8);
MarkdownRegistrySource source = new MarkdownRegistrySource(tempDir, "test");
var records = source.fetch();
assertTrue(records.size() >= 1, "Should parse at least one hospital record");
var record = records.get(0);
int personCount = record.persons() == null ? 0 : record.persons().size();
assertTrue(personCount >= 2,
"Should have at least 2 person entries, got: " + personCount);
// First person has BRAK_DANYCH - should be flagged
var person = record.persons().get(0);
assertTrue(
person.sourceUrl().isEmpty() || person.sourceUrl().contains("BRAK") || person.sourceUrl().contains("brak"),
"Person without URL should be flagged, got: " + person.sourceUrl()
);
// Second person has valid URL
var person2 = record.persons().get(1);
assertEquals("https://szpital.pl/zca", person2.sourceUrl());
}
@Test
void fetch_noFile_returnsEmpty() {
Path tempDir = Path.of("/tmp/nonexistent-markdown-test-" + System.currentTimeMillis());
MarkdownRegistrySource source = new MarkdownRegistrySource(tempDir, "nonexistent");
var records = source.fetch();
assertTrue(records.isEmpty(), "Should return empty when no research file found");
}
}
@@ -0,0 +1,8 @@
## 1. Uniwersytecki Szpital Kliniczny w Białymstoku
Organ tworzący: Uniwersytet Medyczny w Białymstoku
<table>
<tr><th>Funkcja</th><th>Imię i nazwisko</th><th>Afiliacja partyjna</th><th>URL</th></tr>
<tr><td>Dyrektor</td><td>Jan Kowalski</td><td>PO</td><td>https://przyklad.pl/dyrekcja</td></tr>
</table>
@@ -0,0 +1,7 @@
## 1. Szpital im. Jana Nowaka w Warszawie
<table>
<tr><th>Funkcja</th><th>Imię i nazwisko</th><th>Afiliacja partyjna</th><th>Źródło (URL)</th></tr>
<tr><td>Dyrektor</td><td>Anna Nowak</td><td>brak danych</td><td>BRAK_DANYCH</td></tr>
<tr><td>Z-ca</td><td>Piotr Wiśniewski</td><td>PO</td><td>https://szpital.pl/zca</td></tr>
</table>
@@ -0,0 +1,8 @@
## 1. Test Hospital
Organ tworzący: Test
<table>
<tr><th>Funkcja</th><th>Imię i nazwisko</th><th>A</th><th>B</th></tr>
<tr><td>Dyrektor</td><td>Jan Kowalski</td><td>PO</td><td>https://przyklad.pl/dyrekcja</td></tr>
</table>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More