/*************************GO-LICENSE-START*********************************
* Copyright 2014 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.
*************************GO-LICENSE-END***********************************/
package com.thoughtworks.go.domain.valuestreammap;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
public class NodeTest {
@Test
public void shouldReplaceParentNodeAtTheSameIndex() {
/*
g -> p1 -> p3
| ^
+-> p2 --+
*/
Node git = new PipelineDependencyNode("git-fingerprint", "git");
git.setLevel(0);
Node p1 = new PipelineDependencyNode("p1", "p1");
p1.setLevel(1);
Node p2 = new PipelineDependencyNode("p2", "p2");
p2.setLevel(1);
Node dummy = new PipelineDependencyNode("dummy", "dummy");
dummy.setLevel(1);
Node p3 = new PipelineDependencyNode("p3", "p3");
p2.setLevel(2);
git.addChildIfAbsent(p1);
git.addChildIfAbsent(p2);
p1.addParentIfAbsent(git);
p2.addParentIfAbsent(git);
p1.addChildIfAbsent(p3);
p2.addChildIfAbsent(p3);
p3.addParentIfAbsent(p1);
p3.addParentIfAbsent(p2);
assertThat(p3.getParents().size(), is(2));
assertThat(p3.getParents(), hasItems(p1, p2));
p3.replaceParentWith(p1, dummy);
assertThat(p3.getParents().size(), is(2));
assertThat(p3.getParents(), hasItems(dummy, p2));
}
@Test
public void shouldReplaceChildNodeAtTheSameIndex() {
/*
g -> p1
|
+-> p2
*/
Node git = new PipelineDependencyNode("git-fingerprint", "git");
git.setLevel(0);
Node p1 = new PipelineDependencyNode("p1", "p1");
p1.setLevel(1);
Node p2 = new PipelineDependencyNode("p2", "p2");
p2.setLevel(1);
Node dummy = new PipelineDependencyNode("dummy", "dummy");
dummy.setLevel(0);
git.addChildIfAbsent(p1);
git.addChildIfAbsent(p2);
p1.addParentIfAbsent(git);
p2.addParentIfAbsent(git);
assertThat(git.getChildren().size(), is(2));
assertThat(git.getChildren(), hasItems(p1, p2));
git.replaceChildWith(p1, dummy);
assertThat(git.getChildren().size(), is(2));
assertThat(git.getChildren(), hasItems(dummy, p2));
}
@Test
public void shouldGetTypeForNode() {
Node g1 = new SCMDependencyNode("g1", "g1", "git");
Node p2 = new PipelineDependencyNode("p2", "p2");
Node dummy = new DummyNode("dummy", "dummy");
assertThat(g1.getType(), is(DependencyNodeType.MATERIAL));
assertThat(p2.getType(), is(DependencyNodeType.PIPELINE));
assertThat(dummy.getType(), is(DependencyNodeType.DUMMY));
}
@Test
public void shouldCompareTwoNodesBasedOnBarycenterValue() {
PipelineDependencyNode p1 = new PipelineDependencyNode("p1", "p1");
p1.setLevel(1);
p1.setDepth(5);
PipelineDependencyNode p2 = new PipelineDependencyNode("p2", "p2");
p2.setLevel(1);
p2.setDepth(1);
PipelineDependencyNode p3 = new PipelineDependencyNode("p3", "p3");
p3.setLevel(1);
p3.setDepth(4);
List<PipelineDependencyNode> nodes = Arrays.asList(p1, p2, p3);
Collections.sort(nodes);
assertThat(nodes, is(Arrays.asList(p2, p3, p1)));
}
@Test
public void shouldAddUniqueAndNotNullRevisionsToANode() throws Exception {
Revision p11 = new PipelineRevision("p1", 1, "label1");
Revision p12 = new PipelineRevision("p1", 2, "label2");
PipelineDependencyNode node = new PipelineDependencyNode("p1", "p1");
node.setLevel(1);
node.addRevision(p11);
node.addRevision(null);
node.addRevision(p12);
node.addRevision(p11);
List<Revision> revisions = node.revisions();
assertThat(revisions.toString(), revisions.size(), is(2));
assertThat(revisions, hasItems(p11, p12));
}
@Test
public void shouldGetRevisionsSortedInOrderOfPipelineCounters() {
Node node = new PipelineDependencyNode("p", "p");
Revision revision_2 = new PipelineRevision("p", 2, "2");
Revision revision_1 = new PipelineRevision("p", 1, "1");
Revision revision_3 = new PipelineRevision("p", 3, "3");
node.addRevision(revision_2);
node.addRevision(revision_1);
node.addRevision(revision_3);
assertThat(node.revisions(), is(Arrays.asList(revision_3, revision_2, revision_1)));
}
}