Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make stub field of Specmatic Config nullable #1613

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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