using System;
using System.Collections.Generic;
using NSubstitute;
using Xunit;
using System.Threading.Tasks;
namespace Octokit.Tests.Clients
{
///
/// Client tests mostly just need to make sure they call the IApiConnection with the correct
/// relative Uri. No need to fake up the response. All *those* tests are in ApiConnectionTests.cs.
///
public class SearchClientTests
{
public class TheCtor
{
[Fact]
public void EnsuresNonNullArguments()
{
Assert.Throws(() => new SearchClient(null));
}
}
public class TheSearchUsersMethod
{
[Fact]
public void RequestsTheCorrectUrl()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
client.SearchUsers(new SearchUsersRequest("something"));
connection.Received().Get(Arg.Is(u => u.ToString() == "search/users"), Arg.Any>());
}
[Fact]
public async Task EnsuresNonNullArguments()
{
var client = new SearchClient(Substitute.For());
await Assert.ThrowsAsync(() => client.SearchUsers(null));
}
[Fact]
public void TestingTheTermParameter()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github"));
}
[Fact]
public void TestingTheAccountTypeQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.AccountType = AccountSearchType.User;
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+type:User"));
}
[Fact]
public void TestingTheAccountTypeQualifier_Org()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.AccountType = AccountSearchType.Org;
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+type:Org"));
}
[Fact]
public void TestingTheInQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get users where the fullname contains 'github'
var request = new SearchUsersRequest("github");
request.In = new[] { UserInQualifier.Fullname };
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+in:Fullname"));
}
[Fact]
public void TestingTheInQualifier_Email()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.In = new[] { UserInQualifier.Email };
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+in:Email"));
}
[Fact]
public void TestingTheInQualifier_Username()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.In = new[] { UserInQualifier.Username };
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+in:Username"));
}
[Fact]
public void TestingTheInQualifier_Multiple()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.In = new[] { UserInQualifier.Username, UserInQualifier.Fullname, UserInQualifier.Email };
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+in:Username,Fullname,Email"));
}
[Fact]
public void TestingTheReposQualifier_GreaterThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Repositories = Range.GreaterThan(5);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+repos:>5"));
}
[Fact]
public void TestingTheReposQualifier_GreaterThanOrEqualTo()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Repositories = Range.GreaterThanOrEquals(5);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+repos:>=5"));
}
[Fact]
public void TestingTheReposQualifier_LessThanOrEqualTo()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Repositories = Range.LessThanOrEquals(5);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+repos:<=5"));
}
[Fact]
public void TestingTheReposQualifier_LessThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Repositories = Range.LessThan(5);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+repos:<5"));
}
[Fact]
public void TestingTheLocationQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Location = "San Francisco";
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+location:San Francisco"));
}
[Fact]
public void TestingTheLanguageQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get users who have mostly repos where language is Literate Haskell
var request = new SearchUsersRequest("github");
request.Language = Language.LiterateHaskell;
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+language:\"Literate Haskell\""));
}
[Fact]
public void TestingTheCreatedQualifier_GreaterThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Created = DateRange.GreaterThan(new DateTimeOffset(new DateTime(2014, 1, 1), TimeSpan.Zero));
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+created:>2014-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_GreaterThanOrEqualTo()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Created = DateRange.GreaterThanOrEquals(new DateTimeOffset(new DateTime(2014, 1, 1), TimeSpan.Zero));
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+created:>=2014-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_LessThanOrEqualTo()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Created = DateRange.LessThanOrEquals(new DateTimeOffset(new DateTime(2014, 1, 1), TimeSpan.Zero));
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+created:<=2014-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_LessThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Created = DateRange.LessThan(new DateTimeOffset(new DateTime(2014, 1, 1), TimeSpan.Zero));
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+created:<2014-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_Between()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Created = DateRange.Between(
new DateTimeOffset(new DateTime(2014, 1, 1), TimeSpan.Zero),
new DateTimeOffset(new DateTime(2014, 2, 1), TimeSpan.Zero));
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+created:2014-01-01T00:00:00%2B00:00..2014-02-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheFollowersQualifier_GreaterThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Followers = Range.GreaterThan(1);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+followers:>1"));
}
[Fact]
public void TestingTheFollowersQualifier_GreaterThanOrEqualTo()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Followers = Range.GreaterThanOrEquals(1);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+followers:>=1"));
}
[Fact]
public void TestingTheFollowersQualifier_LessThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Followers = Range.LessThan(1);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+followers:<1"));
}
[Fact]
public void TestingTheFollowersQualifier_LessThanOrEqualTo()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Followers = Range.LessThanOrEquals(1);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+followers:<=1"));
}
[Fact]
public void TestingTheFollowersQualifier_Range()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchUsersRequest("github");
request.Followers = new Range(1, 1000);
client.SearchUsers(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/users"),
Arg.Is>(d => d["q"] == "github+followers:1..1000"));
}
}
public class TheSearchRepoMethod
{
[Fact]
public void RequestsTheCorrectUrl()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
client.SearchRepo(new SearchRepositoriesRequest("something"));
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Any>());
}
[Fact]
public async Task EnsuresNonNullArguments()
{
var client = new SearchClient(Substitute.For());
await Assert.ThrowsAsync(() => client.SearchRepo(null));
}
[Fact]
public void TestingTheSizeQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest("github");
request.Size = Range.GreaterThan(1);
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+size:>1"));
}
[Fact]
public void TestingTheStarsQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos who's stargazers are greater than 500
var request = new SearchRepositoriesRequest("github");
request.Stars = Range.GreaterThan(500);
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+stars:>500"));
}
[Fact]
public void TestingTheStarsQualifier_LessThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos who's stargazers are less than 500
var request = new SearchRepositoriesRequest("github");
request.Stars = Range.LessThan(500);
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+stars:<500"));
}
[Fact]
public void TestingTheStarsQualifier_LessThanOrEquals()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos who's stargazers are less than 500 or equal to
var request = new SearchRepositoriesRequest("github");
request.Stars = Range.LessThanOrEquals(500);
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+stars:<=500"));
}
[Fact]
public void TestingTheForksQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos which has forks that are greater than 50
var request = new SearchRepositoriesRequest("github");
request.Forks = Range.GreaterThan(50);
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+forks:>50"));
}
[Fact]
public void TestingTheIncludeForkQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//search repos that contains rails and forks are included in the search
var request = new SearchRepositoriesRequest("github");
request.Fork = ForkQualifier.IncludeForks;
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+fork:true"));
}
[Fact]
public void TestingTheOnlyForkQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//search repos that contains rails and forks are included in the search
var request = new SearchRepositoriesRequest("github");
request.Fork = ForkQualifier.OnlyForks;
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+fork:only"));
}
[Fact]
public void TestingTheLangaugeQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos who's language is Literate Haskell
var request = new SearchRepositoriesRequest("github");
request.Language = Language.LiterateHaskell;
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+language:\"Literate Haskell\""));
}
[Fact]
public void TestingTheInQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the Description contains the test 'github'
var request = new SearchRepositoriesRequest("github");
request.In = new[] { InQualifier.Description };
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+in:Description"));
}
[Fact]
public void TestingTheInQualifier_Name()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest("github");
request.In = new[] { InQualifier.Name };
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+in:Name"));
}
[Fact]
public void TestingTheInQualifier_Readme()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest("github");
request.In = new[] { InQualifier.Readme };
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+in:Readme"));
}
[Fact]
public void TestingTheInQualifier_Multiple()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest("github");
request.In = new[] { InQualifier.Readme, InQualifier.Description, InQualifier.Name };
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+in:Readme,Description,Name"));
}
[Fact]
public void TestingTheCreatedQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been created after year jan 1 2011
var request = new SearchRepositoriesRequest("github");
request.Created = DateRange.GreaterThan(new DateTimeOffset(new DateTime(2011, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+created:>2011-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_GreaterThanOrEquals()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been created after year jan 1 2011
var request = new SearchRepositoriesRequest("github");
request.Created = DateRange.GreaterThanOrEquals(new DateTimeOffset(new DateTime(2011, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+created:>=2011-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_LessThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been created after year jan 1 2011
var request = new SearchRepositoriesRequest("github");
request.Created = DateRange.LessThan(new DateTimeOffset(new DateTime(2011, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+created:<2011-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_LessThanOrEquals()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been created after year jan 1 2011
var request = new SearchRepositoriesRequest("github");
request.Created = DateRange.LessThanOrEquals(new DateTimeOffset(new DateTime(2011, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+created:<=2011-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheCreatedQualifier_Between()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest("github");
request.Created = DateRange.Between(
new DateTimeOffset(new DateTime(2011, 1, 1), TimeSpan.Zero),
new DateTimeOffset(new DateTime(2012, 11, 11), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+created:2011-01-01T00:00:00%2B00:00..2012-11-11T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheUpdatedQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been pushed before year jan 1 2013
var request = new SearchRepositoriesRequest("github");
request.Updated = DateRange.GreaterThan(new DateTimeOffset(new DateTime(2013, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+pushed:>2013-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheUpdatedQualifier_GreaterThanOrEquals()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been pushed before year jan 1 2013
var request = new SearchRepositoriesRequest("github");
request.Updated = DateRange.GreaterThanOrEquals(new DateTimeOffset(new DateTime(2013, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+pushed:>=2013-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheUpdatedQualifier_LessThan()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been pushed before year jan 1 2013
var request = new SearchRepositoriesRequest("github");
request.Updated = DateRange.LessThan(new DateTimeOffset(new DateTime(2013, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+pushed:<2013-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheUpdatedQualifier_LessThanOrEquals()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where the search contains 'github' and has been pushed before year jan 1 2013
var request = new SearchRepositoriesRequest("github");
request.Updated = DateRange.LessThanOrEquals(new DateTimeOffset(new DateTime(2013, 1, 1), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+pushed:<=2013-01-01T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheUpdatedQualifier_Between()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest("github");
request.Updated = DateRange.Between(
new DateTimeOffset(new DateTime(2012, 4, 30), TimeSpan.Zero),
new DateTimeOffset(new DateTime(2012, 7, 4), TimeSpan.Zero));
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+pushed:2012-04-30T00:00:00%2B00:00..2012-07-04T00:00:00%2B00:00"));
}
[Fact]
public void TestingTheUserQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
//get repos where search contains 'github' and user/org is 'github'
var request = new SearchRepositoriesRequest("github");
request.User = "rails";
client.SearchRepo(request);
connection.Received().Get(Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d => d["q"] == "github+user:rails"));
}
[Fact]
public void TestingTheSortParameter()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest("github");
request.SortField = RepoSearchSort.Stars;
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d =>
d["q"] == "github" &&
d["sort"] == "stars"));
}
[Fact]
public void TestingTheSearchParameter()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchRepositoriesRequest();
client.SearchRepo(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/repositories"),
Arg.Is>(d =>
string.IsNullOrEmpty(d["q"])));
}
[Fact]
public async Task TestingTheTopicQualifier()
{
var request = new SearchRepositoriesRequest("github");
request.Topic = "TheTopic";
Assert.Contains("topic:thetopic", request.MergedQualifiers());
}
[Fact]
public void TestingTheTopicsQualifierWithGreaterThanOneTopic()
{
var request = new SearchRepositoriesRequest("github");
request.Topics = Range.GreaterThan(1);
Assert.Contains("topics:>1", request.MergedQualifiers());
}
[Fact]
public void TestingTheTopicsQualifierWithExactlyOneTopic()
{
var request = new SearchRepositoriesRequest("github");
request.Topics = new Range(1);
Assert.Contains("topics:1", request.MergedQualifiers());
}
[Fact]
public void TestingTheTopicsQualifierWithTwoOrLessTopics()
{
var request = new SearchRepositoriesRequest("github");
request.Topics = Range.LessThanOrEquals(2);
Assert.Contains("topics:<=2", request.MergedQualifiers());
}
}
public class TheSearchIssuesMethod
{
[Fact]
public void RequestsTheCorrectUrl()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
client.SearchIssues(new SearchIssuesRequest("something"));
connection.Received().Get(Arg.Is(u => u.ToString() == "search/issues"), Arg.Any>());
}
[Fact]
public async Task EnsuresNonNullArguments()
{
var client = new SearchClient(Substitute.For());
await Assert.ThrowsAsync(() => client.SearchIssues(null));
}
[Fact]
public void TestingTheTermParameter()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("pub");
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d => d["q"] == "pub"));
}
[Fact]
public void TestingTheSortParameter()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.SortField = IssueSearchSort.Comments;
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d =>
d["sort"] == "comments"));
}
[Fact]
public void TestingTheOrderParameter()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.SortField = IssueSearchSort.Updated;
request.Order = SortDirection.Ascending;
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d =>
d["sort"] == "updated" &&
d["order"] == "asc"));
}
[Fact]
public void TestingTheDefaultOrderParameter()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d =>
d["order"] == "desc"));
}
[Fact]
public void TestingTheInQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.In = new[] { IssueInQualifier.Comment };
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d => d["q"] == "something+in:comment"));
}
[Fact]
public void TestingTheInQualifiers_Multiple()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.In = new[] { IssueInQualifier.Body, IssueInQualifier.Title };
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d => d["q"] == "something+in:body,title"));
}
[Fact]
public void TestingTheTypeQualifier_Issue()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.Type = IssueTypeQualifier.Issue;
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d => d["q"] == "something+type:issue"));
}
[Fact]
public void TestingTheTypeQualifier_PullRequest()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.Type = IssueTypeQualifier.PullRequest;
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d => d["q"] == "something+type:pr"));
}
[Fact]
public void TestingTheAuthorQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.Author = "alfhenrik";
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d => d["q"] == "something+author:alfhenrik"));
}
[Fact]
public void TestingTheAssigneeQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.Assignee = "alfhenrik";
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is>(d => d["q"] == "something+assignee:alfhenrik"));
}
[Fact]
public void TestingTheMentionsQualifier()
{
var connection = Substitute.For();
var client = new SearchClient(connection);
var request = new SearchIssuesRequest("something");
request.Mentions = "alfhenrik";
client.SearchIssues(request);
connection.Received().Get(
Arg.Is(u => u.ToString() == "search/issues"),
Arg.Is