/*******************************************************************************
* Copyright (c) 2017 Red Hat, Inc. Distributed under license by Red Hat, Inc.
* All rights reserved. This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Red Hat, Inc.
******************************************************************************/
package com.openshift.internal.restclient.model.v1;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import org.jboss.dmr.ModelNode;
import org.junit.Before;
import org.junit.Test;
import com.openshift.internal.restclient.model.BuildConfig;
import com.openshift.internal.restclient.model.EnvironmentVariable;
import com.openshift.internal.restclient.model.ModelNodeBuilder;
import com.openshift.internal.restclient.model.build.BuildConfigBuilder;
import com.openshift.restclient.IClient;
import com.openshift.restclient.IResourceFactory;
import com.openshift.restclient.ResourceKind;
import com.openshift.restclient.model.IBuildConfig;
import com.openshift.restclient.model.IEnvironmentVariable;
import com.openshift.restclient.model.build.BuildStrategyType;
import com.openshift.restclient.model.build.IBuildConfigBuilder;
import com.openshift.restclient.model.build.IBuildStrategy;
import com.openshift.restclient.model.build.IJenkinsPipelineStrategy;
import com.openshift.restclient.utils.Samples;
/**
* @author Andre Dietisheim
*/
public class PipelineBuildConfigTest {
private static final String VERSION = "v1";
private IBuildConfig pipelineBc;
private IBuildConfigBuilder builder;
@Before
public void setup() throws Exception{
this.pipelineBc = createBuildConfig(Samples.V1_BUILDCONFIG_PIPELINE.getContentAsString());
this.builder = createBuilder();
}
private IBuildConfig createBuildConfig(String content) throws MalformedURLException {
IClient client = createClient();
BuildConfig bc = new BuildConfig(ModelNode.fromJSONString(content), client, null);
IResourceFactory factory = createResourceFactoryFor(bc);
when(client.getResourceFactory()).thenReturn(factory);
return bc;
}
private IBuildConfigBuilder createBuilder() throws MalformedURLException {
IClient client = createClient();
IBuildConfig bc = new BuildConfig(new ModelNode(), client, null);
IResourceFactory factory = createResourceFactoryFor(bc);
when(client.getResourceFactory()).thenReturn(factory);
return new BuildConfigBuilder(client)
.named("foor")
.inNamespace("bar");
}
private IClient createClient() throws MalformedURLException {
IClient client = mock(IClient.class);
doReturn(new URL("https://localhost:8443")).when(client).getBaseURL();
doReturn(VERSION).when(client).getOpenShiftAPIVersion();
return client;
}
private IResourceFactory createResourceFactoryFor(IBuildConfig bc) {
IResourceFactory factory = mock(IResourceFactory.class);
when(factory.stub(eq(ResourceKind.BUILD_CONFIG), anyString(), anyString())).thenReturn(bc);
return factory;
}
@Test
public void shouldHaveJenkinsPipelineBuildStrategy() {
// given
// when
IBuildStrategy strategy = pipelineBc.getBuildStrategy();
// then
assertThat(strategy).isNotNull();
assertThat(strategy.getType()).isEqualTo(BuildStrategyType.JENKINS_PIPELINE);
}
@Test
public void shouldHaveJenkinsfile() {
// given
// when
IJenkinsPipelineStrategy strategy = pipelineBc.getBuildStrategy();
// then
assertThat(strategy.getJenkinsfile()).isNotEmpty();
}
@Test
public void shouldHaveJenkinsfileGivenItWasSet() {
// given
IJenkinsPipelineStrategy strategy = pipelineBc.getBuildStrategy();
// when
strategy.setJenkinsfile("fooBar");
// then
assertThat(strategy.getJenkinsfile()).isEqualTo("fooBar");
}
@Test
public void shouldHaveJenkinsfilePath() {
// given
// when
IJenkinsPipelineStrategy strategy = pipelineBc.getBuildStrategy();
// then
assertThat(strategy.getJenkinsfilePath()).isNotEmpty();
}
@Test
public void shouldHaveJenkinsfilePathGivenItWasSet() {
// given
IJenkinsPipelineStrategy strategy = pipelineBc.getBuildStrategy();
// when
strategy.setJenkinsfilePath("/foo/bar");
// then
assertThat(strategy.getJenkinsfilePath()).isEqualTo("/foo/bar");
}
@Test
public void shouldHaveEnvVars() {
// given
// when
IJenkinsPipelineStrategy strategy = pipelineBc.getBuildStrategy();
// then
assertThat(strategy.getEnvVars()).containsOnly(
new EnvironmentVariable(new ModelNodeBuilder()
.set("name", "foo")
.set("value", "bar")
.build(), null),
new EnvironmentVariable(new ModelNodeBuilder()
.set("name", "kung")
.set("value", "foo")
.build(), null)
);
}
@Test
public void shouldHaveEnvVarsThatWereSet() {
// given
IJenkinsPipelineStrategy strategy = pipelineBc.getBuildStrategy();
IEnvironmentVariable envVar = new EnvironmentVariable(new ModelNodeBuilder()
.set("name", "gargamel")
.set("value", "crazyLad")
.build(), null);
List<IEnvironmentVariable> envVars = Arrays.asList(envVar);
// when
strategy.setEnvVars(envVars);
// then
assertThat(strategy.getEnvVars()).containsOnly(envVar);
}
@Test
public void shouldBuildJenkinsPipelineStrategyBuildConfig() {
// given
// when
IBuildConfig bc = builder
.usingJenkinsPipelineStrategy()
.end()
.build();
// then
IBuildStrategy strategy = bc.getBuildStrategy();
assertThat(strategy).isInstanceOf(IJenkinsPipelineStrategy.class);
}
@Test
public void shouldBuildJenkinsPipelineStrategyWithJenkinsfileAndPath() {
// given
// when
IBuildConfig bc = builder
.usingJenkinsPipelineStrategy()
.usingFile("node('aNode') {}")
.usingFilePath("some/path/to/some/location")
.end()
.build();
// then
IJenkinsPipelineStrategy strategy = bc.getBuildStrategy();
assertThat(strategy.getJenkinsfile()).isEqualTo("node('aNode') {}");
assertThat(strategy.getJenkinsfilePath()).isEqualTo("some/path/to/some/location");
}
}