Skip to content

Commit

Permalink
Make stub field nullabe
Browse files Browse the repository at this point in the history
  • Loading branch information
sukesh2000 committed Feb 19, 2025
1 parent 4f6315f commit 19863d1
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 51 deletions.
46 changes: 13 additions & 33 deletions core/src/main/kotlin/io/specmatic/core/SpecmaticConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -94,32 +94,12 @@ fun String.loadContract(): Feature {
}

data class StubConfiguration(
private val generative: Boolean? = null,
private val delayInMilliseconds: Long? = null,
private val dictionary: String? = null,
private val includeMandatoryAndRequestedKeysInResponse: Boolean? = null,
private val startTimeoutInMilliseconds: Long? = null
) {
fun getGenerative(): Boolean? {
return generative
}

fun getDelayInMilliseconds(): Long? {
return delayInMilliseconds ?: getLongValue(SPECMATIC_STUB_DELAY)
}

fun getDictionary(): String? {
return dictionary ?: getStringValue(SPECMATIC_STUB_DICTIONARY)
}

fun getIncludeMandatoryAndRequestedKeysInResponse(): Boolean? {
return includeMandatoryAndRequestedKeysInResponse
}

fun getStartTimeoutInMilliseconds(): Long? {
return startTimeoutInMilliseconds
}
}
val generative: Boolean? = null,
val delayInMilliseconds: Long? = null,
val dictionary: String? = null,
val includeMandatoryAndRequestedKeysInResponse: Boolean? = null,
val startTimeoutInMilliseconds: Long? = null
)

