public void ConnectionWorkflow_ConnectionStep_UnsuccessfulConnection() { // Setup var connectionInfo = new ConnectionInformation(new Uri("http://server")); bool projectChangedCallbackCalled = false; this.host.TestStateManager.SetProjectsAction = (c, p) => { projectChangedCallbackCalled = true; Assert.AreSame(connectionInfo, c, "Unexpected connection"); Assert.IsNull(p, "Not expecting any projects"); }; this.projectSystemHelper.Projects = new[] { new ProjectMock("foo.csproj") { ProjectKind = ProjectSystemHelper.CSharpProjectKind } }; var controller = new ConfigurableProgressController(); this.sonarQubeService.AllowConnections = false; var executionEvents = new ConfigurableProgressStepExecutionEvents(); string connectionMessage = connectionInfo.ServerUri.ToString(); var testSubject = new ConnectionWorkflow(this.host, new RelayCommand(AssertIfCalled)); // Act testSubject.ConnectionStep(controller, CancellationToken.None, connectionInfo, executionEvents); // Verify executionEvents.AssertProgressMessages( connectionMessage, Strings.DetectingServerPlugins, Strings.ConnectionResultFailure); Assert.IsFalse(projectChangedCallbackCalled, "Callback should not have been called"); this.sonarQubeService.AssertConnectRequests(1); Assert.IsFalse(this.host.VisualStateManager.IsConnected); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); // Act (reconnect with same bad connection) executionEvents.Reset(); projectChangedCallbackCalled = false; testSubject.ConnectionStep(controller, CancellationToken.None, connectionInfo, executionEvents); // Verify executionEvents.AssertProgressMessages( connectionMessage, Strings.DetectingServerPlugins, Strings.ConnectionResultFailure); Assert.IsFalse(projectChangedCallbackCalled, "Callback should not have been called"); this.sonarQubeService.AssertConnectRequests(2); Assert.IsFalse(this.host.VisualStateManager.IsConnected); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); // Canceled connections CancellationTokenSource tokenSource = new CancellationTokenSource(); executionEvents.Reset(); projectChangedCallbackCalled = false; CancellationToken token = tokenSource.Token; tokenSource.Cancel(); // Act testSubject.ConnectionStep(controller, token, connectionInfo, executionEvents); // Verify executionEvents.AssertProgressMessages( connectionMessage, Strings.DetectingServerPlugins, Strings.ConnectionResultCancellation); Assert.IsFalse(projectChangedCallbackCalled, "Callback should not have been called"); this.sonarQubeService.AssertConnectRequests(3); Assert.IsFalse(this.host.VisualStateManager.IsConnected); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); }
public async Task ConnectionWorkflow_ConnectionStep_UnsuccessfulConnection() { // Arrange this.sonarQubeServiceMock.Setup(x => x.GetAllProjectsAsync(It.IsAny <string>(), It.IsAny <CancellationToken>())) .Returns(() => { throw new Exception(); }); var connectionInfo = new ConnectionInformation(new Uri("http://server")); bool projectChangedCallbackCalled = false; this.host.TestStateManager.SetProjectsAction = (c, p) => { projectChangedCallbackCalled = true; c.Should().Be(connectionInfo, "Unexpected connection"); p.Should().BeNull("Not expecting any projects"); }; this.projectSystemHelper.Projects = new[] { new ProjectMock("foo.csproj") { ProjectKind = ProjectSystemHelper.CSharpProjectKind } }; var controller = new ConfigurableProgressController(); var executionEvents = new ConfigurableProgressStepExecutionEvents(); string connectionMessage = connectionInfo.ServerUri.ToString(); var testSubject = new ConnectionWorkflow(this.host, new RelayCommand(AssertIfCalled)); // Act await testSubject.ConnectionStepAsync(connectionInfo, controller, executionEvents, CancellationToken.None); // Assert executionEvents.AssertProgressMessages( connectionMessage, Strings.ConnectionStepValidatinCredentials, Strings.DetectingSonarQubePlugins, Strings.ConnectionStepRetrievingProjects, Strings.ConnectionResultFailure); projectChangedCallbackCalled.Should().BeFalse("Callback should not have been called"); this.sonarQubeServiceMock.Verify(x => x.ConnectAsync(It.IsAny <ConnectionInformation>(), It.IsAny <CancellationToken>()), Times.Once()); this.host.VisualStateManager.IsConnected.Should().BeFalse(); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); // Act (reconnect with same bad connection) executionEvents.Reset(); projectChangedCallbackCalled = false; await testSubject.ConnectionStepAsync(connectionInfo, controller, executionEvents, CancellationToken.None); // Assert executionEvents.AssertProgressMessages( connectionMessage, Strings.ConnectionStepValidatinCredentials, Strings.DetectingSonarQubePlugins, Strings.ConnectionStepRetrievingProjects, Strings.ConnectionResultFailure); projectChangedCallbackCalled.Should().BeFalse("Callback should not have been called"); this.sonarQubeServiceMock.Verify(x => x.ConnectAsync(It.IsAny <ConnectionInformation>(), It.IsAny <CancellationToken>()), Times.Exactly(2)); this.host.VisualStateManager.IsConnected.Should().BeFalse(); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); // Canceled connections CancellationTokenSource tokenSource = new CancellationTokenSource(); executionEvents.Reset(); projectChangedCallbackCalled = false; CancellationToken token = tokenSource.Token; tokenSource.Cancel(); // Act await testSubject.ConnectionStepAsync(connectionInfo, controller, executionEvents, token); // Assert executionEvents.AssertProgressMessages( connectionMessage, Strings.ConnectionStepValidatinCredentials, Strings.DetectingSonarQubePlugins, Strings.ConnectionStepRetrievingProjects, Strings.ConnectionResultCancellation); projectChangedCallbackCalled.Should().BeFalse("Callback should not have been called"); this.sonarQubeServiceMock.Verify(x => x.ConnectAsync(It.IsAny <ConnectionInformation>(), It.IsAny <CancellationToken>()), Times.Exactly(3)); this.host.VisualStateManager.IsConnected.Should().BeFalse(); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); AssertCredentialsNotStored(); // Username and password are null }
public void ConnectionWorkflow_ConnectionStep_UnsuccessfulConnection() { // Setup var connectionInfo = new ConnectionInformation(new Uri("http://server")); bool projectChangedCallbackCalled = false; this.host.TestStateManager.SetProjectsAction = (c, p) => { projectChangedCallbackCalled = true; Assert.AreSame(connectionInfo, c, "Unexpected connection"); Assert.IsNull(p, "Not expecting any projects"); }; var controller = new ConfigurableProgressController(); this.sonarQubeService.AllowConnections = false; var executionEvents = new ConfigurableProgressStepExecutionEvents(); string connectionMessage = connectionInfo.ServerUri.ToString(); var testSubject = new ConnectionWorkflow(this.host, new RelayCommand(AssertIfCalled)); // Act testSubject.ConnectionStep(controller, CancellationToken.None, connectionInfo, executionEvents); // Verify executionEvents.AssertProgressMessages(connectionMessage, Strings.ConnectionResultFailure); Assert.IsFalse(projectChangedCallbackCalled, "Callback should not have been called"); this.sonarQubeService.AssertConnectRequests(1); Assert.IsFalse(this.host.VisualStateManager.IsConnected); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); // Act (reconnect with same bad connection) executionEvents.Reset(); projectChangedCallbackCalled = false; testSubject.ConnectionStep(controller, CancellationToken.None, connectionInfo, executionEvents); // Verify executionEvents.AssertProgressMessages(connectionMessage, Strings.ConnectionResultFailure); Assert.IsFalse(projectChangedCallbackCalled, "Callback should not have been called"); this.sonarQubeService.AssertConnectRequests(2); Assert.IsFalse(this.host.VisualStateManager.IsConnected); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); // Cancelled connections CancellationTokenSource tokenSource = new CancellationTokenSource(); executionEvents.Reset(); projectChangedCallbackCalled = false; CancellationToken token = tokenSource.Token; tokenSource.Cancel(); // Act testSubject.ConnectionStep(controller, token, connectionInfo, executionEvents); // Verify executionEvents.AssertProgressMessages(connectionMessage, Strings.ConnectionResultCancellation); Assert.IsFalse(projectChangedCallbackCalled, "Callback should not have been called"); this.sonarQubeService.AssertConnectRequests(3); Assert.IsFalse(this.host.VisualStateManager.IsConnected); ((ConfigurableUserNotification)this.host.ActiveSection.UserNotifications).AssertNotification(NotificationIds.FailedToConnectId, Strings.ConnectionFailed); }