package com.thoughtworks.go.config.update; import com.thoughtworks.go.config.BasicCruiseConfig; import com.thoughtworks.go.config.BasicPipelineConfigs; import com.thoughtworks.go.config.CruiseConfig; import com.thoughtworks.go.config.PipelineConfig; import com.thoughtworks.go.helper.PipelineConfigMother; import com.thoughtworks.go.server.domain.Username; import com.thoughtworks.go.server.service.EntityHashingService; import com.thoughtworks.go.server.service.GoConfigService; import com.thoughtworks.go.server.service.result.LocalizedOperationResult; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.mockito.Mockito.*; public class UpdatePipelineConfigCommandTest { private EntityHashingService entityHashingService; private GoConfigService goConfigService; private Username username; private LocalizedOperationResult localizedOperationResult; private PipelineConfig pipelineConfig; @Before public void setUp() throws Exception { entityHashingService = mock(EntityHashingService.class); goConfigService = mock(GoConfigService.class); username = mock(Username.class); localizedOperationResult = mock(LocalizedOperationResult.class); pipelineConfig = PipelineConfigMother.pipelineConfig("p1"); } @Test public void shouldDisallowStaleRequest() { UpdatePipelineConfigCommand command = new UpdatePipelineConfigCommand(goConfigService, entityHashingService, pipelineConfig, username, "stale_md5", localizedOperationResult); when(goConfigService.findGroupNameByPipeline(pipelineConfig.name())).thenReturn("group1"); when(goConfigService.canEditPipeline(pipelineConfig.name().toString(), username, localizedOperationResult, "group1")).thenReturn(true); when(entityHashingService.md5ForEntity(pipelineConfig)).thenReturn("latest_md5"); BasicCruiseConfig basicCruiseConfig = new BasicCruiseConfig(new BasicPipelineConfigs(pipelineConfig)); assertFalse(command.canContinue(basicCruiseConfig)); } @Test public void shouldDisallowUpdateIfPipelineEditIsDisAllowed() throws Exception { UpdatePipelineConfigCommand command = new UpdatePipelineConfigCommand(goConfigService, null, pipelineConfig, username, "stale_md5", localizedOperationResult); when(goConfigService.findGroupNameByPipeline(pipelineConfig.name())).thenReturn("group1"); when(goConfigService.canEditPipeline(pipelineConfig.name().toString(),username,localizedOperationResult,"group1")).thenReturn(false); assertFalse(command.canContinue(mock(CruiseConfig.class))); } @Test public void shouldInvokeUpdateMethodOfCruiseConfig() throws Exception { UpdatePipelineConfigCommand command = new UpdatePipelineConfigCommand(goConfigService, null, pipelineConfig, username, "stale_md5", localizedOperationResult); CruiseConfig cruiseConfig = mock(CruiseConfig.class); when(goConfigService.findGroupNameByPipeline(pipelineConfig.name())).thenReturn("group1"); command.update(cruiseConfig); verify(cruiseConfig).update("group1", pipelineConfig.name().toString(),pipelineConfig); } }