Enable support for milestone-based issues queries (#1788)

* Added support for Milestone filter in SearchIssuesRequest

* Fixed some styling issues to match with the style of the existing code

* Wrap milestone value with double quotes as milestones can contain spaces

* Allow milestone filter to contain double quotes

* Ability to search by milestone exclusions

* Moved the EscapeDoubleQuotes method to StringExtensions
This commit is contained in:
mkArtak
2018-03-27 23:45:51 -07:00
committed by Ryan Gribble
parent 4e804f61a6
commit 6577c3ccba
6 changed files with 107 additions and 7 deletions
@@ -19,7 +19,8 @@ public class SearchIssuesRequestExclusionsTests
{ "commenter:", (x,value) => x.Commenter = value },
{ "involves:", (x,value) => x.Involves = value },
{ "head:", (x,value) => x.Head = value },
{ "base:", (x,value) => x.Base = value }
{ "base:", (x,value) => x.Base = value },
{ "milestone:", (x,value) => x.Milestone = value }
};
foreach (var property in stringProperties)
@@ -80,5 +81,25 @@ public class SearchIssuesRequestExclusionsTests
Assert.True(request.MergedQualifiers().Contains("-status:error"));
}
[Fact]
public void HandlesMilestoneAttributeWithoutQuotes()
{
var request = new SearchIssuesRequestExclusions();
Assert.False(request.MergedQualifiers().Any(x => x.Contains("-milestone:")));
request.Milestone = "testMilestone";
Assert.True(request.MergedQualifiers().Contains("-milestone:\"testMilestone\""));
}
[Fact]
public void DoesntWrapMilestoneWithDoubleQuotesForQuotedMilestone()
{
var request = new SearchIssuesRequestExclusions();
Assert.False(request.MergedQualifiers().Any(x => x.Contains("-milestone:")));
request.Milestone = "\"testMilestone\"";
Assert.Contains<string>("-milestone:\"\\\"testMilestone\\\"\"", request.MergedQualifiers());
}
}
}
@@ -41,7 +41,8 @@ public class SearchIssuesRequestTests
{ "team:", (x,value) => x.Team = value },
{ "head:", (x,value) => x.Head = value },
{ "base:", (x,value) => x.Base = value },
{ "user:", (x,value) => x.User = value }
{ "user:", (x,value) => x.User = value },
{ "milestone:", (x,value) => x.Milestone = value }
};
foreach (var property in stringProperties)
@@ -116,6 +117,26 @@ public class SearchIssuesRequestTests
Assert.True(request.MergedQualifiers().Contains("label:label2"));
}
[Fact]
public void HandlesMilestoneAttributeWithoutQuotes()
{
var request = new SearchIssuesRequest("text");
Assert.False(request.MergedQualifiers().Any(x => x.Contains("milestone:")));
request.Milestone = "testMilestone";
Assert.True(request.MergedQualifiers().Contains("milestone:\"testMilestone\""));
}
[Fact]
public void DoesntWrapMilestoneWithDoubleQuotesForQuotedMilestone()
{
var request = new SearchIssuesRequest("text");
Assert.False(request.MergedQualifiers().Any(x => x.Contains("milestone:")));
request.Milestone = "\"testMilestone\"";
Assert.Contains<string>("milestone:\"\\\"testMilestone\\\"\"", request.MergedQualifiers());
}
[Fact]
public void HandlesNoMetadataAttributeCorrectly()
{