T4: MarkdownRegistrySource test + fix isPersonTable check [checkpoint]
This commit is contained in:
@@ -37,8 +37,8 @@
|
|||||||
"id": "T4",
|
"id": "T4",
|
||||||
"title": "MarkdownRegistrySource test na fixture",
|
"title": "MarkdownRegistrySource test na fixture",
|
||||||
"tag": null,
|
"tag": null,
|
||||||
"status": "todo",
|
"status": "in_progress",
|
||||||
"startedAt": null,
|
"startedAt": "2026-07-07T00:00:00Z",
|
||||||
"finishedAt": null,
|
"finishedAt": null,
|
||||||
"note": ""
|
"note": ""
|
||||||
},
|
},
|
||||||
|
|||||||
+8
-2
@@ -138,8 +138,14 @@ public class MarkdownRegistrySource implements VoivodeshipSource {
|
|||||||
if (rows.size() < 2) continue;
|
if (rows.size() < 2) continue;
|
||||||
|
|
||||||
Elements headerCells = rows.get(0).select("th, td");
|
Elements headerCells = rows.get(0).select("th, td");
|
||||||
boolean isPersonTable = headerCells.stream().anyMatch(h ->
|
boolean isPersonTable = headerCells.stream()
|
||||||
h.text().contains("Funkcja") && h.text().contains("Imię"));
|
.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;
|
if (!isPersonTable) continue;
|
||||||
|
|
||||||
|
|||||||
+76
@@ -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>
|
||||||
BIN
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.
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.
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.
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.
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.
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.
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.
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.
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
Reference in New Issue
Block a user