From ec92355358e2768c1b90984714bd7e52e38e9ada Mon Sep 17 00:00:00 2001 From: hadley_lateral Date: Mon, 22 Oct 2012 15:03:49 +0800 Subject: [PATCH 1/5] Added parameterised Login command and test --- .../Commands/LoginUserCommandTest.cs | 17 +++++++- src/AppHarbor/Commands/LoginUserCommand.cs | 42 +++++++++++++++---- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs b/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs index a7d67c6..902efdb 100644 --- a/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs +++ b/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs @@ -8,8 +8,21 @@ namespace AppHarbor.Tests.Commands { public class LoginUserCommandTest - { - [Theory, AutoCommandData] + { + [Theory, AutoCommandData] + public void ShouldSetAppHarborTokenIfUserIsntLoggedInUseArgs([Frozen]Mock writer, [Frozen]Mock accessTokenConfigurationMock, Mock loginCommand, string username, string password, string token) + { + accessTokenConfigurationMock.Setup(x => x.GetAccessToken()).Returns((string)null); + loginCommand.Setup(x => x.GetAccessToken(username, password)).Returns(token); + + loginCommand.Object.Execute(new string[] {username,password}); + + writer.Verify(x => x.WriteLine("Using parameterized Credentials."), Times.Once()); + writer.Verify(x => x.WriteLine("Successfully logged in as {0}", username), Times.Once()); + accessTokenConfigurationMock.Verify(x => x.SetAccessToken(token), Times.Once()); + } + + [Theory, AutoCommandData] public void ShouldSetAppHarborTokenIfUserIsntLoggedIn([Frozen]Mock writer, [Frozen]Mock maskedConsoleInput, [Frozen]Mock reader, [Frozen]Mock accessTokenConfigurationMock, Mock loginCommand, string username, string password, string token) { reader.SetupSequence(x => x.ReadLine()).Returns(username).Returns(password); diff --git a/src/AppHarbor/Commands/LoginUserCommand.cs b/src/AppHarbor/Commands/LoginUserCommand.cs index 2da2fdc..5d4ea28 100644 --- a/src/AppHarbor/Commands/LoginUserCommand.cs +++ b/src/AppHarbor/Commands/LoginUserCommand.cs @@ -1,6 +1,7 @@ using System.IO; using RestSharp; -using RestSharp.Contrib; +using RestSharp.Contrib; +using System; namespace AppHarbor.Commands { @@ -25,14 +26,37 @@ protected override void InnerExecute(string[] arguments) if (_accessTokenConfiguration.GetAccessToken() != null) { throw new CommandException("You're already logged in. You need to log out (\"logout\") before you can log in again."); - } - - _writer.Write("Username: "); - var username = _reader.ReadLine(); - - _writer.Write("Password: "); - var password = _maskedInput.Get(); - _writer.WriteLine(); + } + + string username = null; + string password = null; + + if (arguments == null || arguments.Length != 2) + { + _writer.WriteLine("Please supply your Credentials."); + _writer.Write("Username: "); + username = _reader.ReadLine(); + + _writer.Write("Password: "); + password = _maskedInput.Get(); + _writer.WriteLine(); + } + else + { + _writer.WriteLine("Using parameterized Credentials."); + username = arguments[0]; + password = arguments[1]; + } + + if (String.IsNullOrEmpty(username)) + { + _writer.WriteLine("No Username supplied, login failed."); + return; + } + if (String.IsNullOrEmpty(password)) + { + _writer.WriteLine("No Password supplied, login failed."); + } var accessToken = GetAccessToken(username, password); _accessTokenConfiguration.SetAccessToken(accessToken); From 8f998f1175dbc15638a5991938f9f82428c4f2b9 Mon Sep 17 00:00:00 2001 From: hadley_lateral Date: Mon, 22 Oct 2012 15:04:35 +0800 Subject: [PATCH 2/5] ignore test results --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 84e14c4..1840025 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ deploy/* *.suo *.cache packages/ - +src/TestResults/* From 91f4c4d02ff00813e30d29254b7ee0931975a580 Mon Sep 17 00:00:00 2001 From: hadley_lateral Date: Mon, 22 Oct 2012 16:25:15 +0800 Subject: [PATCH 3/5] Return 0 success, 1 for problem --- src/AppHarbor/Program.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/AppHarbor/Program.cs b/src/AppHarbor/Program.cs index c8f8ace..6e9dbf7 100644 --- a/src/AppHarbor/Program.cs +++ b/src/AppHarbor/Program.cs @@ -5,7 +5,7 @@ namespace AppHarbor { class Program { - static void Main(string[] args) + static int Main(string[] args) { var container = new WindsorContainer() .Install(new AppHarborInstaller()); @@ -14,7 +14,9 @@ static void Main(string[] args) try { - commandDispatcher.Dispatch(args); + commandDispatcher.Dispatch(args); + // no there was no problems :) + return 0; } catch (DispatchException exception) { @@ -22,7 +24,9 @@ static void Main(string[] args) using (new ForegroundColor(ConsoleColor.Red)) { Console.WriteLine("Error: {0}", exception.Message); - } + } + // yes, there was a problem :( + return 1; } } } From 5960eaf13711aecc96ec8e0bad5cd20ab2f66599 Mon Sep 17 00:00:00 2001 From: hadley_lateral Date: Mon, 22 Oct 2012 16:27:59 +0800 Subject: [PATCH 4/5] CR/LF --- src/AppHarbor/Commands/LoginUserCommand.cs | 110 ++++++++++----------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/src/AppHarbor/Commands/LoginUserCommand.cs b/src/AppHarbor/Commands/LoginUserCommand.cs index 5d4ea28..977c18a 100644 --- a/src/AppHarbor/Commands/LoginUserCommand.cs +++ b/src/AppHarbor/Commands/LoginUserCommand.cs @@ -1,31 +1,31 @@ -using System.IO; -using RestSharp; +using System.IO; +using RestSharp; using RestSharp.Contrib; -using System; - -namespace AppHarbor.Commands -{ - [CommandHelp("Login to AppHarbor", alias: "login")] - public class LoginUserCommand : Command - { - private readonly IAccessTokenConfiguration _accessTokenConfiguration; - private readonly IMaskedInput _maskedInput; - private readonly TextReader _reader; - private readonly TextWriter _writer; - - public LoginUserCommand(IAccessTokenConfiguration accessTokenConfiguration, IMaskedInput maskedInput, TextReader reader, TextWriter writer) - { - _accessTokenConfiguration = accessTokenConfiguration; - _maskedInput = maskedInput; - _reader = reader; - _writer = writer; - } - - protected override void InnerExecute(string[] arguments) - { - if (_accessTokenConfiguration.GetAccessToken() != null) - { - throw new CommandException("You're already logged in. You need to log out (\"logout\") before you can log in again."); +using System; + +namespace AppHarbor.Commands +{ + [CommandHelp("Login to AppHarbor", alias: "login")] + public class LoginUserCommand : Command + { + private readonly IAccessTokenConfiguration _accessTokenConfiguration; + private readonly IMaskedInput _maskedInput; + private readonly TextReader _reader; + private readonly TextWriter _writer; + + public LoginUserCommand(IAccessTokenConfiguration accessTokenConfiguration, IMaskedInput maskedInput, TextReader reader, TextWriter writer) + { + _accessTokenConfiguration = accessTokenConfiguration; + _maskedInput = maskedInput; + _reader = reader; + _writer = writer; + } + + protected override void InnerExecute(string[] arguments) + { + if (_accessTokenConfiguration.GetAccessToken() != null) + { + throw new CommandException("You're already logged in. You need to log out (\"logout\") before you can log in again."); } string username = null; @@ -56,31 +56,31 @@ protected override void InnerExecute(string[] arguments) if (String.IsNullOrEmpty(password)) { _writer.WriteLine("No Password supplied, login failed."); - } - - var accessToken = GetAccessToken(username, password); - _accessTokenConfiguration.SetAccessToken(accessToken); - _writer.WriteLine("Successfully logged in as {0}", username); - } - - public virtual string GetAccessToken(string username, string password) - { - //NOTE: Remove when merged into AppHarbor.NET library - var restClient = new RestClient("https://appharbor-token-client.apphb.com"); - var request = new RestRequest("/token", Method.POST); - - request.AddParameter("username", username); - request.AddParameter("password", password); - - var response = restClient.Execute(request); - var accessToken = HttpUtility.ParseQueryString(response.Content)["access_token"]; - - if (accessToken == null) - { - throw new CommandException("Couldn't log in. Try again"); - } - - return accessToken; - } - } -} + } + + var accessToken = GetAccessToken(username, password); + _accessTokenConfiguration.SetAccessToken(accessToken); + _writer.WriteLine("Successfully logged in as {0}", username); + } + + public virtual string GetAccessToken(string username, string password) + { + //NOTE: Remove when merged into AppHarbor.NET library + var restClient = new RestClient("https://appharbor-token-client.apphb.com"); + var request = new RestRequest("/token", Method.POST); + + request.AddParameter("username", username); + request.AddParameter("password", password); + + var response = restClient.Execute(request); + var accessToken = HttpUtility.ParseQueryString(response.Content)["access_token"]; + + if (accessToken == null) + { + throw new CommandException("Couldn't log in. Try again"); + } + + return accessToken; + } + } +} From c5d17d81326187e4dd51ada0b613c2bc34dfc539 Mon Sep 17 00:00:00 2001 From: hadley_lateral Date: Tue, 23 Oct 2012 15:11:12 +0800 Subject: [PATCH 5/5] autocrlf and tabs --- .../Commands/LoginUserCommandTest.cs | 92 +++++++++---------- src/AppHarbor/Commands/LoginUserCommand.cs | 50 +++++----- src/AppHarbor/Program.cs | 6 +- 3 files changed, 73 insertions(+), 75 deletions(-) diff --git a/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs b/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs index 902efdb..edd5894 100644 --- a/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs +++ b/src/AppHarbor.Tests/Commands/LoginUserCommandTest.cs @@ -1,50 +1,50 @@ -using System.IO; -using AppHarbor.Commands; -using Moq; -using Ploeh.AutoFixture.Xunit; -using Xunit; -using Xunit.Extensions; - -namespace AppHarbor.Tests.Commands -{ - public class LoginUserCommandTest +using System.IO; +using AppHarbor.Commands; +using Moq; +using Ploeh.AutoFixture.Xunit; +using Xunit; +using Xunit.Extensions; + +namespace AppHarbor.Tests.Commands +{ + public class LoginUserCommandTest { + [Theory, AutoCommandData] + public void ShouldSetAppHarborTokenIfUserIsntLoggedInUseArgs([Frozen]Mock writer, [Frozen]Mock accessTokenConfigurationMock, Mock loginCommand, string username, string password, string token) + { + accessTokenConfigurationMock.Setup(x => x.GetAccessToken()).Returns((string)null); + loginCommand.Setup(x => x.GetAccessToken(username, password)).Returns(token); + + loginCommand.Object.Execute(new string[] {username,password}); + + writer.Verify(x => x.WriteLine("Using parameterized Credentials."), Times.Once()); + writer.Verify(x => x.WriteLine("Successfully logged in as {0}", username), Times.Once()); + accessTokenConfigurationMock.Verify(x => x.SetAccessToken(token), Times.Once()); + } + [Theory, AutoCommandData] - public void ShouldSetAppHarborTokenIfUserIsntLoggedInUseArgs([Frozen]Mock writer, [Frozen]Mock accessTokenConfigurationMock, Mock loginCommand, string username, string password, string token) - { - accessTokenConfigurationMock.Setup(x => x.GetAccessToken()).Returns((string)null); - loginCommand.Setup(x => x.GetAccessToken(username, password)).Returns(token); + public void ShouldSetAppHarborTokenIfUserIsntLoggedIn([Frozen]Mock writer, [Frozen]Mock maskedConsoleInput, [Frozen]Mock reader, [Frozen]Mock accessTokenConfigurationMock, Mock loginCommand, string username, string password, string token) + { + reader.SetupSequence(x => x.ReadLine()).Returns(username).Returns(password); + accessTokenConfigurationMock.Setup(x => x.GetAccessToken()).Returns((string)null); + loginCommand.Setup(x => x.GetAccessToken(username, password)).Returns(token); + + maskedConsoleInput.Setup(x => x.Get()).Returns(password); + + loginCommand.Object.Execute(new string[] { }); - loginCommand.Object.Execute(new string[] {username,password}); + writer.Verify(x => x.Write("Username: "), Times.Once()); + writer.Verify(x => x.Write("Password: "), Times.Once()); + writer.Verify(x => x.WriteLine("Successfully logged in as {0}", username), Times.Once()); + accessTokenConfigurationMock.Verify(x => x.SetAccessToken(token), Times.Once()); + } - writer.Verify(x => x.WriteLine("Using parameterized Credentials."), Times.Once()); - writer.Verify(x => x.WriteLine("Successfully logged in as {0}", username), Times.Once()); - accessTokenConfigurationMock.Verify(x => x.SetAccessToken(token), Times.Once()); - } - - [Theory, AutoCommandData] - public void ShouldSetAppHarborTokenIfUserIsntLoggedIn([Frozen]Mock writer, [Frozen]Mock maskedConsoleInput, [Frozen]Mock reader, [Frozen]Mock accessTokenConfigurationMock, Mock loginCommand, string username, string password, string token) - { - reader.SetupSequence(x => x.ReadLine()).Returns(username).Returns(password); - accessTokenConfigurationMock.Setup(x => x.GetAccessToken()).Returns((string)null); - loginCommand.Setup(x => x.GetAccessToken(username, password)).Returns(token); - - maskedConsoleInput.Setup(x => x.Get()).Returns(password); - - loginCommand.Object.Execute(new string[] { }); - - writer.Verify(x => x.Write("Username: "), Times.Once()); - writer.Verify(x => x.Write("Password: "), Times.Once()); - writer.Verify(x => x.WriteLine("Successfully logged in as {0}", username), Times.Once()); - accessTokenConfigurationMock.Verify(x => x.SetAccessToken(token), Times.Once()); - } - - [Theory, AutoCommandData] - public void ShouldThrowIfUserIsAlreadyLoggedIn([Frozen]Mock accessTokenConfigurationMock, LoginUserCommand loginCommand) - { - accessTokenConfigurationMock.Setup(x => x.GetAccessToken()).Returns("foo"); - var exception = Assert.Throws(() => loginCommand.Execute(new string[] { })); - Assert.Equal("You're already logged in. You need to log out (\"logout\") before you can log in again.", exception.Message); - } - } -} + [Theory, AutoCommandData] + public void ShouldThrowIfUserIsAlreadyLoggedIn([Frozen]Mock accessTokenConfigurationMock, LoginUserCommand loginCommand) + { + accessTokenConfigurationMock.Setup(x => x.GetAccessToken()).Returns("foo"); + var exception = Assert.Throws(() => loginCommand.Execute(new string[] { })); + Assert.Equal("You're already logged in. You need to log out (\"logout\") before you can log in again.", exception.Message); + } + } +} diff --git a/src/AppHarbor/Commands/LoginUserCommand.cs b/src/AppHarbor/Commands/LoginUserCommand.cs index 977c18a..e03eac6 100644 --- a/src/AppHarbor/Commands/LoginUserCommand.cs +++ b/src/AppHarbor/Commands/LoginUserCommand.cs @@ -28,35 +28,35 @@ protected override void InnerExecute(string[] arguments) throw new CommandException("You're already logged in. You need to log out (\"logout\") before you can log in again."); } - string username = null; - string password = null; + string username = null; + string password = null; - if (arguments == null || arguments.Length != 2) - { - _writer.WriteLine("Please supply your Credentials."); - _writer.Write("Username: "); - username = _reader.ReadLine(); + if (arguments == null || arguments.Length != 2) + { + _writer.WriteLine("Please supply your Credentials."); + _writer.Write("Username: "); + username = _reader.ReadLine(); - _writer.Write("Password: "); - password = _maskedInput.Get(); - _writer.WriteLine(); - } - else - { - _writer.WriteLine("Using parameterized Credentials."); - username = arguments[0]; - password = arguments[1]; - } + _writer.Write("Password: "); + password = _maskedInput.Get(); + _writer.WriteLine(); + } + else + { + _writer.WriteLine("Using parameterized Credentials."); + username = arguments[0]; + password = arguments[1]; + } - if (String.IsNullOrEmpty(username)) - { - _writer.WriteLine("No Username supplied, login failed."); - return; - } + if (String.IsNullOrEmpty(username)) + { + _writer.WriteLine("No Username supplied, login failed."); + return; + } if (String.IsNullOrEmpty(password)) - { - _writer.WriteLine("No Password supplied, login failed."); - } + { + _writer.WriteLine("No Password supplied, login failed."); + } var accessToken = GetAccessToken(username, password); _accessTokenConfiguration.SetAccessToken(accessToken); diff --git a/src/AppHarbor/Program.cs b/src/AppHarbor/Program.cs index 6e9dbf7..601489b 100644 --- a/src/AppHarbor/Program.cs +++ b/src/AppHarbor/Program.cs @@ -15,8 +15,7 @@ static int Main(string[] args) try { commandDispatcher.Dispatch(args); - // no there was no problems :) - return 0; + return 0; // no there was no problems :) } catch (DispatchException exception) { @@ -25,8 +24,7 @@ static int Main(string[] args) { Console.WriteLine("Error: {0}", exception.Message); } - // yes, there was a problem :( - return 1; + return 1; // yes, there was a problem :( } } }