diff --git a/test/GitHubExtension/DeveloperId/CredentialVaultTests.cs b/test/GitHubExtension/DeveloperId/CredentialVaultTests.cs new file mode 100644 index 0000000..4dc7871 --- /dev/null +++ b/test/GitHubExtension/DeveloperId/CredentialVaultTests.cs @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation and Contributors +// Licensed under the MIT license. + +using System.Net; +using GitHubExtension.DeveloperId; + +namespace GitHubExtension.Test; + +// Unit Tests for CredentialVault +public partial class DeveloperIdTests +{ + [TestMethod] + [TestCategory("Unit")] + public void CredentialVault_CreateSingleton() + { + var credentialVault1 = new CredentialVault("DevHomeGitHubExtensionTest"); + Assert.IsNotNull(credentialVault1); + + var credentialVault2 = new CredentialVault("DevHomeGitHubExtensionTest"); + Assert.IsNotNull(credentialVault2); + + Assert.AreNotEqual(credentialVault1, credentialVault2); + + credentialVault1.RemoveAllCredentials(); + Assert.AreEqual(0, credentialVault1.GetAllCredentials().Count()); + } + + [TestMethod] + [TestCategory("LiveData")] + [DataRow("testuser1")] + [DataRow("https://github.com/testuser2")] + [DataRow("https://RandomWebServer.example/testuser3")] + public void CredentialVault_SaveAndRetrieveCredential(string loginId) + { + var credentialVault = new CredentialVault("DevHomeGitHubExtensionTest"); + Assert.IsNotNull(credentialVault); + Assert.AreEqual(0, credentialVault.GetAllCredentials().Count()); + + var nullCredential = credentialVault.GetCredentials(loginId); + Assert.IsNull(nullCredential); + + var testCredential = "testcredential"; + + var credential = new NetworkCredential(null, testCredential).SecurePassword; + credentialVault.SaveCredentials(loginId, credential); + + var retrievedCredential = credentialVault.GetCredentials(loginId); + Assert.IsNotNull(retrievedCredential); + Assert.AreEqual(testCredential, retrievedCredential.Password); + + credentialVault.RemoveAllCredentials(); + Assert.AreEqual(0, credentialVault.GetAllCredentials().Count()); + } + + [TestMethod] + [TestCategory("LiveData")] + [DataRow("testuser1")] + [DataRow("https://github.com/testuser2")] + [DataRow("https://RandomWebServer.example/testuser3")] + public void CredentialVault_RemoveAndRetrieveCredential(string loginId) + { + var credentialVault = new CredentialVault("DevHomeGitHubExtensionTest"); + Assert.IsNotNull(credentialVault); + + var testCredential = "testCredential"; + + var credential = new NetworkCredential(null, testCredential).SecurePassword; + credentialVault.SaveCredentials(loginId, credential); + + var retrievedCredential = credentialVault.GetCredentials(loginId); + Assert.IsNotNull(retrievedCredential); + Assert.AreEqual(testCredential, retrievedCredential.Password); + + credentialVault.RemoveCredentials(loginId); + + var nullCredential = credentialVault.GetCredentials(loginId); + Assert.IsNull(nullCredential); + + Assert.AreEqual(0, credentialVault.GetAllCredentials().Count()); + } + + [TestMethod] + [TestCategory("LiveData")] + public void CredentialVault_GetAllCredentials() + { + var credentialVault = new CredentialVault("DevHomeGitHubExtensionTest"); + Assert.IsNotNull(credentialVault); + + Assert.AreEqual(0, credentialVault.GetAllCredentials().Count()); + + var testLoginId = "testuser1"; + var testCredential = "testCredential"; + + var credential = new NetworkCredential(null, testCredential).SecurePassword; + credentialVault.SaveCredentials(testLoginId, credential); + + Assert.AreEqual(1, credentialVault.GetAllCredentials().Count()); + + credentialVault.RemoveCredentials(testLoginId); + + Assert.AreEqual(0, credentialVault.GetAllCredentials().Count()); + + var nullCredential = credentialVault.GetCredentials(testLoginId); + Assert.IsNull(nullCredential); + } +} diff --git a/test/GitHubExtension/DeveloperId/DeveloperIdProviderTests.cs b/test/GitHubExtension/DeveloperId/DeveloperIdProviderTests.cs index b419d8d..838fb0a 100644 --- a/test/GitHubExtension/DeveloperId/DeveloperIdProviderTests.cs +++ b/test/GitHubExtension/DeveloperId/DeveloperIdProviderTests.cs @@ -56,6 +56,32 @@ private CredentialVault SetupCredentialVaultWithGHESTestUser() return credentialVault; } + /* Tests depend on the following environment variables: + * DEV_HOME_TEST_GITHUB_COM_USER : Url for a test user on github.com + * DEV_HOME_TEST_GITHUB_COM_PAT : Personal Access Token for the test user on github.com + * DEV_HOME_TEST_GITHUB_ENTERPRISE_SERVER_USER : Url for a test user on GHES + * DEV_HOME_TEST_GITHUB_ENTERPRISE_SERVER_PAT : Personal Access Token for the test user on the GHES + */ + private CredentialVault SetupCredentialVaultWithMultipleTestUsers() + { + var credentialVault = SetupCleanCredentialVaultClean(); + + var testLoginId = Environment.GetEnvironmentVariable("DEV_HOME_TEST_GITHUB_COM_USER") ?? string.Empty; + var testPassword = Environment.GetEnvironmentVariable("DEV_HOME_TEST_GITHUB_COM_PAT"); + + var testGHESLoginId = Environment.GetEnvironmentVariable("DEV_HOME_TEST_GITHUB_ENTERPRISE_SERVER_USER") ?? string.Empty; + var testGHESPassword = Environment.GetEnvironmentVariable("DEV_HOME_TEST_GITHUB_ENTERPRISE_SERVER_PAT"); + + var password = new NetworkCredential(null, testPassword).SecurePassword; + credentialVault.SaveCredentials(testLoginId, password); + + var ghesPassword = new NetworkCredential(null, testGHESPassword).SecurePassword; + credentialVault.SaveCredentials(testGHESLoginId, ghesPassword); + + Assert.AreEqual(2, credentialVault.GetAllCredentials().Count()); + return credentialVault; + } + private CredentialVault SetupCredentialVaultWithInvalidTestUser() { var credentialVault = SetupCleanCredentialVaultClean(); @@ -129,6 +155,31 @@ public void DeveloperIdProvider_RestoreAndGetDeveloperIds() Assert.AreEqual(0, credentialVault.GetAllCredentials().Count()); } + [TestMethod] + [TestCategory("LiveData")] + public void DeveloperIdProvider_RestoreAndGetMultipleDeveloperIds() + { + // Setup CredentialVault with a dummy testuser and valid PAT for Github.com + var credentialVault = SetupCredentialVaultWithMultipleTestUsers(); + + // Test whether the DeveloperIdProvider can restore the saved credentials + var devIdProvider = DeveloperIdProvider.GetInstance(); + Assert.IsNotNull(devIdProvider); + var result = devIdProvider.GetLoggedInDeveloperIds(); + + Assert.IsNotNull(result); + Assert.AreEqual(ProviderOperationStatus.Success, result.Result.Status); + Assert.AreEqual(2, result.DeveloperIds.Count()); + Assert.AreNotEqual("dummytestuser1", result.DeveloperIds.First().LoginId); + Assert.AreNotEqual("dummytestuser1", result.DeveloperIds.Last().LoginId); + Assert.IsNotNull(new Uri(result.DeveloperIds.First().Url)); + Assert.IsNotNull(new Uri(result.DeveloperIds.Last().Url)); + + // Cleanup + credentialVault.RemoveAllCredentials(); + Assert.AreEqual(0, credentialVault.GetAllCredentials().Count()); + } + [TestMethod] [TestCategory("LiveData")] public void DeveloperIdProvider_GetDeveloperIds_InvalidPAT()