Remove deprecated ZnsLegacyParsersTest.kt, synchronize database schema with Exposed domain models (migration V010), add license-related fields to Reiter, integrate updated LicenseMatrixService fallback logic, improve ZnsImportService with file archiving, and add ZNS testing runbook.
This commit is contained in:
@@ -1,242 +0,0 @@
|
||||
package at.mocode.zns.parser
|
||||
|
||||
import at.mocode.core.domain.model.PferdeGeschlechtE
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
|
||||
class ZnsLegacyParsersTest {
|
||||
|
||||
@Test
|
||||
fun `parseVerein should extract VEREIN01 correctly`() {
|
||||
val line = "1234Reitverein Test "
|
||||
val result = ZnsLegacyParsers.parseVerein(line)
|
||||
|
||||
assertNotNull(result)
|
||||
assertEquals("1234", result.vereinsNummer)
|
||||
assertEquals("Reitverein Test", result.vereinName)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parseLizenz should extract LIZENZ01 correctly`() {
|
||||
val sb = StringBuilder()
|
||||
sb.append("123456") // 1-6
|
||||
sb.append("Mustermann ") // 7-56
|
||||
sb.append("Max ") // 57-81
|
||||
sb.append("01") // 82-83
|
||||
sb.append("Reitverein Wien ") // 84-133
|
||||
sb.append("AUT") // 134-136
|
||||
sb.append("R1 ") // 137-140
|
||||
sb.append(" ") // 141-146 (leer)
|
||||
sb.append("00000001") // 147-154 (mitgliedsNummer)
|
||||
sb.append("0676 12345678 ") // 155-176 (telefonNummer length 22)
|
||||
sb.append("2026") // 177-180 (lastPayYear)
|
||||
sb.append("M") // 181 (geschlecht)
|
||||
sb.append("19800101") // 182-189 (geburtsdatum)
|
||||
sb.append("1000000001") // 190-199 (feiId length 10)
|
||||
sb.append("S") // 200 (sperrListe)
|
||||
sb.append("INFO1 ") // 201-210 (lizenzInfo)
|
||||
|
||||
val result = ZnsLegacyParsers.parseLizenz(sb.toString())
|
||||
assertNotNull(result)
|
||||
assertEquals("123456", result.satznummer)
|
||||
assertEquals("Mustermann", result.nachname)
|
||||
assertEquals("Max", result.vorname)
|
||||
assertEquals(1, result.bundeslandNummer)
|
||||
assertEquals("Reitverein Wien", result.vereinsName)
|
||||
assertEquals("AUT", result.nation)
|
||||
assertEquals("R1", result.reiterLizenz)
|
||||
assertEquals(2026, result.lastPayYear)
|
||||
assertEquals("M", result.geschlecht)
|
||||
assertEquals("1980-01-01", result.geburtsdatum.toString())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parsePferd should extract PFERDE01 correctly`() {
|
||||
val sb = StringBuilder()
|
||||
sb.append("A123")
|
||||
sb.append("Black Beauty ")
|
||||
sb.append("123456789")
|
||||
sb.append("W")
|
||||
sb.append("2010")
|
||||
|
||||
while (sb.length < 201) {
|
||||
sb.append(" ")
|
||||
}
|
||||
sb.append("0000000001")
|
||||
|
||||
val result = ZnsLegacyParsers.parsePferd(sb.toString())
|
||||
assertNotNull(result)
|
||||
assertEquals("A123", result.kopfnummer)
|
||||
assertEquals("0000000001", result.satznummer)
|
||||
assertEquals("Black Beauty", result.pferdeName)
|
||||
assertEquals("123456789", result.lebensnummer)
|
||||
assertEquals(PferdeGeschlechtE.WALLACH, result.geschlecht)
|
||||
assertEquals(2010, result.geburtsjahr)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parseFunktionaer should extract RICHT01 correctly for Richter`() {
|
||||
// Real example from RICHT01.dat
|
||||
val line = "X010128Zitterbart Rainer PI-A"
|
||||
val result = ZnsLegacyParsers.parseFunktionaer(line)
|
||||
|
||||
assertNotNull(result)
|
||||
assertEquals("X", result.satzId)
|
||||
assertEquals(10128, result.satzNummer)
|
||||
assertEquals("Zitterbart Rainer", result.name)
|
||||
assertEquals(listOf("PI-A"), result.qualifikationen)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parseFunktionaer should extract RICHT01 correctly with more examples`() {
|
||||
// X139552Mc Mullen Elizabeth DIOR
|
||||
val line1 = "X139552Mc Mullen Elizabeth DIOR"
|
||||
val result1 = ZnsLegacyParsers.parseFunktionaer(line1)
|
||||
assertNotNull(result1)
|
||||
assertEquals("X", result1.satzId)
|
||||
assertEquals(139552, result1.satzNummer)
|
||||
assertEquals("Mc Mullen Elizabeth", result1.name)
|
||||
assertEquals(listOf("DIOR"), result1.qualifikationen)
|
||||
|
||||
// X014346Schubert Renate DM,DPF,GAR-SP,SPF,SS*
|
||||
val line2 = "X014346Schubert Renate DM,DPF,GAR-SP,SPF,SS*"
|
||||
val result2 = ZnsLegacyParsers.parseFunktionaer(line2)
|
||||
assertNotNull(result2)
|
||||
assertEquals(14346, result2.satzNummer)
|
||||
assertEquals("Schubert Renate", result2.name)
|
||||
assertEquals(listOf("DM", "DPF", "GAR-SP", "SPF", "SS*"), result2.qualifikationen)
|
||||
|
||||
// Y002211Salusek Andreas Christian P3,PL2
|
||||
val line3 = "Y002211Salusek Andreas Christian P3,PL2"
|
||||
val result3 = ZnsLegacyParsers.parseFunktionaer(line3)
|
||||
assertNotNull(result3)
|
||||
assertEquals("Y", result3.satzId)
|
||||
assertEquals(2211, result3.satzNummer)
|
||||
assertEquals("Salusek Andreas Christian", result3.name)
|
||||
assertEquals(listOf("P3", "PL2"), result3.qualifikationen)
|
||||
|
||||
// X001061Kager Franz DPF,DSGP,GAR-SP,GAR-VS,SPF
|
||||
val line4 = "X001061Kager Franz DPF,DSGP,GAR-SP,GAR-VS,SPF"
|
||||
val result4 = ZnsLegacyParsers.parseFunktionaer(line4)
|
||||
assertNotNull(result4)
|
||||
assertEquals("X", result4.satzId)
|
||||
assertEquals(1061, result4.satzNummer)
|
||||
assertEquals("Kager Franz", result4.name)
|
||||
assertEquals(listOf("DPF", "DSGP", "GAR-SP", "GAR-VS", "SPF"), result4.qualifikationen)
|
||||
|
||||
// X001112Keiblinger Brigitta DPF,DSGP,SPF,SS,VS,VSILEV1"
|
||||
val line5 = "X001112Keiblinger Brigitta DPF,DSGP,SPF,SS,VS,VSILEV1"
|
||||
val result5 = ZnsLegacyParsers.parseFunktionaer(line5)
|
||||
assertNotNull(result5)
|
||||
assertEquals("X", result5.satzId)
|
||||
assertEquals(1112, result5.satzNummer)
|
||||
assertEquals("Keiblinger Brigitta", result5.name)
|
||||
assertEquals(listOf("DPF", "DSGP", "SPF", "SS", "VS", "VSILEV1"), result5.qualifikationen)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parseFunktionaer should return null for invalid lines`() {
|
||||
assertEquals(null, ZnsLegacyParsers.parseFunktionaer(""))
|
||||
assertEquals(null, ZnsLegacyParsers.parseFunktionaer("Z123456Test"))
|
||||
assertEquals(null, ZnsLegacyParsers.parseFunktionaer("XABCDEFTest"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parsePferd should extract real PFERDE01 correctly`() {
|
||||
// Real example from PFERDE01.dat (line length approx 211 characters)
|
||||
val line = "9D56Viola B 000000017S2005Brauner Tschech. WB 10952024Tanja Kuntner 535 Latinus 5637401268"
|
||||
val result = ZnsLegacyParsers.parsePferd(line)
|
||||
|
||||
assertNotNull(result)
|
||||
assertEquals("9D56", result.kopfnummer)
|
||||
assertEquals("Viola B", result.pferdeName)
|
||||
assertEquals("000000017", result.lebensnummer)
|
||||
assertEquals(PferdeGeschlechtE.STUTE, result.geschlecht)
|
||||
assertEquals(2005, result.geburtsjahr)
|
||||
assertEquals("Brauner", result.farbe)
|
||||
assertEquals("Tschech. WB", result.abstammung)
|
||||
assertEquals(1095, result.vereinNummer)
|
||||
assertEquals(2024, result.lastPayYear)
|
||||
assertEquals("Tanja Kuntner", result.verantwortlichePersonId)
|
||||
assertEquals("535 Latinus", result.vater)
|
||||
assertEquals("5637401268", result.satznummer)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parsePferd should extract shortened PFERDE01 correctly`() {
|
||||
// A line that ends after the name
|
||||
val line = "1234Fuchur"
|
||||
val result = ZnsLegacyParsers.parsePferd(line)
|
||||
|
||||
assertNotNull(result)
|
||||
assertEquals("1234", result.kopfnummer)
|
||||
assertEquals("Fuchur", result.pferdeName)
|
||||
assertEquals(null, result.satznummer)
|
||||
assertEquals(null, result.lebensnummer)
|
||||
assertEquals(PferdeGeschlechtE.UNBEKANNT, result.geschlecht)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parseLizenz should extract real LIZENZ01 correctly for Ebner Sarah`() {
|
||||
// Real example from user:
|
||||
// "100365Ebner Sarah 09Hubertus Voltigier Reit- und Fahrverein AUTR2S3 903801690699 18109450 2025W1990100310137032 R2S3 "
|
||||
val line = "100365Ebner Sarah 09Hubertus Voltigier Reit- und Fahrverein AUTR2S3 903801690699 18109450 2025W1990100310137032 R2S3 "
|
||||
|
||||
val result = ZnsLegacyParsers.parseLizenz(line)
|
||||
|
||||
assertNotNull(result)
|
||||
assertEquals("100365", result.satznummer)
|
||||
assertEquals("Ebner", result.nachname)
|
||||
assertEquals("Sarah", result.vorname)
|
||||
assertEquals(9, result.bundeslandNummer)
|
||||
assertEquals("Hubertus Voltigier Reit- und Fahrverein", result.vereinsName)
|
||||
assertEquals("AUT", result.nation)
|
||||
assertEquals("R2S3", result.reiterLizenz)
|
||||
assertEquals(90380169, result.mitgliedsNummer)
|
||||
assertEquals("0699 18109450", result.telefonNummer)
|
||||
assertEquals(2025, result.lastPayYear)
|
||||
assertEquals("W", result.geschlecht)
|
||||
assertEquals("1990-10-03", result.geburtsdatum.toString())
|
||||
assertEquals("10137032", result.feiId)
|
||||
assertEquals("R2S3", result.lizenzInfo)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `parseLizenz should extract real LIZENZ01 correctly`() {
|
||||
// Real example from LIZENZ01.dat (second line of file)
|
||||
val sb = StringBuilder()
|
||||
sb.append("000010") // 1-6
|
||||
sb.append("Aichinger ") // 7-56
|
||||
sb.append("Ewald ") // 57-81
|
||||
sb.append("02") // 82-83
|
||||
sb.append("Reitverein Geiger-Amstetten ") // 84-133
|
||||
sb.append("AUT") // 134-136
|
||||
sb.append("R2 ") // 137-140
|
||||
sb.append(" ") // 141-146 (leer)
|
||||
sb.append("20660700") // 147-154 (mitgliedsNummer)
|
||||
sb.append("0676 4825910 ") // 155-176 (telefon)
|
||||
sb.append("2023") // 177-180 (lastPayYear)
|
||||
sb.append("M") // 181 (geschlecht)
|
||||
sb.append("19571010") // 182-189 (geburtsdatum)
|
||||
sb.append(" ") // 190-199 (feiId length 10)
|
||||
sb.append(" ") // 200 (sperrliste)
|
||||
sb.append(" ") // 201-210 (lizenzinfo)
|
||||
|
||||
val result = ZnsLegacyParsers.parseLizenz(sb.toString())
|
||||
|
||||
assertNotNull(result)
|
||||
assertEquals("000010", result.satznummer)
|
||||
assertEquals("Aichinger", result.nachname)
|
||||
assertEquals("Ewald", result.vorname)
|
||||
assertEquals(2, result.bundeslandNummer)
|
||||
assertEquals("Reitverein Geiger-Amstetten", result.vereinsName)
|
||||
assertEquals("AUT", result.nation)
|
||||
assertEquals("R2", result.reiterLizenz)
|
||||
assertEquals(20660700, result.mitgliedsNummer)
|
||||
assertEquals("0676 4825910", result.telefonNummer)
|
||||
assertEquals(2023, result.lastPayYear)
|
||||
assertEquals("M", result.geschlecht)
|
||||
assertEquals("1957-10-10", result.geburtsdatum.toString())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user