Skip to content

Commit

Permalink
Merge pull request #1176 from znsio/double_value_gen_when_min_max_not…
Browse files Browse the repository at this point in the history
…_set

Enable generation of double value when isDoubleFormat is true and min and max are not set
  • Loading branch information
yogeshnikam671 authored Jul 11, 2024
2 parents 545be40 + 5a011f9 commit 423907d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 10 deletions.
16 changes: 10 additions & 6 deletions core/src/main/kotlin/in/specmatic/core/pattern/NumberPattern.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ data class NumberPattern(
val maximum: BigDecimal = HIGHEST_DECIMAL,
val exclusiveMaximum: Boolean = false,
override val example: String? = null,
val isDoubleFormat: Boolean = true
val isDoubleFormat: Boolean = false
) : Pattern, ScalarType, HasDefaultExample {

companion object {
Expand Down Expand Up @@ -79,11 +79,15 @@ data class NumberPattern(

override fun generate(resolver: Resolver): Value {
if (minAndMaxValuesNotSet()) {
val length =
if(minLength > 3) minLength
else if(maxLength < 3) maxLength
else 3
return resolver.resolveExample(example, this) ?: NumberValue(randomNumber(length))
val exampleValue = resolver.resolveExample(example, this)
if (exampleValue != null) return exampleValue
val length = when {
minLength > 3 -> minLength
maxLength < 3 -> maxLength
else -> 3
}
if (isDoubleFormat) return NumberValue(randomNumber(length).toDouble())
return NumberValue(randomNumber(length))
}

val min = if (minimum == LOWEST_DECIMAL) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,14 @@ internal class NumberPatternTest {

@Test
fun `should generate 1 digit long random number when min and max length are not specified`() {
assertThat(NumberPattern().generate(Resolver()).toStringLiteral().length).isEqualTo(3)
assertThat(NumberPattern(isDoubleFormat = false).generate(Resolver()).toStringLiteral().length).isEqualTo(3)
}

@Test
fun `should generate a random double number when min and max length are not specified`() {
val numberValue = NumberPattern(isDoubleFormat = true).generate(Resolver()) as NumberValue

assertThat((numberValue.number is Double)).isTrue()
}

@Test
Expand Down Expand Up @@ -190,7 +197,7 @@ internal class NumberPatternTest {

@Test
fun `should generate a number greater than minimum and maximum when are set and exclusive keywords are both true`() {
val generatedValues = (0..5).map { NumberPattern(minimum = BigDecimal(5.0), exclusiveMinimum = true, maximum = BigDecimal(10.0), exclusiveMaximum = true).generate(Resolver()) }
val generatedValues = (0..5).map { NumberPattern(minimum = BigDecimal(5.0), exclusiveMinimum = true, maximum = BigDecimal(10.0), exclusiveMaximum = true, isDoubleFormat = true).generate(Resolver()) }
assertThat(generatedValues).allSatisfy {
it as NumberValue
assertThat(it.number.toDouble()).isGreaterThan(5.0)
Expand Down Expand Up @@ -288,7 +295,7 @@ internal class NumberPatternTest {
@Tag(GENERATION)
fun `negative values generated should include a value greater than minimum and maximum keyword values`() {
val result =
NumberPattern(minimum = BigDecimal(10.0), maximum = BigDecimal(20.0)).negativeBasedOn(Row(), Resolver())
NumberPattern(minimum = BigDecimal(10.0), maximum = BigDecimal(20.0), isDoubleFormat = true).negativeBasedOn(Row(), Resolver())
.map { it.value }.toList()

assertThat(result).containsExactlyInAnyOrder(
Expand All @@ -302,7 +309,7 @@ internal class NumberPatternTest {

@Test
fun `NumberPattern with no constraints must generate a 3 digit number to ensure that Spring Boot is not able to convert it into an enum`() {
val number = NumberPattern().generate(Resolver()).toStringLiteral()
val number = NumberPattern(isDoubleFormat = false).generate(Resolver()).toStringLiteral()
assertThat(number).hasSize(3)
}
}

0 comments on commit 423907d

Please sign in to comment.