public void GetRedirectionRules() { var xml = @"<configuration> <redirection_rules> <rule from=""Bender"" to=""Phillip""/> </redirection_rules> </configuration>"; var config = new XmlRulesConfig(XDocument.Parse(xml), new Mock <ILogger>().Object); var redirectionMap = config.GetRedirectionMap(); string?to; Assert.IsTrue(redirectionMap.TryGetValue("Bender", out to)); Assert.AreEqual(to, "Phillip"); }
public void GetIssueRules() { var xml = @"<configuration> <request group=""test""> <notify subject=""test"" mailTo=""admin"" /> <jql/> </request> </configuration>"; var config = new XmlRulesConfig(XDocument.Parse(xml), new Mock <ILogger>().Object); Rule rule = config.GetJqlRules("test").Single(); Assert.AreEqual(string.Join(",", rule.HowToNotify !.MetaAddressers), string.Join(",", "admin")); Assert.AreEqual(rule.HowToNotify.Subject, "test"); }
public void GetInStructRules() { var xml = @"<configuration> <structureAmbiguityRule group=""test""> <notify subject=""Task is present in more than one project structure. Remove it from others."" mailTo=""reporter""/> <structures>417,462,525,576</structures> </structureAmbiguityRule> </configuration>"; var config = new XmlRulesConfig(XDocument.Parse(xml), new Mock <ILogger>().Object); var rule = config.GetInStructRules("test").Single(); Assert.AreEqual(string.Join(",", rule.Structures), "417,462,525,576"); Assert.AreEqual(string.Join(",", rule.HowToNotify !.MetaAddressers), string.Join(",", new[] { "reporter" })); Assert.AreEqual(rule.HowToNotify.Subject, "Task is present in more than one project structure. Remove it from others."); }
public void GetBuildRules() { var xml = @"<configuration> <build group=""test"" mask=""some valid regex"" projectCode=""BENDER"" remainingDays=""2""> <notify subject=""test"" mailTo=""admin""/> </build> </configuration>"; var config = new XmlRulesConfig(XDocument.Parse(xml), new Mock <ILogger>().Object); var rule = config.GetBuildRules("test").Single(); Assert.IsFalse(rule.ExpiredOnly); Assert.AreEqual(string.Join(",", rule.HowToNotify !.MetaAddressers), string.Join(",", new[] { "admin" })); Assert.AreEqual(rule.HowToNotify.Subject, "test"); Assert.AreEqual(rule.ProjectCode, "BENDER"); }
public void CheckExceptionHandler() { // Required field 'mask' is absent var xml = @"<configuration> <build group=""test"" maskER=""some valid regex"" projectCode=""BENDER"" remainingDays=""2""> <notify subject=""test"" mailTo=""admin""/> </build> </configuration>"; var logger = new Mock <ILogger>(); //logger.Setup(l => l.Error(It.IsAny<Exception>())); var config = new XmlRulesConfig(XDocument.Parse(xml), logger.Object); Assert.IsFalse(config.GetBuildRules("test").Any()); logger.Verify(l => l.Error(It.IsNotNull <Exception>(), It.IsAny <string>()), Times.Once()); }
public void CheckAssigneeAndReporterReplacement() { // Setup var rule = @"<configuration> <jqlRule group=""test""> <jql>any</jql> <callRest verb=""PUT"" urlPattern=""https://jira.example.com/swap-assignee-and-reporter-where/?assignee={{@assignee.name}}&reporter={{@reporter.name}}""> <body><![CDATA[ { ""update"": { ""assignee"": [{""set"": {""name"": ""{{@reporter.name}}""}}], ""reporter"": [{""set"": {""name"": ""{{@assignee.name}}""}}] } } ]]> </body> </callRest> </jqlRule> </configuration>"; var rulesConfig = new XmlRulesConfig(XDocument.Parse(rule), new Mock <ILogger>().Object); var responseWhenGetIssues = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(JsonTypicalIssue) }; var responseWhenDoPut = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("") }; var responseHandler = new Mock <DelegatingHandler>(); responseHandler .Protected() .SetupSequence <Task <HttpResponseMessage> >("SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .Returns(Task.FromResult(responseWhenGetIssues)) .Returns(Task.FromResult(responseWhenDoPut)) ; var connection = new Connection("http://jira", Empty, Empty) { Client = new HttpClient(responseHandler.Object) }; var jiraService = new HttpJiraService("http://jira", Empty, Empty) { Connection = connection }; var packageSupplier = new JqlSupplier(jiraService, rulesConfig.GetJqlRules("test"), new Mock <ILogger>().Object); var pipe = new ReactionPipe <Issue>() { PackageSupplier = packageSupplier, PackageConverter = new IssuePackageConverter(Empty), HttpHandler = jiraService }; // Experiment pipe.Run(); // Check results responseHandler .Protected() .Verify <Task <HttpResponseMessage> >("SendAsync", Times.Once(), ItExpr.Is <HttpRequestMessage>( r => r.RequestUri == new Uri("https://jira.example.com/swap-assignee-and-reporter-where/?assignee=alice&reporter=bob") && r.Method == HttpMethod.Put && r.Content !.ReadAsStringAsync().Result.Contains(@"""assignee"": [{""set"": {""name"": ""bob""}}]") && r.Content !.ReadAsStringAsync().Result.Contains(@"""reporter"": [{""set"": {""name"": ""alice""}}]") ), ItExpr.IsAny <CancellationToken>()); }