Skip to content

File tree

3 files changed

+38
-17
lines changed

3 files changed

+38
-17
lines changed

src/ConnectedMode.UnitTests/Persistence/SolutionBindingCredentialsLoaderTests.cs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@
1818
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1919
*/
2020

21-
using System;
2221
using Microsoft.Alm.Authentication;
2322
using SonarLint.VisualStudio.ConnectedMode.Binding;
24-
using Moq;
2523
using SonarLint.VisualStudio.ConnectedMode.Persistence;
2624
using SonarLint.VisualStudio.Core.Binding;
2725
using SonarQube.Client.Helpers;
@@ -31,16 +29,16 @@ namespace SonarLint.VisualStudio.ConnectedMode.UnitTests.Persistence
3129
[TestClass]
3230
public class SolutionBindingCredentialsLoaderTests
3331
{
34-
private Mock<ICredentialStoreService> store;
32+
private ICredentialStoreService store;
3533
private Uri mockUri;
3634
private SolutionBindingCredentialsLoader testSubject;
3735

3836
[TestInitialize]
3937
public void Setup()
4038
{
41-
store = new Mock<ICredentialStoreService>();
39+
store = Substitute.For<ICredentialStoreService>();
4240
mockUri = new Uri("http://sonarsource.com");
43-
testSubject = new SolutionBindingCredentialsLoader(store.Object);
41+
testSubject = new SolutionBindingCredentialsLoader(store);
4442
}
4543

4644
[TestMethod]
@@ -61,7 +59,7 @@ public void Load_ServerUriIsNull_Null()
6159
[TestMethod]
6260
public void Load_NoCredentials_Null()
6361
{
64-
store.Setup(x => x.ReadCredentials(mockUri)).Returns(null as Credential);
62+
store.ReadCredentials(mockUri).Returns(null as Credential);
6563

6664
var actual = testSubject.Load(mockUri);
6765
actual.Should().Be(null);
@@ -72,7 +70,7 @@ public void Load_CredentialsExist_CredentialsWithSecuredString()
7270
{
7371
var credentials = new Credential("user", "password");
7472
store
75-
.Setup(x => x.ReadCredentials(It.Is<TargetUri>(t => t.ActualUri == mockUri)))
73+
.ReadCredentials(Arg.Is<TargetUri>(t => t.ActualUri == mockUri))
7674
.Returns(credentials);
7775

7876
var actual = testSubject.Load(mockUri);
@@ -86,15 +84,15 @@ public void Save_ServerUriIsNull_CredentialsNotSaved()
8684

8785
testSubject.Save(credentials, null);
8886

89-
store.Verify(x=> x.WriteCredentials(It.IsAny<TargetUri>(), It.IsAny<Credential>()), Times.Never);
87+
store.DidNotReceive().WriteCredentials(Arg.Any<TargetUri>(), Arg.Any<Credential>());
9088
}
9189

9290
[TestMethod]
9391
public void Save_CredentialsAreNull_CredentialsNotSaved()
9492
{
9593
testSubject.Save(null, mockUri);
9694

97-
store.Verify(x => x.WriteCredentials(It.IsAny<TargetUri>(), It.IsAny<Credential>()), Times.Never);
95+
store.DidNotReceive().WriteCredentials(Arg.Any<TargetUri>(), Arg.Any<Credential>());
9896
}
9997

10098
[TestMethod]
@@ -103,7 +101,7 @@ public void Save_CredentialsAreNotBasicAuth_CredentialsNotSaved()
103101
var mockCredentials = new Mock<ICredentials>();
104102
testSubject.Save(mockCredentials.Object, mockUri);
105103

106-
store.Verify(x => x.WriteCredentials(It.IsAny<TargetUri>(), It.IsAny<Credential>()), Times.Never);
104+
store.DidNotReceive().WriteCredentials(Arg.Any<TargetUri>(), Arg.Any<Credential>());
107105
}
108106

109107
[TestMethod]
@@ -112,11 +110,26 @@ public void Save_CredentialsAreBasicAuth_CredentialsSavedWithUnsecuredString()
112110
var credentials = new BasicAuthCredentials("user", "password".ToSecureString());
113111
testSubject.Save(credentials, mockUri);
114112

115-
store.Verify(x =>
116-
x.WriteCredentials(
117-
It.Is<TargetUri>(t => t.ActualUri == mockUri),
118-
It.Is<Credential>(c=> c.Username == "user" && c.Password == "password")),
119-
Times.Once);
113+
store.Received(1)
114+
.WriteCredentials(
115+
Arg.Is<TargetUri>(t => t.ActualUri == mockUri),
116+
Arg.Is<Credential>(c=> c.Username == "user" && c.Password == "password"));
117+
}
118+
119+
[TestMethod]
120+
public void DeleteCredentials_UriNull_DoesNotCallStoreDeleteCredentials()
121+
{
122+
testSubject.DeleteCredentials(null);
123+
124+
store.DidNotReceive().DeleteCredentials(Arg.Any<TargetUri>());
125+
}
126+
127+
[TestMethod]
128+
public void DeleteCredentials_UriProvided_CallsStoreDeleteCredentials()
129+
{
130+
testSubject.DeleteCredentials(mockUri);
131+
132+
store.Received(1).DeleteCredentials(Arg.Any<TargetUri>());
120133
}
121134
}
122135
}

src/ConnectedMode/Persistence/ISolutionBindingCredentialsLoader.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ namespace SonarLint.VisualStudio.ConnectedMode.Persistence
2525
{
2626
interface ISolutionBindingCredentialsLoader
2727
{
28+
void DeleteCredentials(Uri boundServerUri);
2829
ICredentials Load(Uri boundServerUri);
2930
void Save(ICredentials credentials, Uri boundServerUri);
3031
}

src/ConnectedMode/Persistence/SolutionBindingCredentialsLoader.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1919
*/
2020

21-
using System;
22-
using System.Diagnostics;
2321
using Microsoft.Alm.Authentication;
2422
using SonarLint.VisualStudio.ConnectedMode.Binding;
2523
using SonarLint.VisualStudio.Core.Binding;
@@ -36,6 +34,15 @@ public SolutionBindingCredentialsLoader(ICredentialStoreService store)
3634
this.store = store ?? throw new ArgumentNullException(nameof(store));
3735
}
3836

37+
public void DeleteCredentials(Uri boundServerUri)
38+
{
39+
if(boundServerUri == null)
40+
{
41+
return;
42+
}
43+
store.DeleteCredentials(boundServerUri);
44+
}
45+
3946
public ICredentials Load(Uri boundServerUri)
4047
{
4148
if (boundServerUri == null)

0 commit comments

Comments
 (0)