(fix) Implementiere einen Service-Layer

Erstellung von DTOs für alle Ressourcen
Implement a versioning system
This commit is contained in:
2025-06-30 22:25:35 +02:00
parent 418e692092
commit e2432510af
28 changed files with 4102 additions and 14 deletions
@@ -0,0 +1,116 @@
package at.mocode
import at.mocode.dto.ArtikelDto
import at.mocode.dto.VereinDto
import at.mocode.dto.base.VersionManager
import at.mocode.dto.base.VersionValidationResult
import at.mocode.dto.migrations.ArtikelDtoMigrator
import com.benasher44.uuid.uuid4
import com.ionspin.kotlin.bignum.decimal.BigDecimal
import kotlinx.datetime.Clock
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertIs
import kotlin.test.assertTrue
class VersioningTest {
@Test
fun testVersionManagerValidation() {
// Test valid version
val validResult = VersionManager.validateClientVersion("1.0")
assertIs<VersionValidationResult.Valid>(validResult)
assertEquals("1.0", validResult.version)
// Test unsupported version
val unsupportedResult = VersionManager.validateClientVersion("2.0")
assertIs<VersionValidationResult.UnsupportedVersion>(unsupportedResult)
assertEquals("2.0", unsupportedResult.version)
// Test missing version
val missingResult = VersionManager.validateClientVersion(null)
assertIs<VersionValidationResult.MissingVersion>(missingResult)
}
@Test
fun testVersionManagerInfo() {
val versionInfo = VersionManager.getVersionInfo()
assertEquals("1.0", versionInfo.apiVersion)
assertTrue(versionInfo.supportedVersions.contains("1.0"))
assertEquals("1.0", versionInfo.minimumClientVersion)
}
@Test
fun testArtikelDtoVersioning() {
val artikel = ArtikelDto(
id = uuid4(),
bezeichnung = "Test Artikel",
preis = BigDecimal.fromInt(100),
einheit = "Stück",
istVerbandsabgabe = false,
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
schemaVersion = "1.0",
dataVersion = 1L
)
assertEquals("1.0", artikel.schemaVersion)
assertEquals(1L, artikel.dataVersion)
}
@Test
fun testVereinDtoVersioning() {
val verein = VereinDto(
id = uuid4(),
oepsVereinsNr = "12345",
name = "Test Verein",
kuerzel = "TV",
bundesland = "Wien",
adresse = "Teststraße 1",
plz = "1010",
ort = "Wien",
email = "test@verein.at",
telefon = "+43123456789",
webseite = "www.testverein.at",
istAktiv = true,
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
schemaVersion = "1.0",
dataVersion = 1L
)
assertEquals("1.0", verein.schemaVersion)
assertEquals(1L, verein.dataVersion)
}
@Test
fun testArtikelDtoMigrator() {
val migrator = ArtikelDtoMigrator()
// Test migration capability
assertTrue(migrator.canMigrate("1.0", "1.0"))
val artikel = ArtikelDto(
id = uuid4(),
bezeichnung = "Test Artikel",
preis = BigDecimal.fromInt(100),
einheit = "Stück",
istVerbandsabgabe = false,
createdAt = Clock.System.now(),
updatedAt = Clock.System.now(),
schemaVersion = "1.0",
dataVersion = 1L
)
// Test migration (same version should return same object)
val migratedArtikel = migrator.migrate(artikel, "1.0", "1.0")
assertEquals(artikel, migratedArtikel)
}
@Test
fun testVersionSupport() {
assertTrue(VersionManager.isVersionSupported("1.0"))
assertTrue(!VersionManager.isVersionSupported("2.0"))
assertTrue(!VersionManager.isVersionDeprecated("1.0"))
}
}