data class VirtualServiceConfiguration(
private val nonPatchableKeys: Set<String> = emptySet()
Expand Down Expand Up @@ -200,7 +180,7 @@ data class SpecmaticConfig(
private val report: ReportConfigurationDetails? = null,
private val security: SecurityConfiguration? = null,
private val test: TestConfiguration? = TestConfiguration(),
private val stub: StubConfiguration = StubConfiguration(),
private val stub: StubConfiguration? = null,
private val virtualService: VirtualServiceConfiguration = VirtualServiceConfiguration(),
private val examples: List<String>? = null,
private val workflow: WorkflowConfiguration? = null,
Expand Down Expand Up @@ -267,7 +247,7 @@ data class SpecmaticConfig(
}

@JsonIgnore
fun getStubConfiguration(specmaticConfig: SpecmaticConfig): StubConfiguration {
fun getStubConfiguration(specmaticConfig: SpecmaticConfig): StubConfiguration? {
return specmaticConfig.stub
}

Expand Down Expand Up @@ -317,7 +297,7 @@ data class SpecmaticConfig(

@JsonIgnore
fun getStubStartTimeoutInMilliseconds(): Long {
return stub.getStartTimeoutInMilliseconds() ?: 20_000L
return stub?.startTimeoutInMilliseconds ?: 20_000L
}

fun logDependencyProjects(azure: AzureAPI) {
Expand Down Expand Up @@ -417,22 +397,22 @@ data class SpecmaticConfig(

@JsonIgnore
fun getStubIncludeMandatoryAndRequestedKeysInResponse(): Boolean {
return stub.getIncludeMandatoryAndRequestedKeysInResponse() ?: true
return stub?.includeMandatoryAndRequestedKeysInResponse ?: true
}

@JsonIgnore
fun getStubGenerative(): Boolean {
return stub.getGenerative() ?: false
return stub?.generative ?: false
}

@JsonIgnore
fun getStubDelayInMilliseconds(): Long? {
return stub.getDelayInMilliseconds()
return stub?.delayInMilliseconds ?: getLongValue(SPECMATIC_STUB_DELAY)
}

@JsonIgnore
fun getStubDictionary(): String? {
return stub.getDictionary()
return stub?.dictionary ?: getStringValue(SPECMATIC_STUB_DICTIONARY)
}

@JsonIgnore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ data class SpecmaticConfigV1 (
val report: ReportConfigurationDetails? = null,
val security: SecurityConfiguration? = null,
val test: TestConfiguration? = TestConfiguration(),
val stub: StubConfiguration = StubConfiguration(),
val stub: StubConfiguration? = null,
@field:JsonAlias("virtual_service")
val virtualService: VirtualServiceConfiguration = VirtualServiceConfiguration(),
val examples: List<String> = getStringValue(EXAMPLE_DIRECTORIES)?.split(",") ?: emptyList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@ package io.specmatic.core.config.v2

import com.fasterxml.jackson.annotation.JsonAlias
import io.specmatic.core.*
import io.specmatic.core.SpecmaticConfig.Companion.getAttributeSelectionPattern
import io.specmatic.core.SpecmaticConfig.Companion.getAllPatternsMandatory
import io.specmatic.core.SpecmaticConfig.Companion.getAttributeSelectionPattern
import io.specmatic.core.SpecmaticConfig.Companion.getPipeline
import io.specmatic.core.SpecmaticConfig.Companion.getRepository
import io.specmatic.core.SpecmaticConfig.Companion.getSecurityConfiguration
import io.specmatic.core.SpecmaticConfig.Companion.getWorkflowConfiguration
import io.specmatic.core.SpecmaticConfig.Companion.getVirtualServiceConfiguration
import io.specmatic.core.SpecmaticConfig.Companion.getTestConfiguration
import io.specmatic.core.SpecmaticConfig.Companion.getStubConfiguration
import io.specmatic.core.SpecmaticConfig.Companion.getVirtualServiceConfiguration
import io.specmatic.core.SpecmaticConfig.Companion.getWorkflowConfiguration
import io.specmatic.core.config.SpecmaticConfigVersion
import io.specmatic.core.config.SpecmaticVersionedConfig
import io.specmatic.core.config.SpecmaticVersionedConfigLoader
Expand All @@ -29,7 +28,7 @@ data class SpecmaticConfigV2(
val report: ReportConfigurationDetails? = null,
val security: SecurityConfiguration? = null,
val test: TestConfiguration? = TestConfiguration(),
val stub: StubConfiguration = StubConfiguration(),
val stub: StubConfiguration? = null,
@field:JsonAlias("virtual_service") val virtualService: VirtualServiceConfiguration = VirtualServiceConfiguration(),
val examples: List<String> = getStringValue(EXAMPLE_DIRECTORIES)?.split(",") ?: emptyList(),
val workflow: WorkflowConfiguration? = null,
Expand Down Expand Up @@ -83,7 +82,7 @@ data class SpecmaticConfigV2(
report = SpecmaticConfig.getReport(config)?.validatePresenceOfExcludedEndpoints(currentConfigVersion()),
security = getSecurityConfiguration(config),
test = getTestConfiguration(config),
stub = getStubConfiguration(config),
stub = SpecmaticConfig.getStubConfiguration(config),
virtualService = getVirtualServiceConfiguration(config),
examples = config.getExamples(),
workflow = getWorkflowConfiguration(config),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import io.specmatic.core.ResiliencyTestSuite
import io.specmatic.core.Source
import io.specmatic.core.SourceProvider.filesystem
import io.specmatic.core.SourceProvider.git
import io.specmatic.core.config.SpecmaticConfigVersion.Companion.convertToLatestVersionedConfig
import io.specmatic.core.SpecmaticConfig
import io.specmatic.core.config.SpecmaticConfigVersion.Companion.convertToLatestVersionedConfig
import io.specmatic.core.config.v1.SpecmaticConfigV1
import io.specmatic.core.config.v2.ContractConfig
import io.specmatic.core.config.v2.ContractConfig.FileSystemContractSource
Expand Down Expand Up @@ -710,11 +710,11 @@ internal class SpecmaticConfigAllTest {
val configFromV1 = objectMapper.readValue(configYaml, SpecmaticConfigV1::class.java).transform()
val configV2 = SpecmaticConfigV2.loadFrom(configFromV1) as SpecmaticConfigV2

configV2.stub.apply {
assertThat(getGenerative()).isTrue()
assertThat(getDelayInMilliseconds()).isEqualTo(1000L)
assertThat(getDictionary()).isEqualTo("stubDictionary")
assertThat(getIncludeMandatoryAndRequestedKeysInResponse()).isTrue()
configV2.stub?.apply {
assertThat(generative).isTrue()
assertThat(delayInMilliseconds).isEqualTo(1000L)
assertThat(dictionary).isEqualTo("stubDictionary")
assertThat(includeMandatoryAndRequestedKeysInResponse).isTrue()
}
}

Expand All @@ -732,11 +732,11 @@ internal class SpecmaticConfigAllTest {
val configFromV2 = objectMapper.readValue(configYaml, SpecmaticConfigV2::class.java).transform()
val configV3 = SpecmaticConfigV2.loadFrom(configFromV2) as SpecmaticConfigV2

configV3.stub.apply {
assertThat(getGenerative()).isTrue()
assertThat(getDelayInMilliseconds()).isEqualTo(1000L)
assertThat(getDictionary()).isEqualTo("stubDictionary")
assertThat(getIncludeMandatoryAndRequestedKeysInResponse()).isTrue()
configV3.stub?.apply {
assertThat(generative).isTrue()
assertThat(delayInMilliseconds).isEqualTo(1000L)
assertThat(dictionary).isEqualTo("stubDictionary")
assertThat(includeMandatoryAndRequestedKeysInResponse).isTrue()
}
}

Expand Down

0 comments on commit 19863d1

Please sign in to comment.