io.specmatic.stub.ThreadSafeListOfStubs.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of specmatic-core Show documentation
Show all versions of specmatic-core Show documentation
Turn your contracts into executable specifications. Contract Driven Development - Collaboratively Design & Independently Deploy MicroServices & MicroFrontends.
package io.specmatic.stub
import io.specmatic.core.Result
import io.specmatic.mock.ScenarioStub
class ThreadSafeListOfStubs(private val httpStubs: MutableList) {
val size: Int
get() {
return httpStubs.size
}
fun matchResults(fn: (List) -> List>): List> {
synchronized(this) {
return fn(httpStubs.toList())
}
}
fun addToStub(result: Pair, stub: ScenarioStub) {
synchronized(this) {
result.second.let {
if(it != null)
httpStubs.add(0, it.copy(delayInSeconds = stub.delayInSeconds, stubToken = stub.stubToken))
}
}
}
fun remove(element: HttpStubData) {
synchronized(this) {
httpStubs.remove(element)
}
}
fun removeWithToken(token: String?) {
synchronized(this) {
httpStubs.mapIndexed { index, httpStubData ->
if (httpStubData.stubToken == token) index else null
}.filterNotNull().reversed().map { index ->
httpStubs.removeAt(index)
}
}
}
}