public async Task TryToRunJobOnJenkinsWithCSRFProtectionWithoutSavedPassword_AskUserForPassword() { var basicAuthHeader = new BasicAuthenticationHeader(UserName, Password); var tokenAuthHeader = new BearerAuthenticationHeader(Token); var configuration = new JenoConfiguration { JenkinsUrl = JenkinsUrl, UserName = UserName, Token = Token, Password = string.Empty, Repository = new Dictionary <string, string>() { { "firstExampleRepoUrl", "firstExampleJob" }, { "secondExampleRepoUrl", "secondExampleJob" }, { DefaultKey, DefaultJob }, } }; var client = new MockHttpMessageHandler(); client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters") .WithHeaders("Authorization", $"{tokenAuthHeader.Scheme} {tokenAuthHeader.Parameter}") .Respond(request => new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, ReasonPhrase = "No valid crumb was included in the request" }); client.Expect($"{JenkinsUrl}/crumbIssuer/api/json") .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}") .Respond(CrumbContentType, JsonConvert.SerializeObject(_crumbHeader)); client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters") .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}") .WithHeaders(_crumbHeader.CrumbRequestField, _crumbHeader.Crumb) .Respond(HttpStatusCode.OK); var httpClientFactory = new Mock <IHttpClientFactory>(); httpClientFactory.Setup(s => s.CreateClient(It.IsAny <string>())) .Returns(client.ToHttpClient()); var passwordProvider = GetUserConsoleMock(); var command = new RunJob(GetDefaultGitMock().Object, GetEncryptorMock().Object, passwordProvider.Object, httpClientFactory.Object, GetOptionsMock(configuration).Object); var app = new CommandLineApplication(); app.Command(command.Name, command.Command); var result = await app.ExecuteAsync(new string[] { Command }); Assert.That(result, Is.EqualTo(JenoCodes.Ok)); passwordProvider.Verify(s => s.ReadInput("password", true), Times.AtLeastOnce); }
public async Task TryRunJobOnJenkinsWithCSRFProtection_UseBasicCredentialsAndAskForCrumb() { var basicAuthHeader = new BasicAuthenticationHeader(UserName, Password); var tokenAuthHeader = new BearerAuthenticationHeader(Token); var client = new MockHttpMessageHandler(); client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters") .WithHeaders("Authorization", $"{tokenAuthHeader.Scheme} {tokenAuthHeader.Parameter}") .Respond(request => new HttpResponseMessage { StatusCode = HttpStatusCode.Forbidden, ReasonPhrase = "No valid crumb was included in the request" }); client.Expect($"{JenkinsUrl}/crumbIssuer/api/json") .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}") .Respond(CrumbContentType, JsonConvert.SerializeObject(_crumbHeader)); client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters") .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}") .WithHeaders(_crumbHeader.CrumbRequestField, _crumbHeader.Crumb) .Respond(HttpStatusCode.OK); var httpClientFactory = new Mock <IHttpClientFactory>(); httpClientFactory.Setup(s => s.CreateClient(It.IsAny <string>())) .Returns(client.ToHttpClient()); var command = new RunJob(GetDefaultGitMock().Object, GetEncryptorMock().Object, GetUserConsoleMock().Object, httpClientFactory.Object, GetOptionsMock().Object); var app = new CommandLineApplication(); app.Command(command.Name, command.Command); var result = await app.ExecuteAsync(new string[] { Command }); Assert.That(result, Is.EqualTo(JenoCodes.Ok)); }