PageRenderTime 30ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/Octokit.Tests/Clients/SearchClientTests.cs

https://gitlab.com/WoomyNightClub/GitHub-API-.NET
C# | 1053 lines | 902 code | 129 blank | 22 comment | 144 complexity | 20db5d242c9e3a794560680f4e3e1d90 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using NSubstitute;
  4. using Xunit;
  5. using System.Threading.Tasks;
  6. namespace Octokit.Tests.Clients
  7. {
  8. /// <summary>
  9. /// Client tests mostly just need to make sure they call the IApiConnection with the correct
  10. /// relative Uri. No need to fake up the response. All *those* tests are in ApiConnectionTests.cs.
  11. /// </summary>
  12. public class SearchClientTests
  13. {
  14. public class TheCtor
  15. {
  16. [Fact]
  17. public void EnsuresNonNullArguments()
  18. {
  19. Assert.Throws<ArgumentNullException>(() => new SearchClient(null));
  20. }
  21. }
  22. public class TheSearchUsersMethod
  23. {
  24. [Fact]
  25. public void RequestsTheCorrectUrl()
  26. {
  27. var connection = Substitute.For<IApiConnection>();
  28. var client = new SearchClient(connection);
  29. client.SearchUsers(new SearchUsersRequest("something"));
  30. connection.Received().Get<SearchUsersResult>(Arg.Is<Uri>(u => u.ToString() == "search/users"), Arg.Any<Dictionary<string, string>>());
  31. }
  32. [Fact]
  33. public async Task EnsuresNonNullArguments()
  34. {
  35. var client = new SearchClient(Substitute.For<IApiConnection>());
  36. await Assert.ThrowsAsync<ArgumentNullException>(() => client.SearchUsers(null));
  37. }
  38. [Fact]
  39. public void TestingTheTermParameter()
  40. {
  41. var connection = Substitute.For<IApiConnection>();
  42. var client = new SearchClient(connection);
  43. var request = new SearchUsersRequest("github");
  44. client.SearchUsers(request);
  45. connection.Received().Get<SearchUsersResult>(
  46. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  47. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github"));
  48. }
  49. [Fact]
  50. public void TestingTheAccountTypeQualifier()
  51. {
  52. var connection = Substitute.For<IApiConnection>();
  53. var client = new SearchClient(connection);
  54. var request = new SearchUsersRequest("github");
  55. request.AccountType = AccountSearchType.User;
  56. client.SearchUsers(request);
  57. connection.Received().Get<SearchUsersResult>(
  58. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  59. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+type:User"));
  60. }
  61. [Fact]
  62. public void TestingTheAccountTypeQualifier_Org()
  63. {
  64. var connection = Substitute.For<IApiConnection>();
  65. var client = new SearchClient(connection);
  66. var request = new SearchUsersRequest("github");
  67. request.AccountType = AccountSearchType.Org;
  68. client.SearchUsers(request);
  69. connection.Received().Get<SearchUsersResult>(
  70. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  71. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+type:Org"));
  72. }
  73. [Fact]
  74. public void TestingTheInQualifier()
  75. {
  76. var connection = Substitute.For<IApiConnection>();
  77. var client = new SearchClient(connection);
  78. //get users where the fullname contains 'github'
  79. var request = new SearchUsersRequest("github");
  80. request.In = new[] { UserInQualifier.Fullname };
  81. client.SearchUsers(request);
  82. connection.Received().Get<SearchUsersResult>(
  83. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  84. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Fullname"));
  85. }
  86. [Fact]
  87. public void TestingTheInQualifier_Email()
  88. {
  89. var connection = Substitute.For<IApiConnection>();
  90. var client = new SearchClient(connection);
  91. var request = new SearchUsersRequest("github");
  92. request.In = new[] { UserInQualifier.Email };
  93. client.SearchUsers(request);
  94. connection.Received().Get<SearchUsersResult>(
  95. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  96. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Email"));
  97. }
  98. [Fact]
  99. public void TestingTheInQualifier_Username()
  100. {
  101. var connection = Substitute.For<IApiConnection>();
  102. var client = new SearchClient(connection);
  103. var request = new SearchUsersRequest("github");
  104. request.In = new[] { UserInQualifier.Username };
  105. client.SearchUsers(request);
  106. connection.Received().Get<SearchUsersResult>(
  107. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  108. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Username"));
  109. }
  110. [Fact]
  111. public void TestingTheInQualifier_Multiple()
  112. {
  113. var connection = Substitute.For<IApiConnection>();
  114. var client = new SearchClient(connection);
  115. var request = new SearchUsersRequest("github");
  116. request.In = new[] { UserInQualifier.Username, UserInQualifier.Fullname, UserInQualifier.Email };
  117. client.SearchUsers(request);
  118. connection.Received().Get<SearchUsersResult>(
  119. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  120. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Username,Fullname,Email"));
  121. }
  122. [Fact]
  123. public void TestingTheReposQualifier_GreaterThan()
  124. {
  125. var connection = Substitute.For<IApiConnection>();
  126. var client = new SearchClient(connection);
  127. var request = new SearchUsersRequest("github");
  128. request.Repositories = Range.GreaterThan(5);
  129. client.SearchUsers(request);
  130. connection.Received().Get<SearchUsersResult>(
  131. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  132. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+repos:>5"));
  133. }
  134. [Fact]
  135. public void TestingTheReposQualifier_GreaterThanOrEqualTo()
  136. {
  137. var connection = Substitute.For<IApiConnection>();
  138. var client = new SearchClient(connection);
  139. var request = new SearchUsersRequest("github");
  140. request.Repositories = Range.GreaterThanOrEquals(5);
  141. client.SearchUsers(request);
  142. connection.Received().Get<SearchUsersResult>(
  143. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  144. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+repos:>=5"));
  145. }
  146. [Fact]
  147. public void TestingTheReposQualifier_LessThanOrEqualTo()
  148. {
  149. var connection = Substitute.For<IApiConnection>();
  150. var client = new SearchClient(connection);
  151. var request = new SearchUsersRequest("github");
  152. request.Repositories = Range.LessThanOrEquals(5);
  153. client.SearchUsers(request);
  154. connection.Received().Get<SearchUsersResult>(
  155. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  156. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+repos:<=5"));
  157. }
  158. [Fact]
  159. public void TestingTheReposQualifier_LessThan()
  160. {
  161. var connection = Substitute.For<IApiConnection>();
  162. var client = new SearchClient(connection);
  163. var request = new SearchUsersRequest("github");
  164. request.Repositories = Range.LessThan(5);
  165. client.SearchUsers(request);
  166. connection.Received().Get<SearchUsersResult>(
  167. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  168. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+repos:<5"));
  169. }
  170. [Fact]
  171. public void TestingTheLocationQualifier()
  172. {
  173. var connection = Substitute.For<IApiConnection>();
  174. var client = new SearchClient(connection);
  175. var request = new SearchUsersRequest("github");
  176. request.Location = "San Francisco";
  177. client.SearchUsers(request);
  178. connection.Received().Get<SearchUsersResult>(
  179. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  180. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+location:San Francisco"));
  181. }
  182. [Fact]
  183. public void TestingTheLanguageQualifier()
  184. {
  185. var connection = Substitute.For<IApiConnection>();
  186. var client = new SearchClient(connection);
  187. //get users who have mostly repos where language is Ruby
  188. var request = new SearchUsersRequest("github");
  189. request.Language = Language.Ruby;
  190. client.SearchUsers(request);
  191. connection.Received().Get<SearchUsersResult>(
  192. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  193. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+language:Ruby"));
  194. }
  195. [Fact]
  196. public void TestingTheCreatedQualifier_GreaterThan()
  197. {
  198. var connection = Substitute.For<IApiConnection>();
  199. var client = new SearchClient(connection);
  200. var request = new SearchUsersRequest("github");
  201. request.Created = DateRange.GreaterThan(new DateTime(2014, 1, 1));
  202. client.SearchUsers(request);
  203. connection.Received().Get<SearchUsersResult>(
  204. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  205. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:>2014-01-01"));
  206. }
  207. [Fact]
  208. public void TestingTheCreatedQualifier_GreaterThanOrEqualTo()
  209. {
  210. var connection = Substitute.For<IApiConnection>();
  211. var client = new SearchClient(connection);
  212. var request = new SearchUsersRequest("github");
  213. request.Created = DateRange.GreaterThanOrEquals(new DateTime(2014, 1, 1));
  214. client.SearchUsers(request);
  215. connection.Received().Get<SearchUsersResult>(
  216. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  217. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:>=2014-01-01"));
  218. }
  219. [Fact]
  220. public void TestingTheCreatedQualifier_LessThanOrEqualTo()
  221. {
  222. var connection = Substitute.For<IApiConnection>();
  223. var client = new SearchClient(connection);
  224. var request = new SearchUsersRequest("github");
  225. request.Created = DateRange.LessThanOrEquals(new DateTime(2014, 1, 1));
  226. client.SearchUsers(request);
  227. connection.Received().Get<SearchUsersResult>(
  228. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  229. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:<=2014-01-01"));
  230. }
  231. [Fact]
  232. public void TestingTheCreatedQualifier_LessThan()
  233. {
  234. var connection = Substitute.For<IApiConnection>();
  235. var client = new SearchClient(connection);
  236. var request = new SearchUsersRequest("github");
  237. request.Created = DateRange.LessThan(new DateTime(2014, 1, 1));
  238. client.SearchUsers(request);
  239. connection.Received().Get<SearchUsersResult>(
  240. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  241. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:<2014-01-01"));
  242. }
  243. [Fact]
  244. public void TestingTheCreatedQualifier_Between()
  245. {
  246. var connection = Substitute.For<IApiConnection>();
  247. var client = new SearchClient(connection);
  248. var request = new SearchUsersRequest("github");
  249. request.Created = DateRange.Between(new DateTime(2014, 1, 1), new DateTime(2014, 2, 1));
  250. client.SearchUsers(request);
  251. connection.Received().Get<SearchUsersResult>(
  252. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  253. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:2014-01-01..2014-02-01"));
  254. }
  255. [Fact]
  256. public void TestingTheFollowersQualifier_GreaterThan()
  257. {
  258. var connection = Substitute.For<IApiConnection>();
  259. var client = new SearchClient(connection);
  260. var request = new SearchUsersRequest("github");
  261. request.Followers = Range.GreaterThan(1);
  262. client.SearchUsers(request);
  263. connection.Received().Get<SearchUsersResult>(
  264. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  265. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+followers:>1"));
  266. }
  267. [Fact]
  268. public void TestingTheFollowersQualifier_GreaterThanOrEqualTo()
  269. {
  270. var connection = Substitute.For<IApiConnection>();
  271. var client = new SearchClient(connection);
  272. var request = new SearchUsersRequest("github");
  273. request.Followers = Range.GreaterThanOrEquals(1);
  274. client.SearchUsers(request);
  275. connection.Received().Get<SearchUsersResult>(
  276. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  277. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+followers:>=1"));
  278. }
  279. [Fact]
  280. public void TestingTheFollowersQualifier_LessThan()
  281. {
  282. var connection = Substitute.For<IApiConnection>();
  283. var client = new SearchClient(connection);
  284. var request = new SearchUsersRequest("github");
  285. request.Followers = Range.LessThan(1);
  286. client.SearchUsers(request);
  287. connection.Received().Get<SearchUsersResult>(
  288. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  289. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+followers:<1"));
  290. }
  291. [Fact]
  292. public void TestingTheFollowersQualifier_LessThanOrEqualTo()
  293. {
  294. var connection = Substitute.For<IApiConnection>();
  295. var client = new SearchClient(connection);
  296. var request = new SearchUsersRequest("github");
  297. request.Followers = Range.LessThanOrEquals(1);
  298. client.SearchUsers(request);
  299. connection.Received().Get<SearchUsersResult>(
  300. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  301. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+followers:<=1"));
  302. }
  303. [Fact]
  304. public void TestingTheFollowersQualifier_Range()
  305. {
  306. var connection = Substitute.For<IApiConnection>();
  307. var client = new SearchClient(connection);
  308. var request = new SearchUsersRequest("github");
  309. request.Followers = new Range(1, 1000);
  310. client.SearchUsers(request);
  311. connection.Received().Get<SearchUsersResult>(
  312. Arg.Is<Uri>(u => u.ToString() == "search/users"),
  313. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+followers:1..1000"));
  314. }
  315. }
  316. public class TheSearchRepoMethod
  317. {
  318. [Fact]
  319. public void RequestsTheCorrectUrl()
  320. {
  321. var connection = Substitute.For<IApiConnection>();
  322. var client = new SearchClient(connection);
  323. client.SearchRepo(new SearchRepositoriesRequest("something"));
  324. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  325. Arg.Any<Dictionary<string, string>>());
  326. }
  327. [Fact]
  328. public async Task EnsuresNonNullArguments()
  329. {
  330. var client = new SearchClient(Substitute.For<IApiConnection>());
  331. await Assert.ThrowsAsync<ArgumentNullException>(() => client.SearchRepo(null));
  332. }
  333. [Fact]
  334. public void TestingTheSizeQualifier()
  335. {
  336. var connection = Substitute.For<IApiConnection>();
  337. var client = new SearchClient(connection);
  338. var request = new SearchRepositoriesRequest("github");
  339. request.Size = Range.GreaterThan(1);
  340. client.SearchRepo(request);
  341. connection.Received().Get<SearchRepositoryResult>(
  342. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  343. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+size:>1"));
  344. }
  345. [Fact]
  346. public void TestingTheStarsQualifier()
  347. {
  348. var connection = Substitute.For<IApiConnection>();
  349. var client = new SearchClient(connection);
  350. //get repos who's stargazers are greater than 500
  351. var request = new SearchRepositoriesRequest("github");
  352. request.Stars = Range.GreaterThan(500);
  353. client.SearchRepo(request);
  354. connection.Received().Get<SearchRepositoryResult>(
  355. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  356. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+stars:>500"));
  357. }
  358. [Fact]
  359. public void TestingTheStarsQualifier_LessThan()
  360. {
  361. var connection = Substitute.For<IApiConnection>();
  362. var client = new SearchClient(connection);
  363. //get repos who's stargazers are less than 500
  364. var request = new SearchRepositoriesRequest("github");
  365. request.Stars = Range.LessThan(500);
  366. client.SearchRepo(request);
  367. connection.Received().Get<SearchRepositoryResult>(
  368. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  369. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+stars:<500"));
  370. }
  371. [Fact]
  372. public void TestingTheStarsQualifier_LessThanOrEquals()
  373. {
  374. var connection = Substitute.For<IApiConnection>();
  375. var client = new SearchClient(connection);
  376. //get repos who's stargazers are less than 500 or equal to
  377. var request = new SearchRepositoriesRequest("github");
  378. request.Stars = Range.LessThanOrEquals(500);
  379. client.SearchRepo(request);
  380. connection.Received().Get<SearchRepositoryResult>(
  381. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  382. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+stars:<=500"));
  383. }
  384. [Fact]
  385. public void TestingTheForksQualifier()
  386. {
  387. var connection = Substitute.For<IApiConnection>();
  388. var client = new SearchClient(connection);
  389. //get repos which has forks that are greater than 50
  390. var request = new SearchRepositoriesRequest("github");
  391. request.Forks = Range.GreaterThan(50);
  392. client.SearchRepo(request);
  393. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  394. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+forks:>50"));
  395. }
  396. [Fact]
  397. public void TestingTheForkQualifier()
  398. {
  399. var connection = Substitute.For<IApiConnection>();
  400. var client = new SearchClient(connection);
  401. //search repos that contains rails and forks are included in the search
  402. var request = new SearchRepositoriesRequest("github");
  403. request.Fork = ForkQualifier.IncludeForks;
  404. client.SearchRepo(request);
  405. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  406. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+fork:IncludeForks"));
  407. }
  408. [Fact]
  409. public void TestingTheLangaugeQualifier()
  410. {
  411. var connection = Substitute.For<IApiConnection>();
  412. var client = new SearchClient(connection);
  413. //get repos who's language is Ruby
  414. var request = new SearchRepositoriesRequest("github");
  415. request.Language = Language.Ruby;
  416. client.SearchRepo(request);
  417. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  418. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+language:Ruby"));
  419. }
  420. [Fact]
  421. public void TestingTheInQualifier()
  422. {
  423. var connection = Substitute.For<IApiConnection>();
  424. var client = new SearchClient(connection);
  425. //get repos where the Description contains the test 'github'
  426. var request = new SearchRepositoriesRequest("github");
  427. request.In = new[] { InQualifier.Description };
  428. client.SearchRepo(request);
  429. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  430. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Description"));
  431. }
  432. [Fact]
  433. public void TestingTheInQualifier_Name()
  434. {
  435. var connection = Substitute.For<IApiConnection>();
  436. var client = new SearchClient(connection);
  437. var request = new SearchRepositoriesRequest("github");
  438. request.In = new[] { InQualifier.Name };
  439. client.SearchRepo(request);
  440. connection.Received().Get<SearchRepositoryResult>(
  441. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  442. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Name"));
  443. }
  444. [Fact]
  445. public void TestingTheInQualifier_Readme()
  446. {
  447. var connection = Substitute.For<IApiConnection>();
  448. var client = new SearchClient(connection);
  449. var request = new SearchRepositoriesRequest("github");
  450. request.In = new[] { InQualifier.Readme };
  451. client.SearchRepo(request);
  452. connection.Received().Get<SearchRepositoryResult>(
  453. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  454. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Readme"));
  455. }
  456. [Fact]
  457. public void TestingTheInQualifier_Multiple()
  458. {
  459. var connection = Substitute.For<IApiConnection>();
  460. var client = new SearchClient(connection);
  461. var request = new SearchRepositoriesRequest("github");
  462. request.In = new[] { InQualifier.Readme, InQualifier.Description, InQualifier.Name };
  463. client.SearchRepo(request);
  464. connection.Received().Get<SearchRepositoryResult>(
  465. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  466. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+in:Readme,Description,Name"));
  467. }
  468. [Fact]
  469. public void TestingTheCreatedQualifier()
  470. {
  471. var connection = Substitute.For<IApiConnection>();
  472. var client = new SearchClient(connection);
  473. //get repos where the search contains 'github' and has been created after year jan 1 2011
  474. var request = new SearchRepositoriesRequest("github");
  475. request.Created = DateRange.GreaterThan(new DateTime(2011, 1, 1));
  476. client.SearchRepo(request);
  477. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  478. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:>2011-01-01"));
  479. }
  480. [Fact]
  481. public void TestingTheCreatedQualifier_GreaterThanOrEquals()
  482. {
  483. var connection = Substitute.For<IApiConnection>();
  484. var client = new SearchClient(connection);
  485. //get repos where the search contains 'github' and has been created after year jan 1 2011
  486. var request = new SearchRepositoriesRequest("github");
  487. request.Created = DateRange.GreaterThanOrEquals(new DateTime(2011, 1, 1));
  488. client.SearchRepo(request);
  489. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  490. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:>=2011-01-01"));
  491. }
  492. [Fact]
  493. public void TestingTheCreatedQualifier_LessThan()
  494. {
  495. var connection = Substitute.For<IApiConnection>();
  496. var client = new SearchClient(connection);
  497. //get repos where the search contains 'github' and has been created after year jan 1 2011
  498. var request = new SearchRepositoriesRequest("github");
  499. request.Created = DateRange.LessThan(new DateTime(2011, 1, 1));
  500. client.SearchRepo(request);
  501. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  502. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:<2011-01-01"));
  503. }
  504. [Fact]
  505. public void TestingTheCreatedQualifier_LessThanOrEquals()
  506. {
  507. var connection = Substitute.For<IApiConnection>();
  508. var client = new SearchClient(connection);
  509. //get repos where the search contains 'github' and has been created after year jan 1 2011
  510. var request = new SearchRepositoriesRequest("github");
  511. request.Created = DateRange.LessThanOrEquals(new DateTime(2011, 1, 1));
  512. client.SearchRepo(request);
  513. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  514. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:<=2011-01-01"));
  515. }
  516. [Fact]
  517. public void TestingTheCreatedQualifier_Between()
  518. {
  519. var connection = Substitute.For<IApiConnection>();
  520. var client = new SearchClient(connection);
  521. var request = new SearchRepositoriesRequest("github");
  522. request.Created = DateRange.Between(new DateTime(2011, 1, 1), new DateTime(2012, 11, 11));
  523. client.SearchRepo(request);
  524. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  525. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+created:2011-01-01..2012-11-11"));
  526. }
  527. [Fact]
  528. public void TestingTheUpdatedQualifier()
  529. {
  530. var connection = Substitute.For<IApiConnection>();
  531. var client = new SearchClient(connection);
  532. //get repos where the search contains 'github' and has been pushed before year jan 1 2013
  533. var request = new SearchRepositoriesRequest("github");
  534. request.Updated = DateRange.GreaterThan(new DateTime(2013, 1, 1));
  535. client.SearchRepo(request);
  536. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  537. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+pushed:>2013-01-01"));
  538. }
  539. [Fact]
  540. public void TestingTheUpdatedQualifier_GreaterThanOrEquals()
  541. {
  542. var connection = Substitute.For<IApiConnection>();
  543. var client = new SearchClient(connection);
  544. //get repos where the search contains 'github' and has been pushed before year jan 1 2013
  545. var request = new SearchRepositoriesRequest("github");
  546. request.Updated = DateRange.GreaterThanOrEquals(new DateTime(2013, 1, 1));
  547. client.SearchRepo(request);
  548. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  549. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+pushed:>=2013-01-01"));
  550. }
  551. [Fact]
  552. public void TestingTheUpdatedQualifier_LessThan()
  553. {
  554. var connection = Substitute.For<IApiConnection>();
  555. var client = new SearchClient(connection);
  556. //get repos where the search contains 'github' and has been pushed before year jan 1 2013
  557. var request = new SearchRepositoriesRequest("github");
  558. request.Updated = DateRange.LessThan(new DateTime(2013, 1, 1));
  559. client.SearchRepo(request);
  560. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  561. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+pushed:<2013-01-01"));
  562. }
  563. [Fact]
  564. public void TestingTheUpdatedQualifier_LessThanOrEquals()
  565. {
  566. var connection = Substitute.For<IApiConnection>();
  567. var client = new SearchClient(connection);
  568. //get repos where the search contains 'github' and has been pushed before year jan 1 2013
  569. var request = new SearchRepositoriesRequest("github");
  570. request.Updated = DateRange.LessThanOrEquals(new DateTime(2013, 1, 1));
  571. client.SearchRepo(request);
  572. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  573. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+pushed:<=2013-01-01"));
  574. }
  575. [Fact]
  576. public void TestingTheUpdatedQualifier_Between()
  577. {
  578. var connection = Substitute.For<IApiConnection>();
  579. var client = new SearchClient(connection);
  580. var request = new SearchRepositoriesRequest("github");
  581. request.Updated = DateRange.Between(new DateTime(2012, 4, 30), new DateTime(2012, 7, 4));
  582. client.SearchRepo(request);
  583. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  584. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+pushed:2012-04-30..2012-07-04"));
  585. }
  586. [Fact]
  587. public void TestingTheUserQualifier()
  588. {
  589. var connection = Substitute.For<IApiConnection>();
  590. var client = new SearchClient(connection);
  591. //get repos where search contains 'github' and user/org is 'github'
  592. var request = new SearchRepositoriesRequest("github");
  593. request.User = "rails";
  594. client.SearchRepo(request);
  595. connection.Received().Get<SearchRepositoryResult>(Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  596. Arg.Is<Dictionary<string, string>>(d => d["q"] == "github+user:rails"));
  597. }
  598. [Fact]
  599. public void TestingTheSortParameter()
  600. {
  601. var connection = Substitute.For<IApiConnection>();
  602. var client = new SearchClient(connection);
  603. var request = new SearchRepositoriesRequest("github");
  604. request.SortField = RepoSearchSort.Stars;
  605. client.SearchRepo(request);
  606. connection.Received().Get<SearchRepositoryResult>(
  607. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  608. Arg.Is<Dictionary<string, string>>(d =>
  609. d["q"] == "github" &&
  610. d["sort"] == "stars"));
  611. }
  612. [Fact]
  613. public void TestingTheSearchParameter()
  614. {
  615. var connection = Substitute.For<IApiConnection>();
  616. var client = new SearchClient(connection);
  617. var request = new SearchRepositoriesRequest();
  618. client.SearchRepo(request);
  619. connection.Received().Get<SearchRepositoryResult>(
  620. Arg.Is<Uri>(u => u.ToString() == "search/repositories"),
  621. Arg.Is<Dictionary<string, string>>(d =>
  622. string.IsNullOrEmpty(d["q"])));
  623. }
  624. }
  625. public class TheSearchIssuesMethod
  626. {
  627. [Fact]
  628. public void RequestsTheCorrectUrl()
  629. {
  630. var connection = Substitute.For<IApiConnection>();
  631. var client = new SearchClient(connection);
  632. client.SearchIssues(new SearchIssuesRequest("something"));
  633. connection.Received().Get<SearchIssuesResult>(Arg.Is<Uri>(u => u.ToString() == "search/issues"), Arg.Any<Dictionary<string, string>>());
  634. }
  635. [Fact]
  636. public async Task EnsuresNonNullArguments()
  637. {
  638. var client = new SearchClient(Substitute.For<IApiConnection>());
  639. await Assert.ThrowsAsync<ArgumentNullException>(() => client.SearchIssues(null));
  640. }
  641. [Fact]
  642. public void TestingTheTermParameter()
  643. {
  644. var connection = Substitute.For<IApiConnection>();
  645. var client = new SearchClient(connection);
  646. var request = new SearchIssuesRequest("pub");
  647. client.SearchIssues(request);
  648. connection.Received().Get<SearchIssuesResult>(
  649. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  650. Arg.Is<Dictionary<string, string>>(d => d["q"] == "pub"));
  651. }
  652. [Fact]
  653. public void TestingTheSortParameter()
  654. {
  655. var connection = Substitute.For<IApiConnection>();
  656. var client = new SearchClient(connection);
  657. var request = new SearchIssuesRequest("something");
  658. request.SortField = IssueSearchSort.Comments;
  659. client.SearchIssues(request);
  660. connection.Received().Get<SearchIssuesResult>(
  661. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  662. Arg.Is<Dictionary<string, string>>(d =>
  663. d["sort"] == "comments"));
  664. }
  665. [Fact]
  666. public void TestingTheOrderParameter()
  667. {
  668. var connection = Substitute.For<IApiConnection>();
  669. var client = new SearchClient(connection);
  670. var request = new SearchIssuesRequest("something");
  671. request.SortField = IssueSearchSort.Updated;
  672. request.Order = SortDirection.Ascending;
  673. client.SearchIssues(request);
  674. connection.Received().Get<SearchIssuesResult>(
  675. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  676. Arg.Is<Dictionary<string, string>>(d =>
  677. d["sort"] == "updated" &&
  678. d["order"] == "asc"));
  679. }
  680. [Fact]
  681. public void TestingTheDefaultOrderParameter()
  682. {
  683. var connection = Substitute.For<IApiConnection>();
  684. var client = new SearchClient(connection);
  685. var request = new SearchIssuesRequest("something");
  686. client.SearchIssues(request);
  687. connection.Received().Get<SearchIssuesResult>(
  688. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  689. Arg.Is<Dictionary<string, string>>(d =>
  690. d["order"] == "desc"));
  691. }
  692. [Fact]
  693. public void TestingTheInQualifier()
  694. {
  695. var connection = Substitute.For<IApiConnection>();
  696. var client = new SearchClient(connection);
  697. var request = new SearchIssuesRequest("something");
  698. request.In = new[] { IssueInQualifier.Comment };
  699. client.SearchIssues(request);
  700. connection.Received().Get<SearchIssuesResult>(
  701. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  702. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+in:comment"));
  703. }
  704. [Fact]
  705. public void TestingTheInQualifiers_Multiple()
  706. {
  707. var connection = Substitute.For<IApiConnection>();
  708. var client = new SearchClient(connection);
  709. var request = new SearchIssuesRequest("something");
  710. request.In = new[] { IssueInQualifier.Body, IssueInQualifier.Title };
  711. client.SearchIssues(request);
  712. connection.Received().Get<SearchIssuesResult>(
  713. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  714. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+in:body,title"));
  715. }
  716. [Fact]
  717. public void TestingTheTypeQualifier_Issue()
  718. {
  719. var connection = Substitute.For<IApiConnection>();
  720. var client = new SearchClient(connection);
  721. var request = new SearchIssuesRequest("something");
  722. request.Type = IssueTypeQualifier.Issue;
  723. client.SearchIssues(request);
  724. connection.Received().Get<SearchIssuesResult>(
  725. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  726. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+type:issue"));
  727. }
  728. [Fact]
  729. public void TestingTheTypeQualifier_PullRequest()
  730. {
  731. var connection = Substitute.For<IApiConnection>();
  732. var client = new SearchClient(connection);
  733. var request = new SearchIssuesRequest("something");
  734. request.Type = IssueTypeQualifier.PullRequest;
  735. client.SearchIssues(request);
  736. connection.Received().Get<SearchIssuesResult>(
  737. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  738. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+type:pr"));
  739. }
  740. [Fact]
  741. public void TestingTheAuthorQualifier()
  742. {
  743. var connection = Substitute.For<IApiConnection>();
  744. var client = new SearchClient(connection);
  745. var request = new SearchIssuesRequest("something");
  746. request.Author = "alfhenrik";
  747. client.SearchIssues(request);
  748. connection.Received().Get<SearchIssuesResult>(
  749. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  750. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+author:alfhenrik"));
  751. }
  752. [Fact]
  753. public void TestingTheAssigneeQualifier()
  754. {
  755. var connection = Substitute.For<IApiConnection>();
  756. var client = new SearchClient(connection);
  757. var request = new SearchIssuesRequest("something");
  758. request.Assignee = "alfhenrik";
  759. client.SearchIssues(request);
  760. connection.Received().Get<SearchIssuesResult>(
  761. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  762. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+assignee:alfhenrik"));
  763. }
  764. [Fact]
  765. public void TestingTheMentionsQualifier()
  766. {
  767. var connection = Substitute.For<IApiConnection>();
  768. var client = new SearchClient(connection);
  769. var request = new SearchIssuesRequest("something");
  770. request.Mentions = "alfhenrik";
  771. client.SearchIssues(request);
  772. connection.Received().Get<SearchIssuesResult>(
  773. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  774. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+mentions:alfhenrik"));
  775. }
  776. [Fact]
  777. public void TestingTheCommenterQualifier()
  778. {
  779. var connection = Substitute.For<IApiConnection>();
  780. var client = new SearchClient(connection);
  781. var request = new SearchIssuesRequest("something");
  782. request.Commenter = "alfhenrik";
  783. client.SearchIssues(request);
  784. connection.Received().Get<SearchIssuesResult>(
  785. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  786. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+commenter:alfhenrik"));
  787. }
  788. [Fact]
  789. public void TestingTheInvolvesQualifier()
  790. {
  791. var connection = Substitute.For<IApiConnection>();
  792. var client = new SearchClient(connection);
  793. var request = new SearchIssuesRequest("something");
  794. request.Involves = "alfhenrik";
  795. client.SearchIssues(request);
  796. connection.Received().Get<SearchIssuesResult>(
  797. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  798. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+involves:alfhenrik"));
  799. }
  800. [Fact]
  801. public void TestingTheStateQualifier_Open()
  802. {
  803. var connection = Substitute.For<IApiConnection>();
  804. var client = new SearchClient(connection);
  805. var request = new SearchIssuesRequest("something");
  806. request.State = ItemState.Open;
  807. client.SearchIssues(request);
  808. connection.Received().Get<SearchIssuesResult>(
  809. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  810. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+state:open"));
  811. }
  812. [Fact]
  813. public void TestingTheStateQualifier_Closed()
  814. {
  815. var connection = Substitute.For<IApiConnection>();
  816. var client = new SearchClient(connection);
  817. var request = new SearchIssuesRequest("something");
  818. request.State = ItemState.Closed;
  819. client.SearchIssues(request);
  820. connection.Received().Get<SearchIssuesResult>(
  821. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  822. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+state:closed"));
  823. }
  824. [Fact]
  825. public void TestingTheLabelsQualifier()
  826. {
  827. var connection = Substitute.For<IApiConnection>();
  828. var client = new SearchClient(connection);
  829. var request = new SearchIssuesRequest("something");
  830. request.Labels = new[] { "bug" };
  831. client.SearchIssues(request);
  832. connection.Received().Get<SearchIssuesResult>(
  833. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  834. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+label:bug"));
  835. }
  836. [Fact]
  837. public void TestingTheLabelsQualifier_Multiple()
  838. {
  839. var connection = Substitute.For<IApiConnection>();
  840. var client = new SearchClient(connection);
  841. var request = new SearchIssuesRequest("something");
  842. request.Labels = new[] { "bug", "feature" };
  843. client.SearchIssues(request);
  844. connection.Received().Get<SearchIssuesResult>(
  845. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  846. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+label:bug+label:feature"));
  847. }
  848. [Fact]
  849. public void TestingTheLanguageQualifier()
  850. {
  851. var connection = Substitute.For<IApiConnection>();
  852. var client = new SearchClient(connection);
  853. var request = new SearchIssuesRequest("something");
  854. request.Language = Language.CSharp;
  855. client.SearchIssues(request);
  856. connection.Received().Get<SearchIssuesResult>(
  857. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  858. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+language:C#"));
  859. }
  860. [Fact]
  861. public void TestingTheCreatedQualifier_GreaterThan()
  862. {
  863. var connection = Substitute.For<IApiConnection>();
  864. var client = new SearchClient(connection);
  865. var request = new SearchIssuesRequest("something");
  866. request.Created = DateRange.GreaterThan(new DateTime(2014, 1, 1));
  867. client.SearchIssues(request);
  868. connection.Received().Get<SearchIssuesResult>(
  869. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  870. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+created:>2014-01-01"));
  871. }
  872. [Fact]
  873. public void TestingTheCreatedQualifier_GreaterThanOrEquals()
  874. {
  875. var connection = Substitute.For<IApiConnection>();
  876. var client = new SearchClient(connection);
  877. var request = new SearchIssuesRequest("something");
  878. request.Created = DateRange.GreaterThanOrEquals(new DateTime(2014, 1, 1));
  879. client.SearchIssues(request);
  880. connection.Received().Get<SearchIssuesResult>(
  881. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  882. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+created:>=2014-01-01"));
  883. }
  884. [Fact]
  885. public void TestingTheCreatedQualifier_LessThan()
  886. {
  887. var connection = Substitute.For<IApiConnection>();
  888. var client = new SearchClient(connection);
  889. var request = new SearchIssuesRequest("something");
  890. request.Created = DateRange.LessThan(new DateTime(2014, 1, 1));
  891. client.SearchIssues(request);
  892. connection.Received().Get<SearchIssuesResult>(
  893. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  894. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+created:<2014-01-01"));
  895. }
  896. [Fact]
  897. public void TestingTheCreatedQualifier_LessThanOrEquals()
  898. {
  899. var connection = Substitute.For<IApiConnection>();
  900. var client = new SearchClient(connection);
  901. var request = new SearchIssuesRequest("something");
  902. request.Created = DateRange.LessThanOrEquals(new DateTime(2014, 1, 1));
  903. client.SearchIssues(request);
  904. connection.Received().Get<SearchIssuesResult>(
  905. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  906. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+created:<=2014-01-01"));
  907. }
  908. [Fact]
  909. public void TestingTheCreatedQualifier_Between()
  910. {
  911. var connection = Substitute.For<IApiConnection>();
  912. var client = new SearchClient(connection);
  913. var request = new SearchIssuesRequest("something");
  914. request.Created = DateRange.Between(new DateTime(2014, 1, 1), new DateTime(2014, 2, 2));
  915. client.SearchIssues(request);
  916. connection.Received().Get<SearchIssuesResult>(
  917. Arg.Is<Uri>(u => u.ToString() == "search/issues"),
  918. Arg.Is<Dictionary<string, string>>(d => d["q"] == "something+created:2014-01-01..2014-02-02"));
  919. }
  920. [Fact]
  921. public void TestingTheMergedQualifier_GreaterThan()
  922. {
  923. var connection = Substitute.For<IApiConnection>();
  924. var client = new SearchClient(connection);