erste Version Online-Nennen
This commit is contained in:
@@ -14,11 +14,9 @@ class ApplicationTest {
|
||||
fun testRootRouteShowsTournamentList() {
|
||||
// Erstelle ein Beispiel-Turnier, das in der Datenbank sein würde
|
||||
val mockTurnier = Turnier(
|
||||
id = "dummy-01",
|
||||
name = "Erstes DB Turnier",
|
||||
datum = "19.04.2025",
|
||||
logoUrl = null,
|
||||
ausschreibungUrl = "/pdfs/ausschreibung_dummy.pdf"
|
||||
number = 1
|
||||
)
|
||||
|
||||
// Erstelle eine Liste von Turnieren, wie sie aus der Datenbank kommen würde
|
||||
@@ -45,13 +43,7 @@ class ApplicationTest {
|
||||
strong { +turnier.name }
|
||||
+" (${turnier.datum})"
|
||||
+" "
|
||||
if (turnier.ausschreibungUrl != null) {
|
||||
a(href = turnier.ausschreibungUrl, target = "_blank") {
|
||||
button { +"Ausschreibung" }
|
||||
}
|
||||
+" "
|
||||
}
|
||||
a(href = "/nennung/${turnier.id}") {
|
||||
a(href = "/nennung/${turnier.number}") {
|
||||
button { +"Online Nennen" }
|
||||
}
|
||||
}
|
||||
@@ -82,7 +74,7 @@ class ApplicationTest {
|
||||
htmlContent.contains("(19.04.2025)"),
|
||||
"Dummy tournament date missing or incorrect"
|
||||
)
|
||||
assertTrue(htmlContent.contains("/nennung/dummy-01"), "Link to dummy tournament '/nennung/dummy-01' missing")
|
||||
assertTrue(htmlContent.contains("/nennung/1"), "Link to dummy tournament '/nennung/1' missing")
|
||||
assertFalse(
|
||||
htmlContent.contains("Keine Turniere in der Datenbank gefunden."),
|
||||
"'No tournaments' message should not be present if dummy was inserted"
|
||||
|
||||
@@ -1,16 +1,23 @@
|
||||
package at.mocode
|
||||
|
||||
import at.mocode.model.Bewerb
|
||||
import at.mocode.model.Turnier
|
||||
import at.mocode.tables.BewerbeTable
|
||||
import at.mocode.tables.TurniereTable
|
||||
import `import org`.jetbrains.exposed.sql.selectAll
|
||||
import io.ktor.http.*
|
||||
import io.ktor.server.application.*
|
||||
import io.ktor.server.html.*
|
||||
import io.ktor.server.routing.*
|
||||
import kotlinx.html.*
|
||||
import org.jetbrains.exposed.sql.Database
|
||||
import org.jetbrains.exposed.sql.Op
|
||||
import org.jetbrains.exposed.sql.SchemaUtils
|
||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder
|
||||
import org.jetbrains.exposed.sql.insert
|
||||
import org.jetbrains.exposed.sql.selectAll
|
||||
import org.jetbrains.exposed.sql.select
|
||||
import org.jetbrains.exposed.sql.selectAll
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
@@ -19,24 +26,40 @@ import org.slf4j.LoggerFactory
|
||||
*/
|
||||
fun configureTestDatabase() {
|
||||
val log = LoggerFactory.getLogger("TestDatabaseInitialization")
|
||||
log.info("Initializing in-memory H2 database for testing...")
|
||||
log.info("Initializing in-memory SQLite database for testing...")
|
||||
|
||||
// Verbinde mit einer In-Memory-H2-Datenbank
|
||||
Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver = "org.h2.Driver")
|
||||
// Verbinde mit einer In-Memory-SQLite-Datenbank
|
||||
Database.connect("jdbc:sqlite::memory:", driver = "org.sqlite.JDBC")
|
||||
|
||||
// Initialisiere das Datenbankschema
|
||||
transaction {
|
||||
log.info("Creating test database schema...")
|
||||
SchemaUtils.create(TurniereTable)
|
||||
SchemaUtils.create(TurniereTable, BewerbeTable)
|
||||
|
||||
// Füge ein Test-Turnier hinzu
|
||||
log.info("Inserting test tournament data...")
|
||||
val turnierNumber = 1
|
||||
TurniereTable.insert {
|
||||
it[id] = "dummy-01"
|
||||
it[name] = "Erstes DB Turnier"
|
||||
it[datum] = "19.04.2025"
|
||||
it[logoUrl] = null
|
||||
it[ausschreibungUrl] = "/pdfs/ausschreibung_dummy.pdf"
|
||||
it[TurniereTable.number] = turnierNumber
|
||||
it[TurniereTable.name] = "CSN-C Edelhof April 2025"
|
||||
it[TurniereTable.datum] = "14.04.2025 - 15.04.2025"
|
||||
}
|
||||
|
||||
// Füge Test-Bewerbe hinzu
|
||||
BewerbeTable.insert {
|
||||
it[BewerbeTable.nummer] = 1
|
||||
it[BewerbeTable.titel] = "Stilspringprüfung"
|
||||
it[BewerbeTable.klasse] = "60 cm"
|
||||
it[BewerbeTable.task] = null
|
||||
it[BewerbeTable.turnierNumber] = turnierNumber
|
||||
}
|
||||
|
||||
BewerbeTable.insert {
|
||||
it[BewerbeTable.nummer] = 2
|
||||
it[BewerbeTable.titel] = "Dressurprüfung"
|
||||
it[BewerbeTable.klasse] = "Kl. A"
|
||||
it[BewerbeTable.task] = "DRA 1"
|
||||
it[BewerbeTable.turnierNumber] = turnierNumber
|
||||
}
|
||||
|
||||
log.info("Test database initialized successfully!")
|
||||
@@ -57,15 +80,30 @@ fun Application.testModule() {
|
||||
|
||||
// Lese Daten aus der Test-Datenbank
|
||||
val turniereFromDb = transaction {
|
||||
TurniereTable.selectAll().map { row ->
|
||||
// Get all tournaments
|
||||
val turniere = TurniereTable.selectAll().map { row ->
|
||||
Turnier(
|
||||
id = row[TurniereTable.id],
|
||||
name = row[TurniereTable.name],
|
||||
datum = row[TurniereTable.datum],
|
||||
logoUrl = row[TurniereTable.logoUrl],
|
||||
ausschreibungUrl = row[TurniereTable.ausschreibungUrl]
|
||||
number = row[TurniereTable.number]
|
||||
)
|
||||
}
|
||||
|
||||
// For each tournament, get its competitions
|
||||
turniere.forEach { turnier ->
|
||||
val bewerbeList = BewerbeTable.selectAll().where { BewerbeTable.turnierNumber eq turnier.number }
|
||||
.map { row ->
|
||||
Bewerb(
|
||||
nummer = row[BewerbeTable.nummer],
|
||||
titel = row[BewerbeTable.titel],
|
||||
klasse = row[BewerbeTable.klasse],
|
||||
task = row[BewerbeTable.task]
|
||||
)
|
||||
}
|
||||
turnier.bewerbe = bewerbeList
|
||||
}
|
||||
|
||||
turniere
|
||||
}
|
||||
|
||||
// HTML-Antwort generieren (wie in Application.kt)
|
||||
@@ -88,13 +126,25 @@ fun Application.testModule() {
|
||||
strong { +turnier.name }
|
||||
+" (${turnier.datum})"
|
||||
+" "
|
||||
if (turnier.ausschreibungUrl != null) {
|
||||
a(href = turnier.ausschreibungUrl, target = "_blank") {
|
||||
button { +"Ausschreibung" }
|
||||
div {
|
||||
+"Bewerbe: "
|
||||
if (turnier.bewerbe.isEmpty()) {
|
||||
+"Keine"
|
||||
} else {
|
||||
ul {
|
||||
turnier.bewerbe.forEach { bewerb ->
|
||||
li {
|
||||
+"${bewerb.nummer}. ${bewerb.titel} - ${bewerb.klasse}"
|
||||
if (bewerb.task != null) {
|
||||
+" (${bewerb.task})"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+" "
|
||||
}
|
||||
a(href = "/nennung/${turnier.id}") {
|
||||
+" "
|
||||
a(href = "/nennung/${turnier.number}") {
|
||||
button { +"Online Nennen" }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package at.mocode.email
|
||||
|
||||
import at.mocode.config.EmailConfig
|
||||
import org.slf4j.LoggerFactory
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
/**
|
||||
* Tests for the EmailService class.
|
||||
* This test verifies that the email configuration is valid and that test emails can be sent.
|
||||
*/
|
||||
class EmailServiceTest {
|
||||
private val log = LoggerFactory.getLogger(EmailServiceTest::class.java)
|
||||
|
||||
@Test
|
||||
fun testEmailConfigurationIsValid() {
|
||||
// Check if the email configuration is valid
|
||||
val isValid = EmailConfig.isValid()
|
||||
|
||||
if (!isValid) {
|
||||
log.warn("Email configuration is not valid: ${EmailConfig.getValidationErrors()}")
|
||||
log.warn("Make sure the .env file contains the correct email configuration")
|
||||
log.warn("SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD, RECIPIENT_EMAIL, and SMTP_SENDER_EMAIL must be set")
|
||||
}
|
||||
|
||||
// We don't assert here because the test environment might not have valid email configuration
|
||||
log.info("Email configuration valid: $isValid")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSendTestEmail() {
|
||||
// Only run this test if the email configuration is valid
|
||||
if (!EmailConfig.isValid()) {
|
||||
log.warn("Skipping test because email configuration is not valid")
|
||||
return
|
||||
}
|
||||
|
||||
// Get the EmailService instance
|
||||
val emailService = EmailService.getInstance()
|
||||
|
||||
// Send a test email with debug enabled
|
||||
val result = emailService.sendTestEmail(debug = true)
|
||||
|
||||
// Log the result
|
||||
if (result) {
|
||||
log.info("Test email sent successfully")
|
||||
} else {
|
||||
log.error("Failed to send test email")
|
||||
}
|
||||
|
||||
// Assert that the email was sent successfully
|
||||
assertTrue(result, "Test email should be sent successfully")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user