Пример #1
0
        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");
        }
Пример #2
0
        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");
        }
Пример #3
0
        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.");
        }
Пример #4
0
        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");
        }
Пример #5
0
        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}}&amp;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>());
        }