コード例 #1
0
        public async Task AddChild_Succeeds()
        {
            int workItemId = 1;

            client.GetWorkItemAsync(workItemId, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = workItemId,
                Fields = new Dictionary <string, object>
                {
                    { "System.WorkItemType", "User Story" },
                    { "System.Title", "Hello" },
                }
            });
            string ruleCode = @"
var parent = self;
var newChild = store.NewWorkItem(""Task"");
newChild.Title = ""Brand new"";
parent.Relations.AddChild(newChild);
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Default, dryRun: true);
            string result = await engine.ExecuteAsync(CollectionUrl, projectId, ProjectName, PersonalAccessToken, workItemId, client, CancellationToken.None);

            Assert.Null(result);
            logger.Received().WriteInfo($"Found a request for a new Task workitem in {ProjectName}");
            logger.Received().WriteInfo($"Found a request to update workitem {workItemId} in {ProjectName}");
            logger.Received().WriteWarning("Dry-run mode: no updates sent to Azure DevOps.");
            logger.Received().WriteInfo("Changes saved to Azure DevOps (mode Default): 1 created, 1 updated.");
        }
コード例 #2
0
        public async Task TouchDescription_Succeeds()
        {
            int workItemId = 42;

            client.GetWorkItemAsync(workItemId, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = workItemId,
                Fields = new Dictionary <string, object>
                {
                    { "System.Description", "Hello" },
                }
            });
            string ruleCode = @"
self.Description = self.Description + ""."";
return self.Description;
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Default, dryRun: true);
            string result = await engine.ExecuteAsync(CollectionUrl, projectId, ProjectName, PersonalAccessToken, workItemId, client, CancellationToken.None);

            Assert.Equal("Hello.", result);
            logger.Received().WriteInfo($"Found a request to update workitem {workItemId} in {ProjectName}");
            logger.Received().WriteWarning("Dry-run mode: no updates sent to Azure DevOps.");
            logger.Received().WriteInfo("Changes saved to Azure DevOps (mode Default): 0 created, 1 updated.");
        }
コード例 #3
0
        public async void LanguageDirective_Fails()
        {
            int    workItemId = 42;
            string ruleCode   = @".lang=WHAT
return string.Empty;
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Item);
            string result = await engine.ExecuteAsync(collectionUrl, projectId, projectName, personalAccessToken, workItemId, client);

            Assert.Equal(EngineState.Error, engine.State);
        }
コード例 #4
0
        public async Task Parent_Succeeds()
        {
            int workItemId = 2;

            client.GetWorkItemAsync(workItemId, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = workItemId,
                Fields = new Dictionary <string, object>
                {
                    { "System.WorkItemType", "Bug" },
                    { "System.Title", "Hello" },
                },
                Relations = new List <WorkItemRelation>
                {
                    new WorkItemRelation
                    {
                        Rel = "System.LinkTypes.Hierarchy-Reverse",
                        Url = $"{workItemsBaseUrl}/1"
                    }
                },
            });
            client.GetWorkItemAsync(1, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = 1,
                Fields = new Dictionary <string, object>
                {
                    { "System.WorkItemType", "User Story" },
                    { "System.TeamProject", ProjectName },
                },
                Relations = new List <WorkItemRelation>
                {
                    new WorkItemRelation
                    {
                        Rel = "System.LinkTypes.Hierarchy-Forward",
                        Url = FormattableString.Invariant($"{workItemsBaseUrl}/{workItemId}")
                    }
                },
            });
            string ruleCode = @"
