public async Task GetCommand_ExecuteAsync_CallsHostProviderAndWritesCredential()
        {
            const string testUserName       = "******";
            const string testPassword       = "******"; // [SuppressMessage("Microsoft.Security", "CS001:SecretInline", Justification="Fake credential")]
            ICredential  testCredential     = new GitCredential(testUserName, testPassword);
            var          stdin              = $"protocol=http\nhost=example.com\n\n";
            var          expectedStdOutDict = new Dictionary <string, string>
            {
                ["protocol"] = "http",
                ["host"]     = "example.com",
                ["username"] = testUserName,
                ["password"] = testPassword
            };

            var providerMock = new Mock <IHostProvider>();

            providerMock.Setup(x => x.GetCredentialAsync(It.IsAny <InputArguments>()))
            .ReturnsAsync(testCredential);
            var providerRegistry = new TestHostProviderRegistry {
                Provider = providerMock.Object
            };
            var context = new TestCommandContext
            {
                Streams = { In = stdin }
            };

            var command = new GetCommand(context, providerRegistry);

            await command.ExecuteAsync();

            IDictionary <string, string> actualStdOutDict = ParseDictionary(context.Streams.Out);

            providerMock.Verify(x => x.GetCredentialAsync(It.IsAny <InputArguments>()), Times.Once);
            Assert.Equal(expectedStdOutDict, actualStdOutDict);
        }
예제 #2
0
        public async Task StoreCommand_ExecuteAsync_CallsHostProvider()
        {
            const string testUserName  = "******";
            const string testPassword  = "******";
            var          stdin         = $"username={testUserName}\npassword={testPassword}\n\n";
            var          expectedInput = new InputArguments(new Dictionary <string, string>
            {
                ["username"] = testUserName,
                ["password"] = testPassword
            });

            var providerMock = new Mock <IHostProvider>();

            providerMock.Setup(x => x.StoreCredentialAsync(It.IsAny <InputArguments>()))
            .Returns(Task.CompletedTask);
            var providerRegistry = new TestHostProviderRegistry {
                Provider = providerMock.Object
            };
            var context = new TestCommandContext
            {
                Streams = { In = stdin }
            };

            string[] cmdArgs = { "store" };
            var      command = new StoreCommand(providerRegistry);

            await command.ExecuteAsync(context, cmdArgs);

            providerMock.Verify(
                x => x.StoreCredentialAsync(It.Is <InputArguments>(y => AreInputArgumentsEquivalent(expectedInput, y))),
                Times.Once);
        }
예제 #3
0
        public async Task EraseCommand_ExecuteAsync_CallsHostProvider()
        {
            const string testUserName  = "******";
            const string testPassword  = "******"; // [SuppressMessage("Microsoft.Security", "CS001:SecretInline", Justification="Fake credential")]
            var          stdin         = $"username={testUserName}\npassword={testPassword}\n\n";
            var          expectedInput = new InputArguments(new Dictionary <string, string>
            {
                ["username"] = testUserName,
                ["password"] = testPassword // [SuppressMessage("Microsoft.Security", "CS001:SecretInline", Justification="Fake credential")]
            });

            var providerMock = new Mock <IHostProvider>();

            providerMock.Setup(x => x.EraseCredentialAsync(It.IsAny <InputArguments>()))
            .Returns(Task.CompletedTask);
            var providerRegistry = new TestHostProviderRegistry {
                Provider = providerMock.Object
            };
            var context = new TestCommandContext
            {
                Streams = { In = stdin }
            };

            var command = new EraseCommand(context, providerRegistry);

            await command.ExecuteAsync();

            providerMock.Verify(
                x => x.EraseCredentialAsync(It.Is <InputArguments>(y => AreInputArgumentsEquivalent(expectedInput, y))),
                Times.Once);
        }
        public async Task GetCommand_ExecuteAsync_CallsHostProviderAndWritesCredential()
        {
            const string testUserName       = "******";
            const string testPassword       = "******";
            ICredential  testCredential     = new GitCredential(testUserName, testPassword);
            var          expectedStdOutDict = new Dictionary <string, string>
            {
                ["username"] = testUserName,
                ["password"] = testPassword
            };

            var providerMock = new Mock <IHostProvider>();

            providerMock.Setup(x => x.GetCredentialAsync(It.IsAny <InputArguments>()))
            .ReturnsAsync(testCredential);
            var providerRegistry = new TestHostProviderRegistry {
                Provider = providerMock.Object
            };
            var context = new TestCommandContext();

            string[] cmdArgs = { "get" };
            var      command = new GetCommand(providerRegistry);

            await command.ExecuteAsync(context, cmdArgs);

            IDictionary <string, string> actualStdOutDict = ParseDictionary(context.Streams.Out);

            providerMock.Verify(x => x.GetCredentialAsync(It.IsAny <InputArguments>()), Times.Once);
            Assert.Equal(expectedStdOutDict, actualStdOutDict);
        }