Skip to content

Commit

Permalink
#1039 JSON serialization of the settings
Browse files Browse the repository at this point in the history
  • Loading branch information
dcoraboeuf committed Oct 30, 2022
1 parent 1092219 commit 82318dd
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package net.nemerosa.ontrack.extension.av.settings

import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import net.nemerosa.ontrack.json.SimpleDurationDeserializer
import net.nemerosa.ontrack.json.SimpleDurationSerializer
import net.nemerosa.ontrack.model.annotations.APIDescription
import net.nemerosa.ontrack.model.annotations.APILabel
import java.time.Duration
Expand All @@ -12,9 +14,11 @@ data class AutoVersioningSettings(
val enabled: Boolean,
@APIDescription("Maximum number of days to keep audit entries for non-running auto versioning requests")
@JsonDeserialize(using = SimpleDurationDeserializer::class)
@JsonSerialize(using = SimpleDurationSerializer::class)
val auditRetentionDuration: Duration = DEFAULT_AUDIT_RETENTION_DURATION,
@APIDescription("Maximum number of days to keep audit entries for all kinds of auto versioning requests (counted _after_ the audit retention)")
@JsonDeserialize(using = SimpleDurationDeserializer::class)
@JsonSerialize(using = SimpleDurationSerializer::class)
val auditCleanupDuration: Duration = DEFAULT_AUDIT_CLEANUP_DURATION,
@APIDescription("Creation of the build link on auto version check")
@APILabel("Build links on auto versioning check")
Expand All @@ -39,6 +43,6 @@ data class AutoVersioningSettings(
/**
* Default value for [AutoVersioningSettings.buildLinks]
*/
val DEFAULT_BUILD_LINKS: Boolean = true
const val DEFAULT_BUILD_LINKS: Boolean = true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package net.nemerosa.ontrack.extension.av.settings

import net.nemerosa.ontrack.json.asJson
import net.nemerosa.ontrack.json.parse
import org.junit.jupiter.api.Test
import java.time.Duration
import kotlin.test.assertEquals

internal class AutoVersioningSettingsTest {

@Test
fun `Json serialization and deserialization`() {
val settings = AutoVersioningSettings(
enabled = true,
auditRetentionDuration = Duration.ofDays(14L),
auditCleanupDuration = Duration.ofDays(90L),
buildLinks = true,
)
val json = settings.asJson()
val loaded = json.parse<AutoVersioningSettings>()
assertEquals(settings, loaded)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package net.nemerosa.ontrack.json

import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.databind.JsonSerializer
import com.fasterxml.jackson.databind.SerializerProvider
import java.time.Duration

class SimpleDurationSerializer : JsonSerializer<Duration>() {

override fun serialize(value: Duration, gen: JsonGenerator, serializers: SerializerProvider) {
val hoursPart = value.toHoursPart()
if (hoursPart == 0) {
val days = value.toDays()
if (days % 7L == 0L) {
val weeks = days / 7L
gen.writeString("${weeks}w")
} else {
gen.writeString("${days}d")
}
} else {
gen.writeString("${value.toHours()}h")
}
}

}

0 comments on commit 82318dd

Please sign in to comment.