PageRenderTime 72ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/Octokit.Tests/Clients/EventsClientTests.cs

https://gitlab.com/WoomyNightClub/GitHub-API-.NET
C# | 845 lines | 698 code | 147 blank | 0 comment | 24 complexity | 21b44a42d270adc9cf98098e1c1189e9 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using NSubstitute;
  8. using Octokit.Internal;
  9. using Xunit;
  10. namespace Octokit.Tests.Clients
  11. {
  12. public class EventsClientTests
  13. {
  14. public class TheCtor
  15. {
  16. [Fact]
  17. public void EnsuresNonNullArguments()
  18. {
  19. Assert.Throws<ArgumentNullException>(
  20. () => new EventsClient(null));
  21. }
  22. }
  23. public class TheGetAllMethod
  24. {
  25. [Fact]
  26. public async Task RequestsCorrectUrl()
  27. {
  28. var connection = Substitute.For<IApiConnection>();
  29. var client = new EventsClient(connection);
  30. await client.GetAll();
  31. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "events"), Args.ApiOptions);
  32. }
  33. [Fact]
  34. public async Task RequestsCorrectUrlWithApiOptions()
  35. {
  36. var connection = Substitute.For<IApiConnection>();
  37. var client = new EventsClient(connection);
  38. var options = new ApiOptions
  39. {
  40. PageSize = 1,
  41. PageCount = 1,
  42. StartPage = 1
  43. };
  44. await client.GetAll(options);
  45. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "events"), options);
  46. }
  47. [Fact]
  48. public async Task EnsuresNonNullArguments()
  49. {
  50. var connection = Substitute.For<IApiConnection>();
  51. var client = new EventsClient(connection);
  52. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAll(null));
  53. }
  54. }
  55. public class TheGetAllForRepositoryMethod
  56. {
  57. [Fact]
  58. public async Task RequestsCorrectUrl()
  59. {
  60. var connection = Substitute.For<IApiConnection>();
  61. var client = new EventsClient(connection);
  62. await client.GetAllForRepository("fake", "repo");
  63. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/events"), Args.ApiOptions);
  64. }
  65. [Fact]
  66. public async Task RequestsCorrectUrlWithRepositoryId()
  67. {
  68. var connection = Substitute.For<IApiConnection>();
  69. var client = new EventsClient(connection);
  70. await client.GetAllForRepository(1);
  71. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repositories/1/events"), Args.ApiOptions);
  72. }
  73. [Fact]
  74. public async Task RequestsCorrectUrlWithApiOptions()
  75. {
  76. var connection = Substitute.For<IApiConnection>();
  77. var client = new EventsClient(connection);
  78. var options = new ApiOptions
  79. {
  80. PageSize = 1,
  81. PageCount = 1,
  82. StartPage = 1
  83. };
  84. await client.GetAllForRepository("fake", "repo", options);
  85. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/events"), options);
  86. }
  87. [Fact]
  88. public async Task RequestsCorrectUrlWithRepositoryIdWithApiOptions()
  89. {
  90. var connection = Substitute.For<IApiConnection>();
  91. var client = new EventsClient(connection);
  92. var options = new ApiOptions
  93. {
  94. PageSize = 1,
  95. PageCount = 1,
  96. StartPage = 1
  97. };
  98. await client.GetAllForRepository(1, options);
  99. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repositories/1/events"), options);
  100. }
  101. [Fact]
  102. public async Task EnsuresNonNullArguments()
  103. {
  104. var connection = Substitute.For<IApiConnection>();
  105. var client = new EventsClient(connection);
  106. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepository(null, "name"));
  107. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepository("owner", null));
  108. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepository(null, "name", ApiOptions.None));
  109. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepository("owner", null, ApiOptions.None));
  110. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepository("owner", "name", null));
  111. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepository(1, null));
  112. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepository("", "name"));
  113. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepository("owner", ""));
  114. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepository("owner", "", ApiOptions.None));
  115. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepository("", "name", ApiOptions.None));
  116. }
  117. }
  118. public class TheGetAllIssuesForRepositoryMethod
  119. {
  120. [Fact]
  121. public async Task RequestsCorrectUrl()
  122. {
  123. var connection = Substitute.For<IApiConnection>();
  124. var client = new EventsClient(connection);
  125. await client.GetAllIssuesForRepository("fake", "repo");
  126. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/issues/events"), Args.ApiOptions);
  127. }
  128. [Fact]
  129. public async Task RequestsCorrectUrlWithRepositoryId()
  130. {
  131. var connection = Substitute.For<IApiConnection>();
  132. var client = new EventsClient(connection);
  133. await client.GetAllIssuesForRepository(1);
  134. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repositories/1/issues/events"), Args.ApiOptions);
  135. }
  136. [Fact]
  137. public async Task RequestsCorrectUrlWithApiOptions()
  138. {
  139. var connection = Substitute.For<IApiConnection>();
  140. var client = new EventsClient(connection);
  141. var options = new ApiOptions
  142. {
  143. PageSize = 1,
  144. PageCount = 1,
  145. StartPage = 1
  146. };
  147. await client.GetAllIssuesForRepository("fake", "repo", options);
  148. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/issues/events"), options);
  149. }
  150. [Fact]
  151. public async Task RequestsCorrectUrlWithRepositoryIdWithApiOptions()
  152. {
  153. var connection = Substitute.For<IApiConnection>();
  154. var client = new EventsClient(connection);
  155. var options = new ApiOptions
  156. {
  157. PageSize = 1,
  158. PageCount = 1,
  159. StartPage = 1
  160. };
  161. await client.GetAllIssuesForRepository(1, options);
  162. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "repositories/1/issues/events"), options);
  163. }
  164. [Fact]
  165. public async Task EnsuresNonNullArguments()
  166. {
  167. var connection = Substitute.For<IApiConnection>();
  168. var client = new EventsClient(connection);
  169. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllIssuesForRepository(null, "name"));
  170. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllIssuesForRepository("owner", null));
  171. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllIssuesForRepository(null, "name", ApiOptions.None));
  172. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllIssuesForRepository("owner", null, ApiOptions.None));
  173. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllIssuesForRepository("owner", "name", null));
  174. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllIssuesForRepository(1, null));
  175. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllIssuesForRepository("", "name"));
  176. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllIssuesForRepository("owner", ""));
  177. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllIssuesForRepository("owner", "", ApiOptions.None));
  178. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllIssuesForRepository("", "name", ApiOptions.None));
  179. }
  180. }
  181. public class TheGetAllForRepositoryNetworkMethod
  182. {
  183. [Fact]
  184. public async Task RequestsCorrectUrl()
  185. {
  186. var connection = Substitute.For<IApiConnection>();
  187. var client = new EventsClient(connection);
  188. await client.GetAllForRepositoryNetwork("fake", "repo");
  189. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "networks/fake/repo/events"), Args.ApiOptions);
  190. }
  191. [Fact]
  192. public async Task RequestsCorrectUrlWithApiOptions()
  193. {
  194. var connection = Substitute.For<IApiConnection>();
  195. var client = new EventsClient(connection);
  196. var options = new ApiOptions
  197. {
  198. PageSize = 1,
  199. PageCount = 1,
  200. StartPage = 1
  201. };
  202. await client.GetAllForRepositoryNetwork("fake", "repo", options);
  203. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "networks/fake/repo/events"), options);
  204. }
  205. [Fact]
  206. public async Task EnsuresNonNullArguments()
  207. {
  208. var connection = Substitute.For<IApiConnection>();
  209. var client = new EventsClient(connection);
  210. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepositoryNetwork(null, "name"));
  211. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepositoryNetwork("owner", null));
  212. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepositoryNetwork(null, "name", ApiOptions.None));
  213. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepositoryNetwork("owner", null, ApiOptions.None));
  214. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForRepositoryNetwork("owner", "name", null));
  215. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepositoryNetwork("", "name"));
  216. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepositoryNetwork("owner", ""));
  217. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepositoryNetwork("owner", "", ApiOptions.None));
  218. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForRepositoryNetwork("", "name", ApiOptions.None));
  219. }
  220. }
  221. public class TheGetAllForOrganizationMethod
  222. {
  223. [Fact]
  224. public async Task RequestsCorrectUrl()
  225. {
  226. var connection = Substitute.For<IApiConnection>();
  227. var client = new EventsClient(connection);
  228. await client.GetAllForOrganization("fake");
  229. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "orgs/fake/events"), Args.ApiOptions);
  230. }
  231. [Fact]
  232. public async Task RequestsCorrectUrlWithApiOptions()
  233. {
  234. var connection = Substitute.For<IApiConnection>();
  235. var client = new EventsClient(connection);
  236. var options = new ApiOptions
  237. {
  238. PageSize = 1,
  239. PageCount = 1,
  240. StartPage = 1
  241. };
  242. await client.GetAllForOrganization("fake", options);
  243. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "orgs/fake/events"), options);
  244. }
  245. [Fact]
  246. public async Task EnsuresNonNullArguments()
  247. {
  248. var connection = Substitute.For<IApiConnection>();
  249. var client = new EventsClient(connection);
  250. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForOrganization(null));
  251. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForOrganization("fake", null));
  252. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForOrganization(""));
  253. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForOrganization("", ApiOptions.None));
  254. }
  255. }
  256. public class TheGetUserReceivedMethod
  257. {
  258. [Fact]
  259. public async Task RequestsCorrectUrl()
  260. {
  261. var connection = Substitute.For<IApiConnection>();
  262. var client = new EventsClient(connection);
  263. await client.GetAllUserReceived("fake");
  264. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/received_events"), Args.ApiOptions);
  265. }
  266. [Fact]
  267. public async Task RequestsCorrectUrlWithApiOptions()
  268. {
  269. var connection = Substitute.For<IApiConnection>();
  270. var client = new EventsClient(connection);
  271. var options = new ApiOptions
  272. {
  273. PageSize = 1,
  274. PageCount = 1,
  275. StartPage = 1
  276. };
  277. await client.GetAllUserReceived("fake", options);
  278. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/received_events"), options);
  279. }
  280. [Fact]
  281. public async Task EnsuresNonNullArguments()
  282. {
  283. var connection = Substitute.For<IApiConnection>();
  284. var client = new EventsClient(connection);
  285. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserReceived(null));
  286. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserReceived("fake", null));
  287. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserReceived(""));
  288. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserReceived("", ApiOptions.None));
  289. }
  290. }
  291. public class TheGetUserReceivedPublicMethod
  292. {
  293. [Fact]
  294. public async Task RequestsCorrectUrl()
  295. {
  296. var connection = Substitute.For<IApiConnection>();
  297. var client = new EventsClient(connection);
  298. await client.GetAllUserReceivedPublic("fake");
  299. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/received_events/public"), Args.ApiOptions);
  300. }
  301. [Fact]
  302. public async Task RequestsCorrectUrlWithApiOptions()
  303. {
  304. var connection = Substitute.For<IApiConnection>();
  305. var client = new EventsClient(connection);
  306. var options = new ApiOptions
  307. {
  308. PageSize = 1,
  309. PageCount = 1,
  310. StartPage = 1
  311. };
  312. await client.GetAllUserReceivedPublic("fake", options);
  313. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/received_events/public"), options);
  314. }
  315. [Fact]
  316. public async Task EnsuresNonNullArguments()
  317. {
  318. var connection = Substitute.For<IApiConnection>();
  319. var client = new EventsClient(connection);
  320. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserReceivedPublic(null));
  321. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserReceivedPublic("fake", null));
  322. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserReceivedPublic(""));
  323. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserReceivedPublic("", ApiOptions.None));
  324. }
  325. }
  326. public class TheGetUserPerformedMethod
  327. {
  328. [Fact]
  329. public async Task RequestsCorrectUrl()
  330. {
  331. var connection = Substitute.For<IApiConnection>();
  332. var client = new EventsClient(connection);
  333. await client.GetAllUserPerformed("fake");
  334. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/events"), Args.ApiOptions);
  335. }
  336. [Fact]
  337. public async Task RequestsCorrectUrlWithApiOptions()
  338. {
  339. var connection = Substitute.For<IApiConnection>();
  340. var client = new EventsClient(connection);
  341. var options = new ApiOptions
  342. {
  343. PageSize = 1,
  344. PageCount = 1,
  345. StartPage = 1
  346. };
  347. await client.GetAllUserPerformed("fake", options);
  348. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/events"), options);
  349. }
  350. [Fact]
  351. public async Task EnsuresNonNullArguments()
  352. {
  353. var connection = Substitute.For<IApiConnection>();
  354. var client = new EventsClient(connection);
  355. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserPerformed(null));
  356. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserPerformed("fake", null));
  357. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserPerformed(""));
  358. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserPerformed("", ApiOptions.None));
  359. }
  360. }
  361. public class TheGetUserPerformedPublicMethod
  362. {
  363. [Fact]
  364. public async Task RequestsCorrectUrl()
  365. {
  366. var connection = Substitute.For<IApiConnection>();
  367. var client = new EventsClient(connection);
  368. await client.GetAllUserPerformedPublic("fake");
  369. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/events/public"), Args.ApiOptions);
  370. }
  371. [Fact]
  372. public async Task RequestsCorrectUrlWithApiOptions()
  373. {
  374. var connection = Substitute.For<IApiConnection>();
  375. var client = new EventsClient(connection);
  376. var options = new ApiOptions
  377. {
  378. PageSize = 1,
  379. PageCount = 1,
  380. StartPage = 1
  381. };
  382. await client.GetAllUserPerformedPublic("fake", options);
  383. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/events/public"), options);
  384. }
  385. [Fact]
  386. public async Task EnsuresNonNullArguments()
  387. {
  388. var connection = Substitute.For<IApiConnection>();
  389. var client = new EventsClient(connection);
  390. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserPerformedPublic(null));
  391. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllUserPerformedPublic("fake", null));
  392. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserPerformedPublic(""));
  393. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllUserPerformedPublic("", ApiOptions.None));
  394. }
  395. }
  396. public class TheGetForAnOrganizationMethod
  397. {
  398. [Fact]
  399. public async Task RequestsCorrectUrl()
  400. {
  401. var connection = Substitute.For<IApiConnection>();
  402. var client = new EventsClient(connection);
  403. await client.GetAllForAnOrganization("fake", "org");
  404. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/events/orgs/org"), Args.ApiOptions);
  405. }
  406. [Fact]
  407. public async Task RequestsCorrectUrlWithApiOptions()
  408. {
  409. var connection = Substitute.For<IApiConnection>();
  410. var client = new EventsClient(connection);
  411. var options = new ApiOptions
  412. {
  413. PageSize = 1,
  414. PageCount = 1,
  415. StartPage = 1
  416. };
  417. await client.GetAllForAnOrganization("fake", "org", options);
  418. connection.Received().GetAll<Activity>(Arg.Is<Uri>(u => u.ToString() == "users/fake/events/orgs/org"), options);
  419. }
  420. [Fact]
  421. public async Task EnsuresNonNullArguments()
  422. {
  423. var connection = Substitute.For<IApiConnection>();
  424. var client = new EventsClient(connection);
  425. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForAnOrganization(null, "org"));
  426. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForAnOrganization("fake", null));
  427. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForAnOrganization(null, "org", ApiOptions.None));
  428. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForAnOrganization("fake", null, ApiOptions.None));
  429. await Assert.ThrowsAsync<ArgumentNullException>(() => client.GetAllForAnOrganization("fake", "org", null));
  430. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForAnOrganization("", "org"));
  431. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForAnOrganization("fake", ""));
  432. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForAnOrganization("fake", "", ApiOptions.None));
  433. await Assert.ThrowsAsync<ArgumentException>(() => client.GetAllForAnOrganization("", "org", ApiOptions.None));
  434. }
  435. }
  436. private readonly Dictionary<string, Type> _activityTypes = new Dictionary<string, Type>
  437. {
  438. {"CommitCommentEvent", typeof(CommitCommentPayload)},
  439. {"ForkEvent", typeof(ForkEventPayload)},
  440. {"IssueCommentEvent", typeof(IssueCommentPayload)},
  441. {"IssuesEvent", typeof(IssueEventPayload)},
  442. {"PullRequestEvent", typeof(PullRequestEventPayload)},
  443. {"PullRequestReviewCommentEvent", typeof(PullRequestCommentPayload)},
  444. {"PushEvent", typeof(PushEventPayload)},
  445. {"WatchEvent", typeof(StarredEventPayload)},
  446. {"unknown", typeof(ActivityPayload)}
  447. };
  448. [Fact]
  449. public async Task DeserializesPayloadToCorrectType()
  450. {
  451. _activityTypes.ToList().ForEach(async kvp =>
  452. {
  453. var jsonObj = new JsonObject {{ "type", kvp.Key }, {"payload", new
  454. {
  455. repository = new
  456. {
  457. id = 1337
  458. },
  459. sender = new
  460. {
  461. id = 1337
  462. }
  463. }}};
  464. var client = GetTestingEventsClient(jsonObj);
  465. var activities = await client.GetAll();
  466. Assert.Equal(1, activities.Count);
  467. var activity = activities.FirstOrDefault();
  468. Assert.Equal(kvp.Value, activity.Payload.GetType());
  469. Assert.NotNull(activity.Payload.Repository);
  470. Assert.NotNull(activity.Payload.Sender);
  471. Assert.Equal(1337, activity.Payload.Repository.Id);
  472. Assert.Equal(1337, activity.Payload.Sender.Id);
  473. });
  474. }
  475. [Fact]
  476. public async Task DeserializesCommitCommentEventCorrectly()
  477. {
  478. var jsonObj = new JsonObject
  479. {
  480. { "type", "CommitCommentEvent" },
  481. {
  482. "payload", new
  483. {
  484. comment = new
  485. {
  486. id = 1337
  487. }
  488. }
  489. }
  490. };
  491. var client = GetTestingEventsClient(jsonObj);
  492. var activities = await client.GetAll();
  493. Assert.Equal(1, activities.Count);
  494. var payload = activities.FirstOrDefault().Payload as CommitCommentPayload;
  495. Assert.Equal(1337, payload.Comment.Id);
  496. }
  497. [Fact]
  498. public async Task DeserializesForkEventCorrectly()
  499. {
  500. var jsonObj = new JsonObject
  501. {
  502. { "type", "ForkEvent" },
  503. {
  504. "payload", new
  505. {
  506. forkee = new
  507. {
  508. id = 1337
  509. }
  510. }
  511. }
  512. };
  513. var client = GetTestingEventsClient(jsonObj);
  514. var activities = await client.GetAll();
  515. Assert.Equal(1, activities.Count);
  516. var payload = activities.FirstOrDefault().Payload as ForkEventPayload;
  517. Assert.Equal(1337, payload.Forkee.Id);
  518. }
  519. [Fact]
  520. public async Task DeserializesIssueCommentEventCorrectly()
  521. {
  522. var jsonObj = new JsonObject
  523. {
  524. { "type", "IssueCommentEvent" },
  525. {
  526. "payload", new
  527. {
  528. action = "created",
  529. issue = new
  530. {
  531. number = 1337
  532. },
  533. comment = new
  534. {
  535. id = 1337
  536. }
  537. }
  538. }
  539. };
  540. var client = GetTestingEventsClient(jsonObj);
  541. var activities = await client.GetAll();
  542. Assert.Equal(1, activities.Count);
  543. var payload = activities.FirstOrDefault().Payload as IssueCommentPayload;
  544. Assert.Equal("created", payload.Action);
  545. Assert.Equal(1337, payload.Comment.Id);
  546. Assert.Equal(1337, payload.Issue.Number);
  547. }
  548. [Fact]
  549. public async Task DeserializesIssueEventCorrectly()
  550. {
  551. var jsonObj = new JsonObject
  552. {
  553. { "type", "IssuesEvent" },
  554. {
  555. "payload", new
  556. {
  557. action = "created",
  558. issue = new
  559. {
  560. number = 1337,
  561. assignee = new
  562. {
  563. id = 1337
  564. },
  565. labels = new[]
  566. {
  567. new { name = "bug"}
  568. }
  569. }
  570. }
  571. }
  572. };
  573. var client = GetTestingEventsClient(jsonObj);
  574. var activities = await client.GetAll();
  575. Assert.Equal(1, activities.Count);
  576. var payload = activities.FirstOrDefault().Payload as IssueEventPayload;
  577. Assert.Equal("created", payload.Action);
  578. Assert.Equal(1337, payload.Issue.Number);
  579. Assert.Equal(1337, payload.Issue.Assignee.Id);
  580. Assert.Equal("bug", payload.Issue.Labels.First().Name);
  581. }
  582. [Fact]
  583. public async Task DeserializesPullRequestEventCorrectly()
  584. {
  585. var jsonObj = new JsonObject
  586. {
  587. { "type", "PullRequestEvent" },
  588. {
  589. "payload", new
  590. {
  591. action = "assigned",
  592. number = 1337,
  593. pull_request = new
  594. {
  595. title = "PR Title"
  596. }
  597. }
  598. }
  599. };
  600. var client = GetTestingEventsClient(jsonObj);
  601. var activities = await client.GetAll();
  602. Assert.Equal(1, activities.Count);
  603. var payload = activities.FirstOrDefault().Payload as PullRequestEventPayload;
  604. Assert.Equal("assigned", payload.Action);
  605. Assert.Equal(1337, payload.Number);
  606. Assert.Equal("PR Title", payload.PullRequest.Title);
  607. }
  608. [Fact]
  609. public async Task DeserializesPullRequestCommentEventCorrectly()
  610. {
  611. var jsonObj = new JsonObject
  612. {
  613. { "type", "PullRequestReviewCommentEvent" },
  614. {
  615. "payload", new
  616. {
  617. action = "assigned",
  618. pull_request = new
  619. {
  620. title = "PR Title"
  621. },
  622. comment = new
  623. {
  624. id = 1337
  625. }
  626. }
  627. }
  628. };
  629. var client = GetTestingEventsClient(jsonObj);
  630. var activities = await client.GetAll();
  631. Assert.Equal(1, activities.Count);
  632. var payload = activities.FirstOrDefault().Payload as PullRequestCommentPayload;
  633. Assert.Equal("assigned", payload.Action);
  634. Assert.Equal("PR Title", payload.PullRequest.Title);
  635. Assert.Equal(1337, payload.Comment.Id);
  636. }
  637. [Fact]
  638. public async Task DeserializesPushEventCorrectly()
  639. {
  640. var jsonObj = new JsonObject
  641. {
  642. { "type", "PushEvent" },
  643. {
  644. "payload", new
  645. {
  646. head = "head",
  647. @ref = "ref",
  648. size = 1337,
  649. commits = new []
  650. {
  651. new
  652. {
  653. message = "message"
  654. }
  655. }
  656. }
  657. }
  658. };
  659. var client = GetTestingEventsClient(jsonObj);
  660. var activities = await client.GetAll();
  661. Assert.Equal(1, activities.Count);
  662. var payload = activities.FirstOrDefault().Payload as PushEventPayload;
  663. Assert.Equal("head", payload.Head);
  664. Assert.Equal("ref", payload.Ref);
  665. Assert.Equal(1337, payload.Size);
  666. Assert.NotNull(payload.Commits);
  667. Assert.Equal(1, payload.Commits.Count);
  668. Assert.Equal("message", payload.Commits.FirstOrDefault().Message);
  669. }
  670. [Fact]
  671. public async Task DeserializesStarredEventCorrectly()
  672. {
  673. var jsonObj = new JsonObject
  674. {
  675. { "type", "WatchEvent" },
  676. {
  677. "payload", new
  678. {
  679. action = "started"
  680. }
  681. }
  682. };
  683. var client = GetTestingEventsClient(jsonObj);
  684. var activities = await client.GetAll();
  685. Assert.Equal(1, activities.Count);
  686. var payload = activities.FirstOrDefault().Payload as StarredEventPayload;
  687. Assert.Equal("started", payload.Action);
  688. }
  689. private EventsClient GetTestingEventsClient(JsonObject response)
  690. {
  691. var responseString = response.ToString();
  692. var httpClientMock = Substitute.For<IHttpClient>();
  693. httpClientMock.Send(Arg.Is((IRequest r) => r.Endpoint.ToString().Contains("events")), Arg.Any<CancellationToken>()).Returns(Task.FromResult(
  694. new Response(HttpStatusCode.Accepted, responseString, new Dictionary<string, string>(), "application/json") as IResponse));
  695. return new EventsClient(new ApiConnection(new Connection(new ProductHeaderValue("mock"), httpClientMock)));
  696. }
  697. }
  698. }