All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pact4s.provider.StateManagement.scala Maven / Gradle / Ivy

There is a newer version: 0.15.0
Show newest version
/*
 * Copyright 2021 io.github.jbwheatley
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package pact4s
package provider

sealed trait StateManagement

object StateManagement {
  final case class ProviderUrl(private[pact4s] val url: String) extends StateManagement

  final class StateManagementFunction private (
      private[pact4s] val stateChangeFunc: PartialFunction[ProviderState, Unit],
      private[pact4s] val stateChangeBeforeHook: () => Unit,
      private[pact4s] val host: String,
      private[pact4s] val port: Int,
      private[pact4s] val endpoint: String
  ) extends StateManagement {
    def withOverrides(
        hostOverride: String = host,
        portOverride: Int = port,
        endpointOverride: String = endpoint
    ): StateManagementFunction =
      new StateManagementFunction(
        stateChangeFunc,
        stateChangeBeforeHook,
        host = hostOverride,
        port = portOverride,
        endpoint = endpointOverride
      )

    def withBeforeEach(beforeHook: () => Unit): StateManagementFunction =
      new StateManagementFunction(stateChangeFunc, beforeHook, host, port, endpoint)

    private val slashedEndpoint                = if (!endpoint.startsWith("/")) "/" + endpoint else endpoint
    private[pact4s] def url(port: Int): String = s"http://$host:$port$slashedEndpoint"
  }

  object StateManagementFunction {

    def apply(
        stateChangeFunc: PartialFunction[ProviderState, Unit]
    ): StateManagementFunction =
      new StateManagementFunction(stateChangeFunc, () => (), "localhost", 0, "/pact4s-state-change")

  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy