/*
* 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.helper;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import com.thoughtworks.go.config.CaseInsensitiveString;
import com.thoughtworks.go.config.JobConfig;
import com.thoughtworks.go.config.PipelineConfig;
import com.thoughtworks.go.config.StageConfig;
import com.thoughtworks.go.config.materials.MaterialConfigs;
import com.thoughtworks.go.domain.DefaultSchedulingContext;
import com.thoughtworks.go.domain.JobResult;
import com.thoughtworks.go.domain.JobState;
import com.thoughtworks.go.domain.MaterialRevision;
import com.thoughtworks.go.domain.MaterialRevisions;
import com.thoughtworks.go.domain.PipelinePauseInfo;
import com.thoughtworks.go.domain.StageIdentifier;
import com.thoughtworks.go.domain.StageResult;
import com.thoughtworks.go.domain.buildcause.BuildCause;
import com.thoughtworks.go.domain.materials.Material;
import com.thoughtworks.go.domain.materials.Modification;
import com.thoughtworks.go.domain.materials.ModifiedAction;
import com.thoughtworks.go.presentation.pipelinehistory.JobHistory;
import com.thoughtworks.go.presentation.pipelinehistory.PipelineInstanceModel;
import com.thoughtworks.go.presentation.pipelinehistory.PipelineInstanceModels;
import com.thoughtworks.go.presentation.pipelinehistory.PipelineModel;
import com.thoughtworks.go.presentation.pipelinehistory.StageInstanceModel;
import com.thoughtworks.go.presentation.pipelinehistory.StageInstanceModels;
import com.thoughtworks.go.server.domain.Username;
import com.thoughtworks.go.server.service.InstanceFactory;
import com.thoughtworks.go.server.service.MaterialConfigConverter;
import com.thoughtworks.go.util.GoConstants;
import com.thoughtworks.go.util.TimeProvider;
public class PipelineHistoryMother {
public static final String REVISION = "svn.100";
public static final String APPROVED_BY = "lgao";
private static String md5 = "md5-test";
public static PipelineInstanceModels pipelineHistory(PipelineConfig pipelineConfig, Date modificationDate) {
return pipelineHistory(pipelineConfig, modificationDate, modificationDate);
}
public static PipelineInstanceModels pipelineHistory(PipelineConfig pipelineConfig, Date scheduleDate, Date modificationDate) {
return pipelineHistory(pipelineConfig, scheduleDate, modificationDate, REVISION);
}
public static PipelineInstanceModels pipelineHistory(PipelineConfig pipelineConfig, Date scheduleDate, Date modificationDate, String revision) {
return pipelineHistory(pipelineConfig, scheduleDate, modificationDate, revision, "user", "Comment", "email", "file", "dir", "1");
}
public static PipelineInstanceModels pipelineHistory(PipelineConfig pipelineConfig, Date scheduleDate, Date modificationDate, String revision, String committer, String commitMessage,
String commiterEmail, String commitedFileName, String dirModified, String label) {
PipelineInstanceModels history = PipelineInstanceModels.createPipelineInstanceModels();
Modification modification = new Modification(committer, commitMessage, commiterEmail, modificationDate, revision);
modification.createModifiedFile(commitedFileName, dirModified, ModifiedAction.added);
MaterialRevisions revisions = new MaterialRevisions();
Material material = new MaterialConfigConverter().toMaterial(pipelineConfig.materialConfigs().first());
material.setId(10);
revisions.addRevision(material, modification);
BuildCause buildCause = BuildCause.createManualForced(revisions, Username.ANONYMOUS);
PipelineInstanceModel item = PipelineInstanceModel.createPipeline(CaseInsensitiveString.str(pipelineConfig.name()), -1, label, buildCause, stageHistory(pipelineConfig, scheduleDate));
item.setCounter(1);
item.setId(1);
item.setComment("build comment");
history.add(item);
return history;
}
public static StageInstanceModels stageHistory(PipelineConfig pipelineConfig, Date modificationDate) {
StageInstanceModels history = new StageInstanceModels();
for (StageConfig stageConfig : pipelineConfig) {
StageInstanceModel item = new StageInstanceModel(CaseInsensitiveString.str(stageConfig.name()), "1", buildHistory(stageConfig, modificationDate));
item.setCounter("1");
item.setApprovalType(new InstanceFactory().createStageInstance(stageConfig, new DefaultSchedulingContext("anyone"), md5, new TimeProvider()).getApprovalType());
if (stageConfig.requiresApproval()) {
item.setApprovedBy(APPROVED_BY);
} else {
item.setApprovedBy(GoConstants.DEFAULT_APPROVED_BY);
}
history.add(item);
}
return history;
}
public static JobHistory buildHistory(StageConfig stageConfig, Date modificationDate) {
JobHistory history = new JobHistory();
for (JobConfig jobConfig : stageConfig.allBuildPlans()) {
history.addJob(CaseInsensitiveString.str(jobConfig.name()), JobState.Completed, JobResult.Passed, modificationDate);
}
return history;
}
public static PipelineInstanceModel pipelineHistoryItemWithOneStage(String pipelineName, String stageName, Date modifiedDate) {
StageInstanceModels stageHistory = new StageInstanceModels();
stageHistory.add(new StageInstanceModel(stageName, "1", StageResult.Passed, new StageIdentifier(pipelineName,1,"1", stageName,"1")));
return singlePipeline(pipelineName, stageHistory, modifiedDate);
}
public static PipelineInstanceModel singlePipeline(String pipelineName, StageInstanceModels stages) {
return singlePipeline(pipelineName, stages, new Date());
}
public static PipelineInstanceModel singlePipeline(String pipelineName, StageInstanceModels stages, Date modifiedDate) {
BuildCause manualForced = BuildCause.createManualForced(new MaterialRevisions(new MaterialRevision(MaterialsMother.hgMaterial(), new Modification(modifiedDate, "abc", "MOCK_LABEL-12", null))), Username.ANONYMOUS);
PipelineInstanceModel model = PipelineInstanceModel.createPipeline(pipelineName, -1, "1", manualForced, stages);
model.setCounter(1);
return model;
}
public static PipelineInstanceModel singlePipeline(String pipelineName, StageInstanceModel stage) {
StageInstanceModels stageInstanceModels = new StageInstanceModels();
stageInstanceModels.add(stage);
return singlePipeline(pipelineName, stageInstanceModels, new Date());
}
public static StageInstanceModels stagePerJob(String baseName, List<JobHistory> histories) {
StageInstanceModels stageInstanceModels = new StageInstanceModels();
for (int i = 0; i < histories.size(); i++) {
String stageName = baseName + "-" + i;
StageInstanceModel stage = new StageInstanceModel(stageName, "1", StageResult.Passed, new StageIdentifier("pipeline", 1, "1", stageName, "1"));
stage.setBuildHistory(histories.get(i));
stageInstanceModels.add(stage);
stageInstanceModels.latestStage().setApprovedBy("cruise");
}
return stageInstanceModels;
}
public static StageInstanceModels stagePerJob(String baseName, JobHistory... histories) {
return stagePerJob(baseName, Arrays.asList(histories));
}
public static JobHistory job(JobResult result, Date scheduledDate) {
return job(JobState.Completed, result, scheduledDate);
}
public static JobHistory job(JobResult result) {
return job(result, new Date());
}
public static JobHistory job(JobState state, JobResult result) {
return job(state, result, new Date());
}
public static JobHistory job(JobState state, JobResult result, Date scheduledDate) {
return JobHistory.withJob("firstJob", state, result, scheduledDate);
}
public static PipelineModel pipelineWithLatestRevision(MaterialRevisions latest) {
PipelineModel pipelineModel = pipeline();
pipelineModel.getLatestPipelineInstance().setLatestRevisions(latest);
return pipelineModel;
}
public static PipelineModel pipelineWithLatestRevisionAndMaterialRevision(MaterialRevisions latest,MaterialRevisions revision) {
PipelineModel pipelineModel = pipelineWithLatestRevision(latest);
pipelineModel.getLatestPipelineInstance().setMaterialRevisionsOnBuildCause(revision);
return pipelineModel;
}
public static PipelineModel pipeline() {
PipelineModel pipelineModel = new PipelineModel("pipe1", true, true, PipelinePauseInfo.notPaused());
MaterialRevisions materialRevisions = ModificationsMother.createHgMaterialRevisions();
PipelineInstanceModel instanceModel = PipelineInstanceModel.createPipeline("pipe1", -1, "label1", BuildCause.createWithModifications(materialRevisions, "foo-bar"), new StageInstanceModels());
instanceModel.setMaterialConfigs(new MaterialConfigs(materialRevisions.getMaterialRevision(0).getMaterial().config()));
instanceModel.setLatestRevisions(materialRevisions);
pipelineModel.addPipelineInstance(instanceModel);
return pipelineModel;
}
}