/* * Copyright 2017 ThoughtWorks, Inc. * * 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 com.thoughtworks.go.domain; import java.util.ArrayList; import java.util.List; import com.thoughtworks.go.config.PipelineConfig; import com.thoughtworks.go.config.PipelineConfigSaveValidationContext; import com.thoughtworks.go.config.Resource; import com.thoughtworks.go.config.Resources; import org.junit.Test; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.core.Is.is; import static org.hamcrest.number.OrderingComparison.lessThan; import static org.junit.Assert.assertThat; public class ResourcesTest { @Test public void shouldTrimResourceNames() { Resources resources = new Resources(); resources.add(new Resource("foo")); resources.add(new Resource("foo ")); assertThat(resources.size(), is(1)); Resources newResources = new Resources(); newResources.add(new Resource("foo ")); newResources.add(new Resource("foo ")); assertThat(newResources.size(), is(1)); } @Test public void shouldCompareBasedOnSimilarResourceList() { Resources resourcesA = new Resources(); Resources resourcesB = new Resources(); resourcesA.add(new Resource("xyz")); resourcesA.add(new Resource("aaa")); resourcesB.add(new Resource("xyz")); resourcesB.add(new Resource("aaa")); assertThat(resourcesA.compareTo(resourcesB), is(0)); } @Test public void shouldCompareBasedOnResourceListItHas() { Resources resourcesA = new Resources(); Resources resourcesB = new Resources(); resourcesA.add(new Resource("xyz")); resourcesA.add(new Resource("aaa")); resourcesB.add(new Resource("xyz")); resourcesB.add(new Resource("bbb")); assertThat(resourcesA.compareTo(resourcesB), is(lessThan(0))); assertThat(resourcesB.compareTo(resourcesA), is(greaterThan(0))); } @Test public void shouldUnderstandLesserLengthResourcesAsLesser() { Resources resourcesA = new Resources(); Resources resourcesB = new Resources(); resourcesA.add(new Resource("xyz")); resourcesB.add(new Resource("xyz")); resourcesB.add(new Resource("zzz")); assertThat(resourcesA.compareTo(resourcesB), is(lessThan(0))); assertThat(resourcesB.compareTo(resourcesA), is(greaterThan(0))); } @Test public void shouldNotBombIfNoResourcesPresent() { assertThat(new Resources(new Resource("xyz")).compareTo(new Resources()), is(greaterThan(0))); } @Test public void shouldIgnoreCaseNamesOfResources() { Resources resources = new Resources(); resources.add(new Resource("Eoo")); resources.add(new Resource("eoo")); assertThat(resources.size(), is(1)); } @Test public void shouldGetAllResourcesNames() { Resources resources = new Resources(); resources.add(new Resource("Eoo")); resources.add(new Resource("Poo")); List<String> names = new ArrayList<>(); names.add("Eoo"); names.add("Poo"); List<String> resourceNames = resources.resourceNames(); assertThat(resourceNames, is(names)); } @Test public void shouldNotAllowBlankNames() { Resources resources = new Resources(); resources.add(new Resource("")); assertThat(resources.size(), is(0)); resources.add(new Resource(" ")); assertThat(resources.size(), is(0)); } @Test public void shouldNotAddDuplicateResources() { Resources expected = new Resources(); expected.add(new Resource("jdk1.4")); expected.add(new Resource("jdk1.5")); Resources actual = new Resources(); actual.add(new Resource("jdk1.4")); actual.add(new Resource("jdk1.5")); actual.add(new Resource("Jdk1.5")); assertThat(expected, is(actual)); } @Test public void shouldHaveNiceConvenienceConstructorThatDoesSomeNiftyParsing() { Resources actual = new Resources("mou, fou"); assertThat(actual.toString(), is("fou | mou")); } @Test public void shouldNotBeAbleToAddResourceWithWhiteSpaceAsName() { Resources actual = new Resources(); actual.add(new Resource(" ")); assertThat(actual.size(), is(0)); } @Test public void shouldReturnSortedResourceNamesAsStringRepresention() { Resources actual = new Resources(); actual.add(new Resource("jdk1.4")); actual.add(new Resource("linux")); actual.add(new Resource("gentoo")); actual.add(new Resource("jdk1.5")); actual.add(new Resource("Jdk1.5")); assertThat(actual.size(), is(4)); assertThat(actual.toString(), is("gentoo | jdk1.4 | jdk1.5 | linux")); } @Test public void shouldReturnListOfResoucesAsCommaSeperatedList() { Resources actual = new Resources(); actual.add(new Resource(" a ")); actual.add(new Resource(" b")); actual.add(new Resource("c")); assertThat(actual.exportToCsv(), is("a, b, c, ")); } @Test public void shouldClearAndSetPrimitiveAttributes() { Resources resources = new Resources(); String csv = "a, b, c,d "; resources.add(new Resource("old_resource")); assertThat(resources.size(), is(1)); resources.importFromCsv(csv); assertThat(resources.size(), is(4)); assertThat(resources.exportToCsv(), is("a, b, c, d, ")); } @Test public void shouldValidateTree(){ Resource resource1 = new Resource("a#"); Resource resource2 = new Resource("b"); Resources resources = new Resources(resource1, resource2); resources.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig())); assertThat(resource1.errors().size(), is(1)); assertThat(resource1.errors().firstError(), is(String.format("Resource name 'a#' is not valid. Valid names much match '%s'", Resource.VALID_REGEX))); assertThat(resource2.errors().isEmpty(), is(true)); } }