string message = """";
var parent = self.Parent;
if (parent != null)
{
    message = $""Parent is {parent.Id}"";
}
return message;
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Default, dryRun: true);
            string result = await engine.ExecuteAsync(CollectionUrl, projectId, ProjectName, PersonalAccessToken, workItemId, client, CancellationToken.None);

            Assert.Equal("Parent is 1", result);
        }
コード例 #5
0
        public async void HelloWorldRule_Succeeds()
        {
            int    workItemId = 42;
            string ruleCode   = @"
return $""Hello { self.WorkItemType } #{ self.Id } - { self.Title }!"";
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Item);
            string result = await engine.ExecuteAsync(collectionUrl, projectId, projectName, personalAccessToken, workItemId, client);

            Assert.Equal("Hello Bug #42 - Hello!", result);
        }
コード例 #6
0
        public async void New_Succeeds()
        {
            int    workItemId = 1;
            string ruleCode   = @"
var wi = store.NewWorkItem(""Task"");
wi.Title = ""Brand new"";
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Item);
            string result = await engine.ExecuteAsync(collectionUrl, projectId, projectName, personalAccessToken, workItemId, client);

            Assert.Null(result);
            Assert.Contains(
                logger.GetMessages(),
                m => m.Message == "Changes saved to Azure DevOps (mode Item): 1 created, 0 updated." &&
                m.Level == "Info");
        }
コード例 #7
0
        public async void Parent_Succeeds()
        {
            int    workItemId = 42;
            string ruleCode   = @"
string message = """";
var parent = self.Parent;
if (parent != null)
{
    message = $""Parent is {parent.Id}"";
}
return message;
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Item);
            string result = await engine.ExecuteAsync(collectionUrl, projectId, projectName, personalAccessToken, workItemId, client);

            Assert.Equal("Parent is 1", result);
        }
コード例 #8
0
        public async Task LanguageDirective_Fails()
        {
            int workItemId = 42;

            client.GetWorkItemAsync(workItemId, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = workItemId,
                Fields = new Dictionary <string, object>
                {
                    { "System.WorkItemType", "Bug" },
                    { "System.Title", "Hello" },
                }
            });
            string ruleCode = @".lang=WHAT
return string.Empty;
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Default, dryRun: true);
            string result = await engine.ExecuteAsync(CollectionUrl, projectId, ProjectName, PersonalAccessToken, workItemId, client, CancellationToken.None);

            Assert.Equal(EngineState.Error, engine.State);
        }
コード例 #9
0
        public async Task HelloWorldRule_Succeeds()
        {
            int workItemId = 42;

            client.GetWorkItemAsync(workItemId, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = workItemId,
                Fields = new Dictionary <string, object>
                {
                    { "System.WorkItemType", "Bug" },
                    { "System.Title", "Hello" },
                }
            });
            string ruleCode = @"
return $""Hello { self.WorkItemType } #{ self.Id } - { self.Title }!"";
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Default, dryRun: true);
            string result = await engine.ExecuteAsync(CollectionUrl, projectId, ProjectName, PersonalAccessToken, workItemId, client, CancellationToken.None);

            Assert.Equal("Hello Bug #42 - Hello!", result);
        }
コード例 #10
0
        public async Task ImportDirective_Fail()
        {
            int workItemId = 42;

            client.GetWorkItemAsync(workItemId, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = workItemId,
                Fields = new Dictionary <string, object>
                {
                    { "System.WorkItemType", "Bug" },
                    { "System.Title", "Hello" },
                }
            });
            string ruleCode = @"
Debug.WriteLine(""test"");
return string.Empty;
";

            var engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Default, dryRun: true);
            await Assert.ThrowsAsync <Microsoft.CodeAnalysis.Scripting.CompilationErrorException>(
                () => engine.ExecuteAsync(CollectionUrl, projectId, ProjectName, PersonalAccessToken, workItemId, client, CancellationToken.None)
                );
        }
コード例 #11
0
        public async Task ImportDirective_Succeeds()
        {
            int workItemId = 42;

            client.GetWorkItemAsync(workItemId, expand: WorkItemExpand.All).Returns(new WorkItem
            {
                Id     = workItemId,
                Fields = new Dictionary <string, object>
                {
                    { "System.WorkItemType", "Bug" },
                    { "System.Title", "Hello" },
                }
            });
            string ruleCode = @".import=System.Diagnostics
Debug.WriteLine(""test"");
return string.Empty;
";

            var    engine = new RuleEngine(logger, ruleCode.Mince(), SaveMode.Default, dryRun: true);
            string result = await engine.ExecuteAsync(CollectionUrl, projectId, ProjectName, PersonalAccessToken, workItemId, client, CancellationToken.None);

            Assert.Equal(EngineState.Success, engine.State);
            Assert.Equal(string.Empty, result);
        }