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
@@ -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>