package jetbrains.buildserver.sonarplugin.sqrunner.manager;
import jetbrains.buildServer.serverSide.ConfigActionFactory;
import jetbrains.buildServer.serverSide.SProject;
import jetbrains.buildServer.serverSide.settings.ProjectSettingsManager;
import jetbrains.buildserver.sonarplugin.sqrunner.manager.projectfeatures.SQSManagerProjectFeatures;
import jetbrains.buildserver.sonarplugin.sqrunner.manager.projectsettings.SQSManagerImpl;
import org.assertj.core.api.BDDAssertions;
import org.jetbrains.annotations.NotNull;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.io.IOException;
import static org.mockito.Mockito.*;
/**
* Created by linfar on 03.10.16.
*
* Test for MigratingSQSManager
*/
@Test
public class MigratingSQSManagerTest {
private SProject myRoot;
private SProject myProject;
@NotNull
private final String myProjectId = "projectId";
@NotNull
private final String myRootProjectId = "_Root";
@BeforeMethod(alwaysRun = true)
public void setUp() throws Exception {
final TestUtil.Projects projects = TestUtil.createProjects(myRootProjectId, myProjectId);
myRoot = projects.myRoot;
myProject = projects.myProject;
}
public void test() throws IOException {
ProjectSettingsManager settingsManager = mock(ProjectSettingsManager.class);
String serverId = "serverId";
SQSInfo serverInfo = SQSManagerTest.mockSQSInfo(settingsManager, serverId, myProjectId);
String rootServerId = "rootServerId";
SQSInfo rootServerInfo = SQSManagerTest.mockSQSInfo(settingsManager, rootServerId, myRootProjectId);
SQSManagerImpl SQSManager = new SQSManagerImpl(settingsManager);
final SQSManagerProjectFeatures sqsManagerProjectFeatures = mock(SQSManagerProjectFeatures.class);
final MigratingSQSManager migratingSQSManager = new MigratingSQSManager(SQSManager, sqsManagerProjectFeatures, mock(ConfigActionFactory.class));
BDDAssertions.then(migratingSQSManager.getOwnServer(myRoot, serverId)).isNull();
BDDAssertions.then(migratingSQSManager.getOwnServer(myRoot, rootServerId)).isNotNull().isSameAs(rootServerInfo);
BDDAssertions.then(migratingSQSManager.getOwnServer(myProject, serverId)).isNotNull().isSameAs(serverInfo);
BDDAssertions.then(migratingSQSManager.getOwnServer(myProject, rootServerId)).isNull();
final BaseSQSInfo replacement = new BaseSQSInfo("newServer");
when(sqsManagerProjectFeatures.getOwnServer(myProject, serverId)).thenReturn(replacement);
BDDAssertions.then(migratingSQSManager.getOwnServer(myProject, serverId)).isNotNull().isSameAs(replacement);
}
public void should_not_add_to_old() throws IOException {
final BaseSQSInfo any = new BaseSQSInfo("any");
final SQSManagerImpl sqsManager = mock(SQSManagerImpl.class);
when(sqsManager.removeServer(any(), any())).thenReturn(new SQSManager.SQSActionResult(any, null, ""));
final SQSManagerProjectFeatures sqsManagerProjectFeatures = mock(SQSManagerProjectFeatures.class);
when(sqsManagerProjectFeatures.addServer(myProject, any)).thenReturn(new SQSManager.SQSActionResult(null, any, ""));
final MigratingSQSManager migratingSQSManager = new MigratingSQSManager(sqsManager, sqsManagerProjectFeatures, mock(ConfigActionFactory.class));
migratingSQSManager.addServer(myProject, any);
verify(sqsManagerProjectFeatures, times(1)).addServer(myProject, any);
verify(sqsManager, never()).addServer(any(), any());
}
public void should_remove_from_old_on_edit() throws IOException {
final BaseSQSInfo any = new BaseSQSInfo("any");
final SQSManagerProjectFeatures sqsManagerProjectFeatures = mock(SQSManagerProjectFeatures.class);
when(sqsManagerProjectFeatures.getServer(myProject, "any")).thenReturn(null);
when(sqsManagerProjectFeatures.editServer(myProject, any)).thenReturn(new SQSManager.SQSActionResult(any, any, ""));
final SQSManagerImpl sqsManager = mock(SQSManagerImpl.class);
when(sqsManager.removeServer(any(), any())).thenReturn(new SQSManager.SQSActionResult(any, null, ""));
when(sqsManager.getServer(myProject, "any")).thenReturn(any);
final MigratingSQSManager migratingSQSManager = new MigratingSQSManager(sqsManager, sqsManagerProjectFeatures, mock(ConfigActionFactory.class));
migratingSQSManager.editServer(myProject, any);
verify(sqsManagerProjectFeatures, times(1)).addServer(myProject, any);
verify(sqsManager, times(1)).removeServer(myProject, "any");
}
public void should_add_to_new_when_edit() throws IOException {
final BaseSQSInfo any = new BaseSQSInfo("any");
final SQSManagerImpl sqsManager = mock(SQSManagerImpl.class);
when(sqsManager.removeServer(any(), any())).thenReturn(new SQSManager.SQSActionResult(any, null, ""));
when(sqsManager.getServer(myProject, "any")).thenReturn(any);
final SQSManagerProjectFeatures sqsManagerProjectFeatures = mock(SQSManagerProjectFeatures.class);
when(sqsManagerProjectFeatures.getServer(myProject, "any")).thenReturn(null);
final MigratingSQSManager migratingSQSManager = new MigratingSQSManager(sqsManager, sqsManagerProjectFeatures, mock(ConfigActionFactory.class));
migratingSQSManager.editServer(myProject, any);
verify(sqsManagerProjectFeatures, times(1)).addServer(myProject, any);
verify(sqsManager, times(1)).removeServer(myProject, "any");
}
public void should_remove_from_both() throws IOException {
final SQSManagerImpl sqsManager = mock(SQSManagerImpl.class);
final SQSManagerProjectFeatures sqsManagerProjectFeatures = mock(SQSManagerProjectFeatures.class);
final MigratingSQSManager migratingSQSManager = new MigratingSQSManager(sqsManager, sqsManagerProjectFeatures, mock(ConfigActionFactory.class));
final BaseSQSInfo any = new BaseSQSInfo("any");
when(sqsManagerProjectFeatures.removeServer(any(), any())).thenReturn(new SQSManager.SQSActionResult(any, null, ""));
when(sqsManager.removeServer(any(), any())).thenReturn(new SQSManager.SQSActionResult(any, null, ""));
migratingSQSManager.removeServer(myProject, "any");
verify(sqsManagerProjectFeatures, times(1)).removeServer(myProject, "any");
verify(sqsManager, times(1)).removeServer(myProject, "any");
reset(sqsManagerProjectFeatures, sqsManager);
when(sqsManagerProjectFeatures.removeServer(any(), any())).thenReturn(new SQSManager.SQSActionResult(null, null, "", true));
when(sqsManager.removeServer(any(), any())).thenReturn(new SQSManager.SQSActionResult(null, null, "", true));
migratingSQSManager.removeServer(myProject, "any");
verify(sqsManagerProjectFeatures, times(1)).removeServer(myProject, "any");
verify(sqsManager, times(1)).removeServer(myProject, "any");
}
public void should_get_from_both() throws IOException {
final SQSManagerImpl sqsManager = mock(SQSManagerImpl.class);
final SQSManagerProjectFeatures sqsManagerProjectFeatures = mock(SQSManagerProjectFeatures.class);
final MigratingSQSManager migratingSQSManager = new MigratingSQSManager(sqsManager, sqsManagerProjectFeatures, mock(ConfigActionFactory.class));
migratingSQSManager.getAvailableServers(myProject);
verify(sqsManagerProjectFeatures, times(1)).getAvailableServers(myProject);
verify(sqsManager, times(1)).getAvailableServers(myProject);
migratingSQSManager.getOwnAvailableServers(myProject);
verify(sqsManagerProjectFeatures, times(1)).getOwnAvailableServers(myProject);
verify(sqsManager, times(1)).getOwnAvailableServers(myProject);
migratingSQSManager.getServer(myProject, "any");
verify(sqsManagerProjectFeatures, times(1)).getServer(myProject, "any");
verify(sqsManager, times(1)).getServer(myProject, "any");
migratingSQSManager.getOwnServer(myProject, "any");
verify(sqsManagerProjectFeatures, times(1)).getOwnServer(myProject, "any");
verify(sqsManager, times(1)).getOwnServer(myProject, "any");
}
public void should_get_from_new_when_available() {
final SQSManagerImpl sqsManager = mock(SQSManagerImpl.class);
final SQSManagerProjectFeatures sqsManagerProjectFeatures = mock(SQSManagerProjectFeatures.class);
final MigratingSQSManager migratingSQSManager = new MigratingSQSManager(sqsManager, sqsManagerProjectFeatures, mock(ConfigActionFactory.class));
final BaseSQSInfo any = new BaseSQSInfo("any");
when(sqsManagerProjectFeatures.getServer(myProject, "any")).thenReturn(any);
when(sqsManagerProjectFeatures.getOwnServer(myProject, "any")).thenReturn(any);
migratingSQSManager.getServer(myProject, "any");
verify(sqsManagerProjectFeatures, times(1)).getServer(myProject, "any");
verify(sqsManager, never()).getServer(any(), any());
migratingSQSManager.getOwnServer(myProject, "any");
verify(sqsManagerProjectFeatures, times(1)).getOwnServer(myProject, "any");
verify(sqsManager, never()).getOwnServer(any(), any());
}
}