
harness.zio.test.LayerProvider.scala Maven / Gradle / Ivy
package harness.zio.test
import harness.zio.test.HarnessSpec.DefaultEnv
import zio.*
import zio.test.*
sealed trait LayerProvider[+R] {
private[test] def build(spec: Spec[R & HarnessSpec.DefaultEnv, Any]): Spec[HarnessSpec.DefaultEnv, Any]
}
object LayerProvider {
inline def providePerTest[PerTestR: EnvironmentTag](inline layer: ZLayer[?, Any, ?]*): LayerProvider.PerTest[PerTestR] =
new LayerProvider.PerTest[PerTestR](
ZLayer.makeSome[DefaultEnv, PerTestR](layer*),
)
inline def provideShared[SharedR: EnvironmentTag](inline layer: ZLayer[?, Any, ?]*): LayerProvider.Shared[SharedR] =
new LayerProvider.Shared[SharedR](
ZLayer.makeSome[DefaultEnv, SharedR](layer*),
)
case object Empty extends LayerProvider[Any] {
override private[test] def build(spec: Spec[DefaultEnv, Any]): Spec[DefaultEnv, Any] = spec
}
final class Shared[SharedR: EnvironmentTag](
sharedLayer: ZLayer[DefaultEnv, Any, SharedR],
) extends LayerProvider[SharedR] {
override private[test] def build(spec: Spec[SharedR & DefaultEnv, Any]): Spec[DefaultEnv, Any] =
spec.provideSomeLayerShared(sharedLayer)
inline def providePerTest[PerTestR: EnvironmentTag](inline layer: ZLayer[?, Any, ?]*): LayerProvider.SharedAndPerTest[SharedR, PerTestR] =
new LayerProvider.SharedAndPerTest[SharedR, PerTestR](
sharedLayer,
ZLayer.makeSome[DefaultEnv, PerTestR](layer*),
)
}
final class PerTest[PerTestR: EnvironmentTag](
perTestLayer: ZLayer[DefaultEnv, Any, PerTestR],
) extends LayerProvider[PerTestR] {
override private[test] def build(spec: Spec[PerTestR & DefaultEnv, Any]): Spec[DefaultEnv, Any] =
spec.provideSomeLayer(perTestLayer)
}
final class SharedAndPerTest[SharedR: EnvironmentTag, PerTestR: EnvironmentTag](
sharedLayer: ZLayer[DefaultEnv, Any, SharedR],
perTestLayer: ZLayer[DefaultEnv & SharedR, Any, PerTestR],
) extends LayerProvider[SharedR & PerTestR] {
override private[test] def build(spec: Spec[SharedR & PerTestR & DefaultEnv, Any]): Spec[DefaultEnv, Any] =
spec.provideSomeLayer(perTestLayer).provideSomeLayerShared(sharedLayer)
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy