public async Task DownloadQualityProfile_WhenBindingConfigIsNull_Fails() { // Arrange const string QualityProfileName = "SQQualityProfileName"; const string ProjectName = "SQProjectName"; Mock <INuGetBindingOperation> nuGetOpMock = new Mock <INuGetBindingOperation>(); var notifications = new ConfigurableProgressStepExecutionEvents(); var progressAdapter = new FixedStepsProgressAdapter(notifications); var language = Language.VBNET; SonarQubeQualityProfile profile = this.ConfigureQualityProfile(language, QualityProfileName); var configProviderMock = new Mock <IBindingConfigProvider>(); var testSubject = this.CreateTestSubject("key", ProjectName, nuGetOpMock.Object, configProviderMock.Object); ConfigureSupportedBindingProject(testSubject.InternalState, language); // Act var result = await testSubject.DownloadQualityProfileAsync(progressAdapter, CancellationToken.None); // Assert result.Should().BeFalse(); testSubject.InternalState.QualityProfiles[language].Should().Be(profile); notifications.AssertProgress(0.0); notifications.AssertProgressMessages(Strings.DownloadingQualityProfileProgressMessage); this.outputWindowPane.AssertOutputStrings(1); var expectedOutput = string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.FailedToCreateBindingConfigForLanguage, language.Name)); this.outputWindowPane.AssertOutputStrings(expectedOutput); }
public void BindingWorkflow_InstallPackages_MoreNugetPackagesThanLanguageCount() { // Arrange var testSubject = this.CreateTestSubject(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); ProjectMock project1 = new ProjectMock("project1") { ProjectKind = ProjectSystemHelper.CSharpProjectKind }; var nugetPackage1 = new PackageName("mypackage1", new SemanticVersion("1.1.0")); var nugetPackage2 = new PackageName("mypackage2", new SemanticVersion("1.1.1")); var nugetPackages = new[] { nugetPackage1, nugetPackage2 }; var packages = new Dictionary <Language, IEnumerable <PackageName> >(); packages.Add(Language.CSharp, nugetPackages); ConfigurablePackageInstaller packageInstaller = this.PrepareInstallPackagesTest(testSubject, packages, project1); // Act testSubject.InstallPackages(new ConfigurableProgressController(), CancellationToken.None, progressEvents); // Assert packageInstaller.AssertInstalledPackages(project1, nugetPackages); this.outputWindowPane.AssertOutputStrings(4); this.outputWindowPane.AssertOutputStrings( string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackages[0].Id, ((Project)project1).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.SuccessfullyInstalledNugetPackageForProject, nugetPackages[0].Id, ((Project)project1).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackages[1].Id, ((Project)project1).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.SuccessfullyInstalledNugetPackageForProject, nugetPackages[1].Id, ((Project)project1).Name)) ); progressEvents.AssertProgress(.5, 1.0); }
public void InstallPackages_FailureOnOneProject_Continues() { // Arrange const string failureMessage = "Failure for project1"; const string project1Name = "project1"; const string project2Name = "project2"; var testSubject = this.CreateTestSubject(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); var progressAdapter = new FixedStepsProgressAdapter(progressEvents); var cts = new CancellationTokenSource(); ProjectMock project1 = new ProjectMock(project1Name) { ProjectKind = ProjectSystemHelper.CSharpProjectKind }; ProjectMock project2 = new ProjectMock(project2Name) { ProjectKind = ProjectSystemHelper.CSharpProjectKind }; var projectsToBind = new HashSet <Project> { project1, project2 }; var nugetPackage = new PackageName("mypackage", new SemanticVersion("1.1.0")); var packages = new[] { nugetPackage }; var nugetPackages = new Dictionary <Language, IEnumerable <PackageName> >(); nugetPackages.Add(Language.CSharp, packages); ConfigurablePackageInstaller packageInstaller = this.PrepareInstallPackagesTest(testSubject, nugetPackages); packageInstaller.InstallPackageAction = (p) => { packageInstaller.InstallPackageAction = null; throw new Exception(failureMessage); }; // Act testSubject.InstallPackages(projectsToBind, progressAdapter, cts.Token); // Assert packageInstaller.AssertNoInstalledPackages(project1); packageInstaller.AssertInstalledPackages(project2, packages); this.logger.AssertOutputStrings(4); this.logger.AssertOutputStrings( string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, project1Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.FailedDuringNuGetPackageInstall, nugetPackage.Id, project1Name, failureMessage)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, project2Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.SuccessfullyInstalledNugetPackageForProject, nugetPackage.Id, project2Name)) ); progressEvents.AssertProgress(.5, 1.0); }
public async Task BindingWorkflow_DownloadQualityProfile_Success() { // Arrange const string QualityProfileName = "SQQualityProfileName"; const string ProjectName = "SQProjectName"; // Record all of the calls to NuGetBindingOperation.ProcessExport var actualProfiles = new List <Tuple <Language, RoslynExportProfileResponse> >(); Mock <INuGetBindingOperation> nuGetOpMock = new Mock <INuGetBindingOperation>(); nuGetOpMock.Setup(x => x.ProcessExport(It.IsAny <Language>(), It.IsAny <RoslynExportProfileResponse>())) .Callback <Language, RoslynExportProfileResponse>((l, r) => actualProfiles.Add(new Tuple <Language, RoslynExportProfileResponse>(l, r))) .Returns(true); BindingWorkflow testSubject = this.CreateTestSubject("key", ProjectName, nuGetOpMock.Object); ConfigurableProgressController controller = new ConfigurableProgressController(); var notifications = new ConfigurableProgressStepExecutionEvents(); RuleSet ruleSet = TestRuleSetHelper.CreateTestRuleSetWithRuleIds(new[] { "Key1", "Key2" }); var expectedRuleSet = new RuleSet(ruleSet) { NonLocalizedDisplayName = string.Format(Strings.SonarQubeRuleSetNameFormat, ProjectName, QualityProfileName), NonLocalizedDescription = "\r\nhttp://connected/profiles/show?key=" }; var nugetPackages = new[] { new PackageName("myPackageId", new SemanticVersion("1.0.0")) }; var additionalFiles = new[] { new AdditionalFileResponse { FileName = "abc.xml", Content = new byte[] { 1, 2, 3 } } }; RoslynExportProfileResponse export = RoslynExportProfileHelper.CreateExport(ruleSet, nugetPackages, additionalFiles); var language = Language.VBNET; SonarQubeQualityProfile profile = this.ConfigureProfileExport(export, language, QualityProfileName); // Act await testSubject.DownloadQualityProfileAsync(controller, notifications, new[] { language }, CancellationToken.None); // Assert RuleSetAssert.AreEqual(expectedRuleSet, testSubject.Rulesets[language], "Unexpected rule set"); testSubject.QualityProfiles[language].Should().Be(profile); VerifyNuGetPackgesDownloaded(nugetPackages, language, actualProfiles); controller.NumberOfAbortRequests.Should().Be(0); notifications.AssertProgress(0.0, 1.0); notifications.AssertProgressMessages(Strings.DownloadingQualityProfileProgressMessage, string.Empty); this.outputWindowPane.AssertOutputStrings(1); var expectedOutput = string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.QualityProfileDownloadSuccessfulMessageFormat, QualityProfileName, string.Empty, language.Name)); this.outputWindowPane.AssertOutputStrings(expectedOutput); }
public async Task DownloadQualityProfile_Success() { var configPersister = new ConfigurableConfigurationProvider(); this.serviceProvider.RegisterService(typeof(IConfigurationPersister), configPersister); // Arrange const string QualityProfileName = "SQQualityProfileName"; const string ProjectName = "SQProjectName"; Mock <INuGetBindingOperation> nuGetOpMock = new Mock <INuGetBindingOperation>(); var notifications = new ConfigurableProgressStepExecutionEvents(); var progressAdapter = new FixedStepsProgressAdapter(notifications); var bindingConfig = new Mock <IBindingConfig>().Object; var language = Language.VBNET; SonarQubeQualityProfile profile = this.ConfigureQualityProfile(language, QualityProfileName); var configProviderMock = new Mock <IBindingConfigProvider>(); configProviderMock.Setup(x => x.GetConfigurationAsync(profile, language, BindingConfiguration.Standalone, CancellationToken.None)) .ReturnsAsync(bindingConfig); var bindingArgs = new BindCommandArgs("key", ProjectName, new ConnectionInformation(new Uri("http://connected"))); var testSubject = this.CreateTestSubject(bindingArgs, nuGetOpMock.Object, configProviderMock.Object); ConfigureSupportedBindingProject(testSubject.InternalState, language); // Act var result = await testSubject.DownloadQualityProfileAsync(progressAdapter, CancellationToken.None); // Assert result.Should().BeTrue(); testSubject.InternalState.BindingConfigs.Should().ContainKey(language); testSubject.InternalState.BindingConfigs[language].Should().Be(bindingConfig); testSubject.InternalState.BindingConfigs.Count().Should().Be(1); testSubject.InternalState.QualityProfiles[language].Should().Be(profile); notifications.AssertProgress(0.0, 1.0); notifications.AssertProgressMessages(Strings.DownloadingQualityProfileProgressMessage, string.Empty); this.outputWindowPane.AssertOutputStrings(1); var expectedOutput = string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.QualityProfileDownloadSuccessfulMessageFormat, QualityProfileName, string.Empty, language.Name)); this.outputWindowPane.AssertOutputStrings(expectedOutput); }
public void BindingWorkflow_DownloadQualityProfile_Success() { // Setup const string QualityProfileName = "SQQualityProfileName"; const string SonarQubeProjectName = "SQProjectName"; var projectInfo = new ProjectInformation { Key = "key", Name = SonarQubeProjectName }; BindingWorkflow testSubject = this.CreateTestSubject(projectInfo); ConfigurableProgressController controller = new ConfigurableProgressController(); var notifications = new ConfigurableProgressStepExecutionEvents(); RuleSet ruleSet = TestRuleSetHelper.CreateTestRuleSetWithRuleIds(new[] { "Key1", "Key2" }); var expectedRuleSet = new RuleSet(ruleSet) { NonLocalizedDisplayName = string.Format(Strings.SonarQubeRuleSetNameFormat, SonarQubeProjectName, QualityProfileName), NonLocalizedDescription = "\r\nhttp://connected/profiles/show?key=" }; var nugetPackages = new[] { new PackageName("myPackageId", new SemanticVersion("1.0.0")) }; var additionalFiles = new[] { new AdditionalFile { FileName = "abc.xml", Content = new byte[] { 1, 2, 3 } } }; RoslynExportProfile export = RoslynExportProfileHelper.CreateExport(ruleSet, nugetPackages, additionalFiles); var language = Language.VBNET; QualityProfile profile = this.ConfigureProfileExport(export, language); profile.Name = QualityProfileName; // Act testSubject.DownloadQualityProfile(controller, CancellationToken.None, notifications, new[] { language }); // Verify RuleSetAssert.AreEqual(expectedRuleSet, testSubject.Rulesets[language], "Unexpected rule set"); Assert.AreSame(profile, testSubject.QualityProfiles[language]); VerifyNuGetPackgesDownloaded(nugetPackages, testSubject, language); controller.AssertNumberOfAbortRequests(0); notifications.AssertProgress( 0.0, 1.0); notifications.AssertProgressMessages(Strings.DownloadingQualityProfileProgressMessage, string.Empty); this.outputWindowPane.AssertOutputStrings(1); var expectedOutput = string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.QualityProfileDownloadSuccessfulMessageFormat, QualityProfileName, string.Empty, language.Name)); this.outputWindowPane.AssertOutputStrings(expectedOutput); }
public async Task DownloadQualityProfile_Success() { // Arrange const string QualityProfileName = "SQQualityProfileName"; const string ProjectName = "SQProjectName"; Mock <INuGetBindingOperation> nuGetOpMock = new Mock <INuGetBindingOperation>(); var notifications = new ConfigurableProgressStepExecutionEvents(); var progressAdapter = new FixedStepsProgressAdapter(notifications); RuleSet expectedRuleSet = TestRuleSetHelper.CreateTestRuleSetWithRuleIds(new[] { "Key1", "Key2" }); var configFile = new Mock <IBindingConfigFile>().Object; var language = Language.VBNET; SonarQubeQualityProfile profile = this.ConfigureQualityProfile(language, QualityProfileName); var configProviderMock = new Mock <IBindingConfigProvider>(); configProviderMock.Setup(x => x.GetConfigurationAsync(profile, null, language, CancellationToken.None)) .ReturnsAsync(configFile); var testSubject = this.CreateTestSubject("key", ProjectName, nuGetOpMock.Object, configProviderMock.Object); ConfigureSupportedBindingProject(testSubject.InternalState, language); // Act var result = await testSubject.DownloadQualityProfileAsync(progressAdapter, CancellationToken.None); // Assert result.Should().BeTrue(); testSubject.InternalState.BindingConfigFiles.Should().ContainKey(language); testSubject.InternalState.BindingConfigFiles[language].Should().Be(configFile); testSubject.InternalState.BindingConfigFiles.Count().Should().Be(1); testSubject.InternalState.QualityProfiles[language].Should().Be(profile); notifications.AssertProgress(0.0, 1.0); notifications.AssertProgressMessages(Strings.DownloadingQualityProfileProgressMessage, string.Empty); this.outputWindowPane.AssertOutputStrings(1); var expectedOutput = string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.QualityProfileDownloadSuccessfulMessageFormat, QualityProfileName, string.Empty, language.Name)); this.outputWindowPane.AssertOutputStrings(expectedOutput); }
public void InstallPackages_Cancellation() { // Arrange var testSubject = this.CreateTestSubject(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); var progressAdapter = new FixedStepsProgressAdapter(progressEvents); var cts = new CancellationTokenSource(); var project1 = new ProjectMock("project1") { ProjectKind = ProjectSystemHelper.CSharpProjectKind }; var project2 = new ProjectMock("project2") { ProjectKind = ProjectSystemHelper.CSharpProjectKind }; var projectsToBind = new HashSet <Project> { project1, project2 }; var nugetPackage = new PackageName("mypackage", new SemanticVersion("1.1.0")); var packages = new[] { nugetPackage }; var nugetPackagesByLanguage = new Dictionary <Language, IEnumerable <PackageName> >(); nugetPackagesByLanguage.Add(Language.CSharp, packages); ConfigurablePackageInstaller packageInstaller = this.PrepareInstallPackagesTest(testSubject, nugetPackagesByLanguage); packageInstaller.InstallPackageAction = (p) => { cts.Cancel(); // Cancel the next one (should complete the first one) }; // Acts testSubject.InstallPackages(projectsToBind, progressAdapter, cts.Token); // Assert packageInstaller.AssertInstalledPackages(project1, packages); packageInstaller.AssertNoInstalledPackages(project2); progressEvents.AssertProgress(.5); }
private void InstallPackages_Succeed(string projectKind, Language language) { // Arrange var testSubject = this.CreateTestSubject(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); var progressAdapter = new FixedStepsProgressAdapter(progressEvents); ProjectMock project1 = new ProjectMock("project1") { ProjectKind = projectKind }; ProjectMock project2 = new ProjectMock("project2") { ProjectKind = projectKind }; var projectsToBind = new HashSet <Project> { project1, project2 }; var nugetPackage = new PackageName("mypackage", new SemanticVersion("1.1.0")); var packages = new Dictionary <Language, IEnumerable <PackageName> >(); packages.Add(language, new[] { nugetPackage }); ConfigurablePackageInstaller packageInstaller = this.PrepareInstallPackagesTest(testSubject, packages); // Act testSubject.InstallPackages(projectsToBind, progressAdapter, CancellationToken.None); // Assert packageInstaller.AssertInstalledPackages(project1, new[] { nugetPackage }); packageInstaller.AssertInstalledPackages(project2, new[] { nugetPackage }); this.logger.AssertOutputStrings(4); this.logger.AssertOutputStrings( string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, ((Project)project1).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.SuccessfullyInstalledNugetPackageForProject, nugetPackage.Id, ((Project)project1).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, ((Project)project2).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.SuccessfullyInstalledNugetPackageForProject, nugetPackage.Id, ((Project)project2).Name)) ); progressEvents.AssertProgress(.5, 1.0); }
private void BindingWorkflow_InstallPackages_Succeed(string projectKind, Language language) { // Setup var testSubject = this.CreateTestSubject(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); ProjectMock project1 = new ProjectMock("project1") { ProjectKind = projectKind }; ProjectMock project2 = new ProjectMock("project2") { ProjectKind = projectKind }; var nugetPackage = new PackageName("mypackage", new SemanticVersion("1.1.0")); var packages = new Dictionary <Language, IEnumerable <PackageName> >(); packages.Add(language, new[] { nugetPackage }); ConfigurablePackageInstaller packageInstaller = this.PrepareInstallPackagesTest(testSubject, packages, project1, project2); // Act testSubject.InstallPackages(new ConfigurableProgressController(), CancellationToken.None, progressEvents); // Verify packageInstaller.AssertInstalledPackages(project1, new[] { nugetPackage }); packageInstaller.AssertInstalledPackages(project2, new[] { nugetPackage }); this.outputWindowPane.AssertOutputStrings(4); this.outputWindowPane.AssertOutputStrings( string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, ((Project)project1).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.SuccessfullyInstalledNugetPackageForProject, nugetPackage.Id, ((Project)project1).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, ((Project)project2).Name)), string.Format(Strings.SubTextPaddingFormat, string.Format(Strings.SuccessfullyInstalledNugetPackageForProject, nugetPackage.Id, ((Project)project2).Name)) ); progressEvents.AssertProgress( .5, 1.0); }
public void BindingWorkflow_DownloadQualityProfile_Success() { // Setup BindingWorkflow testSubject = this.CreateTestSubject(); ConfigurableProgressController controller = new ConfigurableProgressController(); var notifications = new ConfigurableProgressStepExecutionEvents(); RuleSet ruleSet = TestRuleSetHelper.CreateTestRuleSetWithRuleIds(new[] { "Key1", "Key2" }); var nugetPackages = new[] { new PackageName("myPackageId", new SemanticVersion("1.0.0")) }; var additionalFiles = new[] { new AdditionalFile { FileName = "abc.xml", Content = new byte[] { 1, 2, 3 } } }; RoslynExportProfile export = RoslynExportProfileHelper.CreateExport(ruleSet, nugetPackages, additionalFiles); var language = Language.VBNET; QualityProfile profile = this.ConfigureProfileExport(export, language); // Act testSubject.DownloadQualityProfile(controller, CancellationToken.None, notifications, new[] { language }); // Verify RuleSetAssert.AreEqual(ruleSet, testSubject.Rulesets[language], "Unexpected rule set"); Assert.AreSame(profile, testSubject.QualityProfiles[language]); VerifyNuGetPackgesDownloaded(nugetPackages, testSubject); this.outputWindowPane.AssertOutputStrings(0); controller.AssertNumberOfAbortRequests(0); notifications.AssertProgress( 0.0, 1.0, 1.0); notifications.AssertProgressMessages( string.Format(CultureInfo.CurrentCulture, Strings.DownloadingQualityProfileProgressMessage, language.Name), string.Empty, Strings.QualityProfileDownloadedSuccessfulMessage); }
public void BindingWorkflow_InstallPackages() { // Setup var testSubject = this.CreateTestSubject(); var progressEvents = new ConfigurableProgressStepExecutionEvents(); ProjectMock project1 = new ProjectMock("project1"); ProjectMock project2 = new ProjectMock("project2"); var nugetPackage = new PackageName("mypackage", new SemanticVersion("1.1.0")); var packages = new[] { nugetPackage }; ConfigurablePackageInstaller packageInstaller = this.PrepareInstallPackagesTest(testSubject, packages, project1, project2); // Act testSubject.InstallPackages(new ConfigurableProgressController(), CancellationToken.None, progressEvents); // Verify packageInstaller.AssertInstalledPackages(project1, packages); packageInstaller.AssertInstalledPackages(project2, packages); progressEvents.AssertProgressMessages( string.Format(CultureInfo.CurrentCulture, Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, ((Project)project1).Name), string.Empty, string.Format(CultureInfo.CurrentCulture, Strings.EnsuringNugetPackagesProgressMessage, nugetPackage.Id, ((Project)project2).Name), string.Empty); progressEvents.AssertProgress( 0, .5, .5, 1.0); }