PageRenderTime 31ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/Octokit.Tests/Reactive/ObservableStarredClientTests.cs

https://gitlab.com/WoomyNightClub/GitHub-API-.NET
C# | 624 lines | 508 code | 116 blank | 0 comment | 68 complexity | e4e87273a682f930c24475154ccfdd3e MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reactive.Threading.Tasks;
  4. using System.Threading.Tasks;
  5. using NSubstitute;
  6. using Octokit.Reactive;
  7. using Xunit;
  8. namespace Octokit.Tests.Reactive
  9. {
  10. public class ObservableStarredClientTests
  11. {
  12. public class TheCtor
  13. {
  14. [Fact]
  15. public void EnsuresNonNullArguments()
  16. {
  17. Assert.Throws<ArgumentNullException>(() => new ObservableStarredClient(null));
  18. }
  19. }
  20. public class TheGetAllStargazersMethod
  21. {
  22. [Fact]
  23. public void RequestsCorrectUrl()
  24. {
  25. var endpoint = new Uri("repos/fight/club/stargazers", UriKind.Relative);
  26. var connection = Substitute.For<IConnection>();
  27. var gitHubClient = Substitute.For<IGitHubClient>();
  28. gitHubClient.Connection.Returns(connection);
  29. var client = new ObservableStarredClient(gitHubClient);
  30. client.GetAllStargazers("fight", "club");
  31. connection.Received().Get<List<User>>(endpoint, Args.EmptyDictionary, null);
  32. }
  33. [Fact]
  34. public void RequestsCorrectUrlWithRepositoryId()
  35. {
  36. var endpoint = new Uri("repositories/1/stargazers", UriKind.Relative);
  37. var connection = Substitute.For<IConnection>();
  38. var gitHubClient = Substitute.For<IGitHubClient>();
  39. gitHubClient.Connection.Returns(connection);
  40. var client = new ObservableStarredClient(gitHubClient);
  41. client.GetAllStargazers(1);
  42. connection.Received().Get<List<User>>(endpoint, Args.EmptyDictionary, null);
  43. }
  44. [Fact]
  45. public void RequestsCorrectUrlWithApiOptions()
  46. {
  47. var endpoint = new Uri("repos/fight/club/stargazers", UriKind.Relative);
  48. var connection = Substitute.For<IConnection>();
  49. var gitHubClient = Substitute.For<IGitHubClient>();
  50. gitHubClient.Connection.Returns(connection);
  51. var client = new ObservableStarredClient(gitHubClient);
  52. var options = new ApiOptions
  53. {
  54. PageCount = 1,
  55. StartPage = 1,
  56. PageSize = 1
  57. };
  58. client.GetAllStargazers("fight", "club", options);
  59. connection.Received().Get<List<User>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2), null);
  60. }
  61. [Fact]
  62. public void RequestsCorrectUrlWithApiOptionsWithRepositoryId()
  63. {
  64. var endpoint = new Uri("repositories/1/stargazers", UriKind.Relative);
  65. var connection = Substitute.For<IConnection>();
  66. var gitHubClient = Substitute.For<IGitHubClient>();
  67. gitHubClient.Connection.Returns(connection);
  68. var client = new ObservableStarredClient(gitHubClient);
  69. var options = new ApiOptions
  70. {
  71. PageCount = 1,
  72. StartPage = 1,
  73. PageSize = 1
  74. };
  75. client.GetAllStargazers(1, options);
  76. connection.Received().Get<List<User>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2), null);
  77. }
  78. [Fact]
  79. public void RequestsCorrectUrlWithTimestamps()
  80. {
  81. var endpoint = new Uri("repos/fight/club/stargazers", UriKind.Relative);
  82. var connection = Substitute.For<IConnection>();
  83. var gitHubClient = Substitute.For<IGitHubClient>();
  84. gitHubClient.Connection.Returns(connection);
  85. var client = new ObservableStarredClient(gitHubClient);
  86. client.GetAllStargazersWithTimestamps("fight", "club");
  87. connection.Received().Get<List<UserStar>>(endpoint, Args.EmptyDictionary, "application/vnd.github.v3.star+json");
  88. }
  89. [Fact]
  90. public void RequestsCorrectUrlWithTimestampsWithRepositoryId()
  91. {
  92. var endpoint = new Uri("repositories/1/stargazers", UriKind.Relative);
  93. var connection = Substitute.For<IConnection>();
  94. var gitHubClient = Substitute.For<IGitHubClient>();
  95. gitHubClient.Connection.Returns(connection);
  96. var client = new ObservableStarredClient(gitHubClient);
  97. client.GetAllStargazersWithTimestamps(1);
  98. connection.Received().Get<List<UserStar>>(endpoint, Args.EmptyDictionary, "application/vnd.github.v3.star+json");
  99. }
  100. [Fact]
  101. public void RequestsCorrectUrlWithTimestampsWithApiOptions()
  102. {
  103. var endpoint = new Uri("repos/fight/club/stargazers", UriKind.Relative);
  104. var connection = Substitute.For<IConnection>();
  105. var gitHubClient = Substitute.For<IGitHubClient>();
  106. gitHubClient.Connection.Returns(connection);
  107. var client = new ObservableStarredClient(gitHubClient);
  108. var options = new ApiOptions
  109. {
  110. PageCount = 1,
  111. StartPage = 1,
  112. PageSize = 1
  113. };
  114. client.GetAllStargazersWithTimestamps("fight", "club", options);
  115. connection.Received().Get<List<UserStar>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2), "application/vnd.github.v3.star+json");
  116. }
  117. [Fact]
  118. public void RequestsCorrectUrlWithTimestampsWithApiOptionsWithRepositoryId()
  119. {
  120. var endpoint = new Uri("repositories/1/stargazers", UriKind.Relative);
  121. var connection = Substitute.For<IConnection>();
  122. var gitHubClient = Substitute.For<IGitHubClient>();
  123. gitHubClient.Connection.Returns(connection);
  124. var client = new ObservableStarredClient(gitHubClient);
  125. var options = new ApiOptions
  126. {
  127. PageCount = 1,
  128. StartPage = 1,
  129. PageSize = 1
  130. };
  131. client.GetAllStargazersWithTimestamps(1, options);
  132. connection.Received().Get<List<UserStar>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2), "application/vnd.github.v3.star+json");
  133. }
  134. [Fact]
  135. public void EnsuresNonNullArguments()
  136. {
  137. var client = new ObservableStarredClient(Substitute.For<IGitHubClient>());
  138. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazers(null, "club"));
  139. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazers("fight", null));
  140. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazers(null, "club", ApiOptions.None));
  141. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazers("fight", null, ApiOptions.None));
  142. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazers("fight", "club", null));
  143. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazersWithTimestamps(null, "club"));
  144. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazersWithTimestamps("fight", null));
  145. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazersWithTimestamps(null, "club", ApiOptions.None));
  146. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazersWithTimestamps("fight", null, ApiOptions.None));
  147. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazersWithTimestamps("fight", "club", null));
  148. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazers(1, null));
  149. Assert.Throws<ArgumentNullException>(() => client.GetAllStargazersWithTimestamps(1, null));
  150. Assert.Throws<ArgumentException>(() => client.GetAllStargazers("", "club"));
  151. Assert.Throws<ArgumentException>(() => client.GetAllStargazers("fight", ""));
  152. Assert.Throws<ArgumentException>(() => client.GetAllStargazers("", "club", ApiOptions.None));
  153. Assert.Throws<ArgumentException>(() => client.GetAllStargazers("fight", "", ApiOptions.None));
  154. Assert.Throws<ArgumentException>(() => client.GetAllStargazersWithTimestamps("", "club"));
  155. Assert.Throws<ArgumentException>(() => client.GetAllStargazersWithTimestamps("fight", ""));
  156. Assert.Throws<ArgumentException>(() => client.GetAllStargazersWithTimestamps("", "club", ApiOptions.None));
  157. Assert.Throws<ArgumentException>(() => client.GetAllStargazersWithTimestamps("fight", "", ApiOptions.None));
  158. }
  159. }
  160. public class TheGetAllForCurrentMethod
  161. {
  162. [Fact]
  163. public void RequestsCorrectUrl()
  164. {
  165. var endpoint = new Uri("user/starred", UriKind.Relative);
  166. var connection = Substitute.For<IConnection>();
  167. var gitHubClient = Substitute.For<IGitHubClient>();
  168. gitHubClient.Connection.Returns(connection);
  169. var client = new ObservableStarredClient(gitHubClient);
  170. client.GetAllForCurrent();
  171. connection.Received().Get<List<Repository>>(endpoint, Args.EmptyDictionary, null);
  172. }
  173. [Fact]
  174. public void RequestsCorrectUrlWithApiOptions()
  175. {
  176. var endpoint = new Uri("user/starred", UriKind.Relative);
  177. var connection = Substitute.For<IConnection>();
  178. var gitHubClient = Substitute.For<IGitHubClient>();
  179. gitHubClient.Connection.Returns(connection);
  180. var client = new ObservableStarredClient(gitHubClient);
  181. var options = new ApiOptions
  182. {
  183. PageCount = 1,
  184. StartPage = 1,
  185. PageSize = 1
  186. };
  187. client.GetAllForCurrent(options);
  188. connection.Received().Get<List<Repository>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["per_page"] == "1" && d["page"] == "1"), null);
  189. }
  190. [Fact]
  191. public void RequestsCorrectUrlParametrized()
  192. {
  193. var endpoint = new Uri("user/starred", UriKind.Relative);
  194. var connection = Substitute.For<IConnection>();
  195. var gitHubClient = Substitute.For<IGitHubClient>();
  196. gitHubClient.Connection.Returns(connection);
  197. var client = new ObservableStarredClient(gitHubClient);
  198. var request = new StarredRequest { SortDirection = SortDirection.Ascending };
  199. client.GetAllForCurrent(request);
  200. connection.Received().Get<List<Repository>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["direction"] == "asc"),
  201. null);
  202. }
  203. [Fact]
  204. public void RequestsCorrectUrlParametrizedWithApiOptions()
  205. {
  206. var endpoint = new Uri("user/starred", UriKind.Relative);
  207. var connection = Substitute.For<IConnection>();
  208. var gitHubClient = Substitute.For<IGitHubClient>();
  209. gitHubClient.Connection.Returns(connection);
  210. var client = new ObservableStarredClient(gitHubClient);
  211. var options = new ApiOptions
  212. {
  213. PageCount = 1,
  214. StartPage = 1,
  215. PageSize = 1
  216. };
  217. var request = new StarredRequest { SortDirection = SortDirection.Ascending };
  218. client.GetAllForCurrent(request, options);
  219. connection.Received().Get<List<Repository>>(endpoint,
  220. Arg.Is<IDictionary<string, string>>(d => d.Count == 4 && d["direction"] == "asc" && d["per_page"] == "1" && d["page"] == "1"), null);
  221. }
  222. [Fact]
  223. public void RequestsCorrectUrlWithTimestamps()
  224. {
  225. var endpoint = new Uri("user/starred", UriKind.Relative);
  226. var connection = Substitute.For<IConnection>();
  227. var gitHubClient = Substitute.For<IGitHubClient>();
  228. gitHubClient.Connection.Returns(connection);
  229. var client = new ObservableStarredClient(gitHubClient);
  230. client.GetAllForCurrentWithTimestamps();
  231. connection.Received().Get<List<RepositoryStar>>(endpoint, Args.EmptyDictionary, "application/vnd.github.v3.star+json");
  232. }
  233. [Fact]
  234. public void RequestsCorrectUrlWithTimestampsWithApiOptions()
  235. {
  236. var endpoint = new Uri("user/starred", UriKind.Relative);
  237. var connection = Substitute.For<IConnection>();
  238. var gitHubClient = Substitute.For<IGitHubClient>();
  239. gitHubClient.Connection.Returns(connection);
  240. var client = new ObservableStarredClient(gitHubClient);
  241. var options = new ApiOptions
  242. {
  243. PageCount = 1,
  244. StartPage = 1,
  245. PageSize = 1
  246. };
  247. client.GetAllForCurrentWithTimestamps(options);
  248. connection.Received().Get<List<RepositoryStar>>(endpoint,
  249. Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["per_page"] == "1" && d["page"] == "1"),
  250. "application/vnd.github.v3.star+json");
  251. }
  252. [Fact]
  253. public void RequestsCorrectUrlWithTimestampsParametrized()
  254. {
  255. var endpoint = new Uri("user/starred", UriKind.Relative);
  256. var connection = Substitute.For<IConnection>();
  257. var gitHubClient = Substitute.For<IGitHubClient>();
  258. gitHubClient.Connection.Returns(connection);
  259. var client = new ObservableStarredClient(gitHubClient);
  260. var request = new StarredRequest { SortDirection = SortDirection.Ascending };
  261. client.GetAllForCurrentWithTimestamps(request);
  262. connection.Received().Get<List<RepositoryStar>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["direction"] == "asc"),
  263. "application/vnd.github.v3.star+json");
  264. }
  265. [Fact]
  266. public void RequestsCorrectUrlWithTimestampsParametrizedWithApiOptions()
  267. {
  268. var endpoint = new Uri("user/starred", UriKind.Relative);
  269. var connection = Substitute.For<IConnection>();
  270. var gitHubClient = Substitute.For<IGitHubClient>();
  271. gitHubClient.Connection.Returns(connection);
  272. var client = new ObservableStarredClient(gitHubClient);
  273. var options = new ApiOptions
  274. {
  275. PageCount = 1,
  276. StartPage = 1,
  277. PageSize = 1
  278. };
  279. var request = new StarredRequest { SortDirection = SortDirection.Ascending };
  280. client.GetAllForCurrentWithTimestamps(request, options);
  281. connection.Received().Get<List<RepositoryStar>>(endpoint,
  282. Arg.Is<IDictionary<string, string>>(d => d.Count == 4 && d["direction"] == "asc" && d["per_page"] == "1" && d["page"] == "1"),
  283. "application/vnd.github.v3.star+json");
  284. }
  285. [Fact]
  286. public void EnsuresNonNullArguments()
  287. {
  288. var client = new ObservableStarredClient(Substitute.For<IGitHubClient>());
  289. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrent((ApiOptions)null));
  290. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrent((StarredRequest)null));
  291. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrentWithTimestamps((ApiOptions)null));
  292. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrentWithTimestamps((StarredRequest)null));
  293. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrent(null, new ApiOptions()));
  294. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrent(new StarredRequest(), null));
  295. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrentWithTimestamps(null, new ApiOptions()));
  296. Assert.Throws<ArgumentNullException>(() => client.GetAllForCurrentWithTimestamps(new StarredRequest(), null));
  297. }
  298. }
  299. public class TheGetAllForUserMethod
  300. {
  301. [Fact]
  302. public void RequestsCorrectUrl()
  303. {
  304. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  305. var connection = Substitute.For<IConnection>();
  306. var gitHubClient = Substitute.For<IGitHubClient>();
  307. gitHubClient.Connection.Returns(connection);
  308. var client = new ObservableStarredClient(gitHubClient);
  309. client.GetAllForUser("banana");
  310. connection.Received().Get<List<Repository>>(endpoint, Args.EmptyDictionary, null);
  311. }
  312. [Fact]
  313. public void RequestsCorrectUrlWithApiOptions()
  314. {
  315. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  316. var connection = Substitute.For<IConnection>();
  317. var gitHubClient = Substitute.For<IGitHubClient>();
  318. gitHubClient.Connection.Returns(connection);
  319. var client = new ObservableStarredClient(gitHubClient);
  320. var options = new ApiOptions
  321. {
  322. PageCount = 1,
  323. StartPage = 1,
  324. PageSize = 1
  325. };
  326. client.GetAllForUser("banana", options);
  327. connection.Received().Get<List<Repository>>(endpoint,
  328. Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["per_page"] == "1" && d["page"] == "1"), null);
  329. }
  330. [Fact]
  331. public void RequestsCorrectUrlParametrized()
  332. {
  333. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  334. var connection = Substitute.For<IConnection>();
  335. var gitHubClient = Substitute.For<IGitHubClient>();
  336. gitHubClient.Connection.Returns(connection);
  337. var client = new ObservableStarredClient(gitHubClient);
  338. var starredRequest = new StarredRequest { SortDirection = SortDirection.Ascending };
  339. client.GetAllForUser("banana", starredRequest);
  340. connection.Received().Get<List<Repository>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["direction"] == "asc"), null);
  341. }
  342. [Fact]
  343. public void RequestsCorrectUrlParametrizedWithApiOptions()
  344. {
  345. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  346. var connection = Substitute.For<IConnection>();
  347. var gitHubClient = Substitute.For<IGitHubClient>();
  348. gitHubClient.Connection.Returns(connection);
  349. var client = new ObservableStarredClient(gitHubClient);
  350. var options = new ApiOptions
  351. {
  352. PageCount = 1,
  353. StartPage = 1,
  354. PageSize = 1
  355. };
  356. var starredRequest = new StarredRequest { SortDirection = SortDirection.Ascending };
  357. client.GetAllForUser("banana", starredRequest, options);
  358. connection.Received().Get<List<Repository>>(endpoint,
  359. Arg.Is<IDictionary<string, string>>(d => d.Count == 4 && d["direction"] == "asc" && d["direction"] == "asc" && d["per_page"] == "1" && d["page"] == "1"),
  360. null);
  361. }
  362. [Fact]
  363. public void RequestsCorrectUrlWithTimestamps()
  364. {
  365. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  366. var connection = Substitute.For<IConnection>();
  367. var gitHubClient = Substitute.For<IGitHubClient>();
  368. gitHubClient.Connection.Returns(connection);
  369. var client = new ObservableStarredClient(gitHubClient);
  370. client.GetAllForUserWithTimestamps("banana");
  371. connection.Received().Get<List<RepositoryStar>>(endpoint, Args.EmptyDictionary,
  372. "application/vnd.github.v3.star+json");
  373. }
  374. [Fact]
  375. public void RequestsCorrectUrlWithTimestampsWithApiOptions()
  376. {
  377. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  378. var connection = Substitute.For<IConnection>();
  379. var gitHubClient = Substitute.For<IGitHubClient>();
  380. gitHubClient.Connection.Returns(connection);
  381. var client = new ObservableStarredClient(gitHubClient);
  382. var options = new ApiOptions
  383. {
  384. PageCount = 1,
  385. StartPage = 1,
  386. PageSize = 1
  387. };
  388. client.GetAllForUserWithTimestamps("banana", options);
  389. connection.Received().Get<List<RepositoryStar>>(endpoint,
  390. Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["per_page"] == "1" && d["page"] == "1"),
  391. "application/vnd.github.v3.star+json");
  392. }
  393. [Fact]
  394. public void RequestsCorrectUrlWithTimestampsParametrized()
  395. {
  396. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  397. var connection = Substitute.For<IConnection>();
  398. var gitHubClient = Substitute.For<IGitHubClient>();
  399. gitHubClient.Connection.Returns(connection);
  400. var client = new ObservableStarredClient(gitHubClient);
  401. var starredRequest = new StarredRequest { SortDirection = SortDirection.Ascending };
  402. client.GetAllForUserWithTimestamps("banana", starredRequest);
  403. connection.Received().Get<List<RepositoryStar>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 2 && d["direction"] == "asc"),
  404. "application/vnd.github.v3.star+json");
  405. }
  406. [Fact]
  407. public void RequestsCorrectUrlWithTimestampsParametrizedWithApiOptions()
  408. {
  409. var endpoint = new Uri("users/banana/starred", UriKind.Relative);
  410. var connection = Substitute.For<IConnection>();
  411. var gitHubClient = Substitute.For<IGitHubClient>();
  412. gitHubClient.Connection.Returns(connection);
  413. var client = new ObservableStarredClient(gitHubClient);
  414. var options = new ApiOptions
  415. {
  416. PageCount = 1,
  417. StartPage = 1,
  418. PageSize = 1
  419. };
  420. var starredRequest = new StarredRequest { SortDirection = SortDirection.Ascending };
  421. client.GetAllForUserWithTimestamps("banana", starredRequest, options);
  422. connection.Received().Get<List<RepositoryStar>>(endpoint, Arg.Is<IDictionary<string, string>>(d => d.Count == 4 && d["direction"] == "asc" && d["direction"] == "asc" && d["per_page"] == "1" && d["page"] == "1"),
  423. "application/vnd.github.v3.star+json");
  424. }
  425. [Fact]
  426. public void EnsuresNonNullArguments()
  427. {
  428. var client = new ObservableStarredClient(Substitute.For<IGitHubClient>());
  429. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser(null));
  430. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser(null, ApiOptions.None));
  431. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser("banana", (ApiOptions)null));
  432. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser(null, new StarredRequest()));
  433. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser("banana", (StarredRequest)null));
  434. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser(null, new StarredRequest(), ApiOptions.None));
  435. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser("banana", null, ApiOptions.None));
  436. Assert.Throws<ArgumentNullException>(() => client.GetAllForUser("banana", new StarredRequest(), null));
  437. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps(null));
  438. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps(null, ApiOptions.None));
  439. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps("banana", (ApiOptions)null));
  440. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps(null, new StarredRequest()));
  441. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps("banana", (StarredRequest)null));
  442. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps(null, new StarredRequest(), ApiOptions.None));
  443. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps("banana", null, ApiOptions.None));
  444. Assert.Throws<ArgumentNullException>(() => client.GetAllForUserWithTimestamps("banana", new StarredRequest(), null));
  445. Assert.Throws<ArgumentException>(() => client.GetAllForUser(""));
  446. Assert.Throws<ArgumentException>(() => client.GetAllForUser("", ApiOptions.None));
  447. Assert.Throws<ArgumentException>(() => client.GetAllForUser("", new StarredRequest(), ApiOptions.None));
  448. Assert.Throws<ArgumentException>(() => client.GetAllForUserWithTimestamps(""));
  449. Assert.Throws<ArgumentException>(() => client.GetAllForUserWithTimestamps("", ApiOptions.None));
  450. Assert.Throws<ArgumentException>(() => client.GetAllForUserWithTimestamps("", new StarredRequest(), ApiOptions.None));
  451. }
  452. }
  453. public class TheCheckStarredMethod
  454. {
  455. [Fact]
  456. public async Task EnsuresArguments()
  457. {
  458. var client = new ObservableStarredClient(Substitute.For<IGitHubClient>());
  459. await Assert.ThrowsAsync<ArgumentNullException>(() => client.CheckStarred(null, "james").ToTask());
  460. await Assert.ThrowsAsync<ArgumentNullException>(() => client.CheckStarred("james", null).ToTask());
  461. }
  462. [Fact]
  463. public void ChecksStarredForUser()
  464. {
  465. var gitHubClient = Substitute.For<IGitHubClient>();
  466. var client = new ObservableStarredClient(gitHubClient);
  467. client.CheckStarred("jugglingnutcase", "katiejamie");
  468. gitHubClient.Activity.Starring.Received().CheckStarred("jugglingnutcase", "katiejamie");
  469. }
  470. }
  471. public class TheStarRepoMethod
  472. {
  473. [Fact]
  474. public async Task EnsuresArguments()
  475. {
  476. var client = new ObservableStarredClient(Substitute.For<IGitHubClient>());
  477. await Assert.ThrowsAsync<ArgumentNullException>(() => client.StarRepo(null, "james").ToTask());
  478. await Assert.ThrowsAsync<ArgumentNullException>(() => client.StarRepo("james", null).ToTask());
  479. }
  480. [Fact]
  481. public void ChecksStarredForUser()
  482. {
  483. var gitHubClient = Substitute.For<IGitHubClient>();
  484. var client = new ObservableStarredClient(gitHubClient);
  485. client.StarRepo("jugglingnutcase", "katiejamie");
  486. gitHubClient.Activity.Starring.Received().StarRepo("jugglingnutcase", "katiejamie");
  487. }
  488. }
  489. public class TheRemoveStarFromRepoMethod
  490. {
  491. [Fact]
  492. public async Task EnsuresArguments()
  493. {
  494. var client = new ObservableStarredClient(Substitute.For<IGitHubClient>());
  495. await Assert.ThrowsAsync<ArgumentNullException>(() => client.RemoveStarFromRepo(null, "james").ToTask());
  496. await Assert.ThrowsAsync<ArgumentNullException>(() => client.RemoveStarFromRepo("james", null).ToTask());
  497. }
  498. [Fact]
  499. public void ChecksStarredForUser()
  500. {
  501. var gitHubClient = Substitute.For<IGitHubClient>();
  502. var client = new ObservableStarredClient(gitHubClient);
  503. client.RemoveStarFromRepo("jugglingnutcase", "katiejamie");
  504. gitHubClient.Activity.Starring.Received().RemoveStarFromRepo("jugglingnutcase", "katiejamie");
  505. }
  506. }
  507. }
  508. }