package GROUPID.tests.library.sample.base;

import GROUPID.tests.library.base.ServiceTestBase; import GROUPID.tests.library.base.BaseConstant; import com.github.tomakehurst.wiremock.WireMockServer; import com.jayway.restassured.filter.log.LogDetail; import com.jayway.restassured.filter.log.ResponseLoggingFilter; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;

/**

* Base class for common business logic that applies to all tests.
* Please put any utility/helper functions in SampleServiceHelper in test-library module.
* @author eing
*/

public class SampleTestBase extends ServiceTestBase {

/**
 * Creates only one instance of WireMock server for all tests that extends SampleTestBase.
 */
protected static WireMockServer wireMockServer = null;

/**
 * Creates default request and response specification for reuse.
 */
public SampleTestBase() {
    super(Constant.PROPERTIES_FILE);
    requestSpecBuilder.log(LogDetail.ALL).addFilter(new ResponseLoggingFilter(LogDetail.ALL));
    requestSpec = requestSpecBuilder.build();
    responseSpecBuilder.expectStatusCode(200);
    responseSpec = responseSpecBuilder.build();
}

/**
 * Starts up WireMock before any tests gets run.
 */
@BeforeSuite
public void beforeClass() {
    if (wireMockServer == null) {
        logger.debug("========== Starting WireMock ==========");
        String wiremockPort = internalProperties.getProperty(BaseConstant.HTTP_PROPERTY_PORT);
        if (wiremockPort != null) {
            wireMockServer = new WireMockServer(wireMockConfig().port(
                    Integer.parseInt(wiremockPort)));
            wireMockServer.start();
        }
    }
}

/**
 * Stops WireMock when all tests are executed.
 */
@AfterSuite
public void afterClass() {
    logger.debug("========== Stopping WireMock ==========");
    if (wireMockServer != null) {
        wireMockServer.stop();
        wireMockServer = null;
    }
}

}