diff --git a/src/Core.UnitTests/Binding/ServerConnectionTests.cs b/src/Core.UnitTests/Binding/ServerConnectionTests.cs index 8612fb33ff..f5ba24837a 100644 --- a/src/Core.UnitTests/Binding/ServerConnectionTests.cs +++ b/src/Core.UnitTests/Binding/ServerConnectionTests.cs @@ -27,9 +27,9 @@ namespace SonarLint.VisualStudio.Core.UnitTests.Binding; [TestClass] public class ServerConnectionTests { - private static readonly Uri Localhost = new Uri("http://localhost:5000"); + private static readonly Uri Localhost = new("http://localhost:5000"); private const string Org = "myOrg"; - + [TestMethod] public void Ctor_SonarCloud_NullOrganization_Throws() { @@ -66,6 +66,7 @@ public void Ctor_SonarCloud_SetsProperties() sonarCloud.ServerUri.Should().Be(new Uri("https://sonarcloud.io")); sonarCloud.Settings.Should().BeSameAs(serverConnectionSettings); sonarCloud.Credentials.Should().BeSameAs(credentials); + sonarCloud.CredentialsUri.Should().Be(new Uri($"https://sonarcloud.io/organizations/{sonarCloud.OrganizationKey}")); } [TestMethod] @@ -103,6 +104,7 @@ public void Ctor_SonarQube_SetsProperties() sonarQube.ServerUri.Should().BeSameAs(Localhost); sonarQube.Settings.Should().BeSameAs(serverConnectionSettings); sonarQube.Credentials.Should().BeSameAs(credentials); + sonarQube.CredentialsUri.Should().BeSameAs(sonarQube.ServerUri); } [TestMethod] diff --git a/src/Core/Binding/ServerConnection.cs b/src/Core/Binding/ServerConnection.cs index 6fadaf4a98..d571418f5f 100644 --- a/src/Core/Binding/ServerConnection.cs +++ b/src/Core/Binding/ServerConnection.cs @@ -29,6 +29,7 @@ public abstract class ServerConnection public ICredentials Credentials { get; set; } public abstract Uri ServerUri { get; } + public abstract Uri CredentialsUri { get; } public static ServerConnection FromBoundSonarQubeProject(BoundSonarQubeProject boundProject) => boundProject switch @@ -44,18 +45,25 @@ private ServerConnection(string id, ServerConnectionSettings settings = null, IC Settings = settings ?? DefaultSettings; Credentials = credentials; } - - public sealed class SonarCloud(string organizationKey, ServerConnectionSettings settings = null, ICredentials credentials = null) - : ServerConnection(organizationKey, settings, credentials) + + public sealed class SonarCloud : ServerConnection { - public string OrganizationKey { get; } = organizationKey; + public SonarCloud(string organizationKey, ServerConnectionSettings settings = null, ICredentials credentials = null) : base(organizationKey, settings, credentials) + { + OrganizationKey = organizationKey ?? throw new ArgumentNullException(nameof(organizationKey)); + CredentialsUri = new Uri(ServerUri, $"organizations/{organizationKey}"); + } + + public string OrganizationKey { get; } - public override Uri ServerUri { get; } = new Uri("https://sonarcloud.io"); + public override Uri ServerUri { get; } = new("https://sonarcloud.io"); + public override Uri CredentialsUri { get; } } public sealed class SonarQube(Uri serverUri, ServerConnectionSettings settings = null, ICredentials credentials = null) : ServerConnection(serverUri?.ToString(), settings, credentials) { public override Uri ServerUri { get; } = serverUri; + public override Uri CredentialsUri { get; } = serverUri; } }