public void CheckMultilineExpressionEvaluation() { // Setup var package = new Package <BenderMakesUpdateHimself, Issue>() { Items = new[] { new Issue { Key = "T-1" } }, Reaction = new BenderMakesUpdateHimself { UrlPattern = "http://any", BodyPattern = @" ""datetime"":[{ ""<<c#( new System.DateTime(2020, 03, 20) + System.TimeSpan.FromDays( (new System.DateTime(2020, 03, 20)).Hour < 16 ? 0 : System.DateTime.Today.DayOfWeek == System.DayOfWeek.Friday ? 3 : 1 ) ) .ToString(""yyyy-MM-dd"")#>>"" }]" } }; var converter = new IssuePackageConverter(string.Empty); // Experiment var result = converter.ToHttpRequests(new[] { package }); // Check results Assert.AreEqual( @" ""datetime"":[{ ""2020-03-20"" }]", // Expected result.Single().Body // Actual ); }
public void RedirectionRulesAreCaseInsensitive() { IPackageSupplier packageSupplier = new JqlSupplier(_jiraService !, _rulesConfig !.GetJqlRules("test-2"), _logger !); var message = new IssuePackageConverter("https://jira.express.ship/jira/") .ToMessages(packageSupplier.GetPackages().Cast <Package <BenderSendsLetter, Issue> >()) .Redirect(new Redirector(_rulesConfig.GetRedirectionMap(), Enumerable.Empty <string>(), Enumerable.Empty <string>())) .Single(); Assert.AreEqual("[email protected],[email protected],[email protected]", message.To); }
public void JqlSupplierReplaceMarkersByRealAddresses() { IPackageSupplier packageSupplier = new JqlSupplier(_jiraService !, _rulesConfig !.GetJqlRules("test"), _logger !); var message = new IssuePackageConverter("https://jira.express.ship/jira/") .ToMessages(packageSupplier.GetPackages().Cast <Package <BenderSendsLetter, Issue> >()) .Redirect(new Redirector(_rulesConfig.GetRedirectionMap(), Enumerable.Empty <string>(), Enumerable.Empty <string>())) .Single(); Assert.AreEqual("administrator,[email protected],[email protected]", message.To); Assert.AreEqual("*****@*****.**", message.Cc); }
public void CheckThatMessagesSentToMaintainerWhenSupervisorIsAbsent() { Message?message = null; var messenger = new Mock <IMessenger>(); messenger .Setup(m => m.SendAll(It.IsAny <IEnumerable <Message> >())) .Callback <IEnumerable <Message> >(m => message = m.Single()); var pipe = new ReactionPipe <Issue>() { PackageSupplier = new JqlSupplier(_jiraService !, _rulesConfig !.GetJqlRules("test-for-empty-addressers"), _logger !), PackageConverter = new IssuePackageConverter("https://jira.example.com"), Redirector = new Redirector(_rulesConfig.GetRedirectionMap(), Enumerable.Empty <string>(), new[] { "maintainer" }), Messenger = messenger.Object }; pipe.Run(); Assert.AreEqual("maintainer", message?.To); Assert.AreEqual(string.Empty, message?.Cc); }
public void CheckThatSupervisorInCcIsNotDuplicated() { Message?message = null; var messenger = new Mock <IMessenger>(); messenger .Setup(m => m.SendAll(It.IsAny <IEnumerable <Message> >())) .Callback <IEnumerable <Message> >(m => message = m.Single()); var pipe = new ReactionPipe <Issue>() { PackageSupplier = new JqlSupplier(_jiraService !, _rulesConfig !.GetJqlRules("supervisor-in-Cc"), _logger !), PackageConverter = new IssuePackageConverter("https://jira.example.com"), Redirector = new Redirector(_rulesConfig.GetRedirectionMap(), new[] { "supervisor" }, Enumerable.Empty <string>()), Messenger = messenger.Object }; pipe.Run(); Assert.AreEqual("anybody", message?.To); Assert.AreEqual("supervisor", message?.Cc); }
public void FairedSupervisorInAddressees() { Message?message = null; var messenger = new Mock <IMessenger>(); messenger .Setup(m => m.SendAll(It.IsAny <IEnumerable <Message> >())) .Callback <IEnumerable <Message> >(m => message = m.Single()); var pipe = new ReactionPipe <Issue>() { PackageSupplier = new JqlSupplier(_jiraService !, _rulesConfig !.GetJqlRules("faired-suprevisor-in-addressees"), _logger !), PackageConverter = new IssuePackageConverter("https://jira.example.com"), Redirector = new Redirector(_rulesConfig.GetRedirectionMap(), new[] { "faired_supervisor" }, Enumerable.Empty <string>()), Messenger = messenger.Object }; pipe.Run(); Assert.AreEqual("*****@*****.**", message !.To); Assert.AreEqual("faired_supervisor", message !.Cc); } }
public void CheckExpressionsEvaluationInUrlAndBody() { // Setup var package = new Package <BenderMakesUpdateHimself, Issue>() { Items = new[] { new Issue { Key = "T-1" } }, Reaction = new BenderMakesUpdateHimself { UrlPattern = "{{@jiraRoot}}/rest/api/<<c# \"{{@jiraRoot}}\".Contains(\"jiraeu\") ? \"2\" : \"1\" #>>/issue/{{@issueKey}}/transitions", BodyPattern = "datetime: \"<<c# new System.DateTime(2019, 03, 18).ToString(\"yyyy-MM-dd\") #>>\"" } }; var converter1 = new IssuePackageConverter("http://jiraeu"); var converter2 = new IssuePackageConverter("http://jira"); // Experiment var result1 = converter1.ToHttpRequests(new[] { package }); var result2 = converter2.ToHttpRequests(new[] { package }); // Check results Assert.AreEqual( "http://jiraeu/rest/api/2/issue/T-1/transitions", // Expected result1.Single().Uri.ToString() // Actual ); Assert.AreEqual( "http://jira/rest/api/1/issue/T-1/transitions", // Expected result2.Single().Uri.ToString() // Actual ); Assert.AreEqual( "datetime: \"2019-03-18\"", // Expected result1.Single().Body // Actual ); }
public void CheckSeveralExpressionsToEvaluateInOneBody() { // Setup var converter = new IssuePackageConverter("https://jira.example.com"); var package = new Package <BenderMakesUpdateHimself, Issue> { // JQL: issueFunction in issueFieldMatch('', labels, 'linkTo=') Items = new[] { new Issue { Key = "BUG-2", Labels = "linkTo=TASK-1", } }, Reaction = new BenderMakesUpdateHimself { UrlPattern = "{{@jiraRoot}}/rest/api/2/issue/{{@issueKey}}", BodyPattern = @" { ""update"": { ""issueLinks"": [ { ""add"": { ""type"": { ""name"": ""Relate"" }, ""outwardIssue"": { ""key"": ""<<c# System.Text.RegularExpressions.Regex.Match(issue.Labels, ""linkTo=(.+-\\d+)"").Groups[1].Value #>>"" } } } ], ""labels"": [ { ""remove"": ""<<c# System.Text.RegularExpressions.Regex.Match(issue.Labels, ""linkTo=.+-\\d+"").Value #>>"" } ] } } " } }; // Experiment var actualRequest = converter.ToHttpRequests(new[] { package }).Single(); // Check results var expectedUrl = "https://jira.example.com/rest/api/2/issue/BUG-2"; var expectedBody = @" { ""update"": { ""issueLinks"": [ { ""add"": { ""type"": { ""name"": ""Relate"" }, ""outwardIssue"": { ""key"": ""TASK-1"" } } } ], ""labels"": [ { ""remove"": ""linkTo=TASK-1"" } ] } } "; Assert.AreEqual(expectedUrl, actualRequest.Uri.ToString()); Assert.AreEqual(expectedBody, actualRequest.Body); }