Esempio n. 1
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");
        }
        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>());
        }