PageRenderTime 27ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/Octokit.Tests/Reactive/ObservableReleasesClientTests.cs

https://gitlab.com/WoomyNightClub/GitHub-API-.NET
C# | 543 lines | 420 code | 123 blank | 0 comment | 6 complexity | c095b56f931ab28bef060ea73c425f9d MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using NSubstitute;
  5. using Octokit.Reactive;
  6. using Xunit;
  7. namespace Octokit.Tests.Reactive
  8. {
  9. public class ObservableReleasesClientTests
  10. {
  11. public class TheCtor
  12. {
  13. [Fact]
  14. public void EnsuresNonNullArguments()
  15. {
  16. Assert.Throws<ArgumentNullException>(() => new ObservableReleasesClient(null));
  17. }
  18. }
  19. public class TheGetReleasesMethod
  20. {
  21. [Fact]
  22. public void RequestsTheCorrectUrl()
  23. {
  24. var gitHubClient = Substitute.For<IGitHubClient>();
  25. var client = new ObservableReleasesClient(gitHubClient);
  26. client.GetAll("fake", "repo");
  27. gitHubClient.Connection.Received(1).Get<List<Release>>(
  28. new Uri("repos/fake/repo/releases", UriKind.Relative), Args.EmptyDictionary, null);
  29. }
  30. [Fact]
  31. public void RequestsTheCorrectUrlWithRepositoryId()
  32. {
  33. var gitHubClient = Substitute.For<IGitHubClient>();
  34. var client = new ObservableReleasesClient(gitHubClient);
  35. client.GetAll(1);
  36. gitHubClient.Connection.Received(1).Get<List<Release>>(
  37. new Uri("repositories/1/releases", UriKind.Relative), Args.EmptyDictionary, null);
  38. }
  39. [Fact]
  40. public void RequestsTheCorrectUrlWithApiOptions()
  41. {
  42. var gitHubClient = Substitute.For<IGitHubClient>();
  43. var client = new ObservableReleasesClient(gitHubClient);
  44. var options = new ApiOptions
  45. {
  46. PageCount = 1,
  47. PageSize = 1,
  48. StartPage = 1
  49. };
  50. client.GetAll("fake", "repo", options);
  51. gitHubClient.Connection.Received(1).Get<List<Release>>(
  52. new Uri("repos/fake/repo/releases", UriKind.Relative), Arg.Is<IDictionary<string, string>>(d => d.Count == 2), null);
  53. }
  54. [Fact]
  55. public void RequestsTheCorrectUrlWithRepositoryIdWithApiOptions()
  56. {
  57. var gitHubClient = Substitute.For<IGitHubClient>();
  58. var client = new ObservableReleasesClient(gitHubClient);
  59. var options = new ApiOptions
  60. {
  61. PageCount = 1,
  62. PageSize = 1,
  63. StartPage = 1
  64. };
  65. client.GetAll(1, options);
  66. gitHubClient.Connection.Received(1).Get<List<Release>>(
  67. new Uri("repositories/1/releases", UriKind.Relative), Arg.Is<IDictionary<string, string>>(d => d.Count == 2), null);
  68. }
  69. [Fact]
  70. public void EnsuresNonNullArguments()
  71. {
  72. var releasesClient = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  73. Assert.Throws<ArgumentNullException>(() => releasesClient.GetAll(null, "name"));
  74. Assert.Throws<ArgumentNullException>(() => releasesClient.GetAll("owner", null));
  75. Assert.Throws<ArgumentNullException>(() => releasesClient.GetAll(null, "name", ApiOptions.None));
  76. Assert.Throws<ArgumentNullException>(() => releasesClient.GetAll("owner", null, ApiOptions.None));
  77. Assert.Throws<ArgumentNullException>(() => releasesClient.GetAll("owner", "name", null));
  78. Assert.Throws<ArgumentNullException>(() => releasesClient.GetAll(1, null));
  79. Assert.Throws<ArgumentException>(() => releasesClient.GetAll("", "name"));
  80. Assert.Throws<ArgumentException>(() => releasesClient.GetAll("owner", ""));
  81. Assert.Throws<ArgumentException>(() => releasesClient.GetAll("", "name", ApiOptions.None));
  82. Assert.Throws<ArgumentException>(() => releasesClient.GetAll("owner", "", ApiOptions.None));
  83. }
  84. }
  85. public class TheGetReleaseMethod
  86. {
  87. [Fact]
  88. public void RequestsTheCorrectUrl()
  89. {
  90. var gitHubClient = Substitute.For<IGitHubClient>();
  91. var client = new ObservableReleasesClient(gitHubClient);
  92. client.Get("fake", "repo", 1);
  93. gitHubClient.Repository.Release.Received(1).Get("fake", "repo", 1);
  94. }
  95. [Fact]
  96. public void RequestsTheCorrectUrlWithRepositoryId()
  97. {
  98. var gitHubClient = Substitute.For<IGitHubClient>();
  99. var client = new ObservableReleasesClient(gitHubClient);
  100. client.Get(1, 1);
  101. gitHubClient.Repository.Release.Received(1).Get(1, 1);
  102. }
  103. [Fact]
  104. public void EnsuresNonNullArguments()
  105. {
  106. var releasesClient = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  107. Assert.Throws<ArgumentNullException>(() => releasesClient.Get(null, "name", 1));
  108. Assert.Throws<ArgumentNullException>(() => releasesClient.Get("owner", null, 1));
  109. Assert.Throws<ArgumentException>(() => releasesClient.Get("", "name", 1));
  110. Assert.Throws<ArgumentException>(() => releasesClient.Get("owner", "", 1));
  111. }
  112. }
  113. public class TheGetLatestReleaseMethod
  114. {
  115. [Fact]
  116. public void RequestsTheCorrectUrl()
  117. {
  118. var gitHubClient = Substitute.For<IGitHubClient>();
  119. var client = new ObservableReleasesClient(gitHubClient);
  120. client.GetLatest("fake", "repo");
  121. gitHubClient.Repository.Release.Received(1).GetLatest("fake", "repo");
  122. }
  123. [Fact]
  124. public void RequestsTheCorrectUrlWithRepositoryId()
  125. {
  126. var gitHubClient = Substitute.For<IGitHubClient>();
  127. var client = new ObservableReleasesClient(gitHubClient);
  128. client.GetLatest(1);
  129. gitHubClient.Repository.Release.Received(1).GetLatest(1);
  130. }
  131. [Fact]
  132. public void EnsuresNonNullArguments()
  133. {
  134. var releasesClient = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  135. Assert.Throws<ArgumentNullException>(() => releasesClient.GetLatest(null, "name"));
  136. Assert.Throws<ArgumentNullException>(() => releasesClient.GetLatest("owner", null));
  137. Assert.Throws<ArgumentException>(() => releasesClient.GetLatest("", "name"));
  138. Assert.Throws<ArgumentException>(() => releasesClient.GetLatest("owner", ""));
  139. }
  140. }
  141. public class TheCreateReleaseMethod
  142. {
  143. [Fact]
  144. public void RequestsTheCorrectUrl()
  145. {
  146. var gitHubClient = Substitute.For<IGitHubClient>();
  147. var releasesClient = new ObservableReleasesClient(gitHubClient);
  148. var data = new NewRelease("fake-tag");
  149. releasesClient.Create("fake", "repo", data);
  150. gitHubClient.Repository.Release.Received(1).Create("fake", "repo", data);
  151. }
  152. [Fact]
  153. public void RequestsTheCorrectUrlWithRepositoryId()
  154. {
  155. var gitHubClient = Substitute.For<IGitHubClient>();
  156. var releasesClient = new ObservableReleasesClient(gitHubClient);
  157. var data = new NewRelease("fake-tag");
  158. releasesClient.Create(1, data);
  159. gitHubClient.Repository.Release.Received(1).Create(1, data);
  160. }
  161. [Fact]
  162. public void EnsuresNonNullArguments()
  163. {
  164. var releasesClient = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  165. var data = new NewRelease("fake-tag");
  166. Assert.Throws<ArgumentNullException>(() => new NewRelease(null));
  167. Assert.Throws<ArgumentNullException>(() => releasesClient.Create(null, "name", data));
  168. Assert.Throws<ArgumentNullException>(() => releasesClient.Create("owner", null, data));
  169. Assert.Throws<ArgumentNullException>(() => releasesClient.Create("owner", "name", null));
  170. Assert.Throws<ArgumentNullException>(() => releasesClient.Create(1, null));
  171. Assert.Throws<ArgumentException>(() => releasesClient.Create("", "name", data));
  172. Assert.Throws<ArgumentException>(() => releasesClient.Create("owner", "", data));
  173. }
  174. }
  175. public class TheEditReleaseMethod
  176. {
  177. [Fact]
  178. public void RequestsTheCorrectUrl()
  179. {
  180. var gitHubClient = Substitute.For<IGitHubClient>();
  181. var releasesClient = new ObservableReleasesClient(gitHubClient);
  182. var data = new ReleaseUpdate { TagName = "fake-tag" };
  183. releasesClient.Edit("fake", "repo", 1, data);
  184. gitHubClient.Repository.Release.Received(1).Edit("fake", "repo", 1, data);
  185. }
  186. [Fact]
  187. public void RequestsTheCorrectUrlWithRepositoryId()
  188. {
  189. var gitHubClient = Substitute.For<IGitHubClient>();
  190. var releasesClient = new ObservableReleasesClient(gitHubClient);
  191. var data = new ReleaseUpdate { TagName = "fake-tag" };
  192. releasesClient.Edit(1, 1, data);
  193. gitHubClient.Repository.Release.Received(1).Edit(1, 1, data);
  194. }
  195. [Fact]
  196. public void EnsuresNonNullArguments()
  197. {
  198. var releasesClient = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  199. var update = new ReleaseUpdate { TagName = "tag" };
  200. Assert.Throws<ArgumentNullException>(() => releasesClient.Edit(null, "name", 1, update));
  201. Assert.Throws<ArgumentNullException>(() => releasesClient.Edit("owner", null, 1, update));
  202. Assert.Throws<ArgumentNullException>(() => releasesClient.Edit("owner", "name", 1, null));
  203. Assert.Throws<ArgumentNullException>(() => releasesClient.Edit(1, 1, null));
  204. Assert.Throws<ArgumentException>(() => releasesClient.Edit("", "name", 1, update));
  205. Assert.Throws<ArgumentException>(() => releasesClient.Edit("owner", "", 1, update));
  206. }
  207. }
  208. public class TheDeleteReleaseMethod
  209. {
  210. [Fact]
  211. public void RequestsTheCorrectUrl()
  212. {
  213. var gitHubClient = Substitute.For<IGitHubClient>();
  214. var client = new ObservableReleasesClient(gitHubClient);
  215. client.Delete("fake", "repo", 1);
  216. gitHubClient.Repository.Release.Received(1).Delete("fake", "repo", 1);
  217. }
  218. [Fact]
  219. public void RequestsTheCorrectUrlWithRepositoryId()
  220. {
  221. var gitHubClient = Substitute.For<IGitHubClient>();
  222. var client = new ObservableReleasesClient(gitHubClient);
  223. client.Delete(1, 1);
  224. gitHubClient.Repository.Release.Received(1).Delete(1, 1);
  225. }
  226. [Fact]
  227. public void EnsuresNonNullArguments()
  228. {
  229. var client = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  230. Assert.Throws<ArgumentNullException>(() => client.Delete(null, "name", 1));
  231. Assert.Throws<ArgumentNullException>(() => client.Delete("owner", null, 1));
  232. Assert.Throws<ArgumentException>(() => client.Delete("", "name", 1));
  233. Assert.Throws<ArgumentException>(() => client.Delete("owner", "", 1));
  234. }
  235. }
  236. public class TheGetAssetsMethod
  237. {
  238. [Fact]
  239. public void RequestsTheCorrectUrl()
  240. {
  241. var gitHubClient = Substitute.For<IGitHubClient>();
  242. var client = new ObservableReleasesClient(gitHubClient);
  243. client.GetAllAssets("fake", "repo", 1);
  244. gitHubClient.Connection.Received(1).Get<List<ReleaseAsset>>(
  245. new Uri("repos/fake/repo/releases/1/assets", UriKind.Relative), Args.EmptyDictionary, null);
  246. }
  247. [Fact]
  248. public void RequestsTheCorrectUrlWithRepositoryId()
  249. {
  250. var gitHubClient = Substitute.For<IGitHubClient>();
  251. var client = new ObservableReleasesClient(gitHubClient);
  252. client.GetAllAssets(1, 1);
  253. gitHubClient.Connection.Received(1).Get<List<ReleaseAsset>>(
  254. new Uri("repositories/1/releases/1/assets", UriKind.Relative), Args.EmptyDictionary, null);
  255. }
  256. [Fact]
  257. public void RequestsTheCorrectUrlWithApiOptions()
  258. {
  259. var expectedUrl = string.Format("repos/{0}/{1}/releases/1/assets", "fake", "repo");
  260. var gitHubClient = Substitute.For<IGitHubClient>();
  261. var client = new ObservableReleasesClient(gitHubClient);
  262. var options = new ApiOptions
  263. {
  264. StartPage = 1,
  265. PageCount = 1,
  266. PageSize = 1
  267. };
  268. client.GetAllAssets("fake", "repo", 1, options);
  269. gitHubClient.Connection.Received(1).Get<List<ReleaseAsset>>(
  270. Arg.Is<Uri>(u => u.ToString() == expectedUrl),
  271. Arg.Is<IDictionary<string, string>>(dictionary => dictionary.Count == 2),
  272. null);
  273. }
  274. [Fact]
  275. public void RequestsTheCorrectUrlWithRepositoryIdWithApiOptions()
  276. {
  277. var expectedUrl = "repositories/1/releases/1/assets";
  278. var gitHubClient = Substitute.For<IGitHubClient>();
  279. var client = new ObservableReleasesClient(gitHubClient);
  280. var options = new ApiOptions
  281. {
  282. StartPage = 1,
  283. PageCount = 1,
  284. PageSize = 1
  285. };
  286. client.GetAllAssets(1, 1, options);
  287. gitHubClient.Connection.Received(1).Get<List<ReleaseAsset>>(
  288. Arg.Is<Uri>(u => u.ToString() == expectedUrl),
  289. Arg.Is<IDictionary<string, string>>(dictionary => dictionary.Count == 2),
  290. null);
  291. }
  292. [Fact]
  293. public void EnsuresNonNullArguments()
  294. {
  295. var client = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  296. Assert.Throws<ArgumentNullException>(() => client.GetAllAssets(null, "name", 1));
  297. Assert.Throws<ArgumentNullException>(() => client.GetAllAssets("owner", null, 1));
  298. Assert.Throws<ArgumentNullException>(() => client.GetAllAssets(null, "name", 1, ApiOptions.None));
  299. Assert.Throws<ArgumentNullException>(() => client.GetAllAssets("owner", null, 1, ApiOptions.None));
  300. Assert.Throws<ArgumentNullException>(() => client.GetAllAssets("owner", "name", 1, null));
  301. Assert.Throws<ArgumentNullException>(() => client.GetAllAssets(1, 1, null));
  302. Assert.Throws<ArgumentException>(() => client.GetAllAssets("", "name", 1));
  303. Assert.Throws<ArgumentException>(() => client.GetAllAssets("owner", "", 1));
  304. }
  305. }
  306. public class TheUploadReleaseAssetMethod
  307. {
  308. [Fact]
  309. public void RequestsTheCorrectUrl()
  310. {
  311. var gitHubClient = Substitute.For<IGitHubClient>();
  312. var releasesClient = new ObservableReleasesClient(gitHubClient);
  313. var release = new Release("https://uploads.test.dev/does/not/matter/releases/1/assets{?name}");
  314. var rawData = Substitute.For<Stream>();
  315. var upload = new ReleaseAssetUpload("example.zip", "application/zip", rawData, null);
  316. releasesClient.UploadAsset(release, upload);
  317. gitHubClient.Repository.Release.Received(1).UploadAsset(release, upload);
  318. }
  319. [Fact]
  320. public void EnsuresArgumentsNotNull()
  321. {
  322. var releasesClient = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  323. var release = new Release("https://uploads.github.com/anything");
  324. var uploadData = new ReleaseAssetUpload("good", "good/good", Stream.Null, null);
  325. Assert.Throws<ArgumentNullException>(() => releasesClient.UploadAsset(null, uploadData));
  326. Assert.Throws<ArgumentNullException>(() => releasesClient.UploadAsset(release, null));
  327. }
  328. }
  329. public class TheGetAssetMethod
  330. {
  331. [Fact]
  332. public void RequestsTheCorrectUrl()
  333. {
  334. var gitHubClient = Substitute.For<IGitHubClient>();
  335. var client = new ObservableReleasesClient(gitHubClient);
  336. client.GetAsset("fake", "repo", 1);
  337. gitHubClient.Repository.Release.Received(1).GetAsset("fake", "repo", 1);
  338. }
  339. [Fact]
  340. public void RequestsTheCorrectUrlWithRepositoryId()
  341. {
  342. var gitHubClient = Substitute.For<IGitHubClient>();
  343. var client = new ObservableReleasesClient(gitHubClient);
  344. client.GetAsset(1, 1);
  345. gitHubClient.Repository.Release.Received(1).GetAsset(1, 1);
  346. }
  347. [Fact]
  348. public void EnsuresNonNullArguments()
  349. {
  350. var client = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  351. Assert.Throws<ArgumentNullException>(() => client.GetAsset(null, "name", 1));
  352. Assert.Throws<ArgumentNullException>(() => client.GetAsset("owner", null, 1));
  353. Assert.Throws<ArgumentException>(() => client.GetAsset("", "name", 1));
  354. Assert.Throws<ArgumentException>(() => client.GetAsset("owner", "", 1));
  355. }
  356. }
  357. public class TheEditAssetMethod
  358. {
  359. [Fact]
  360. public void RequestsTheCorrectUrl()
  361. {
  362. var gitHubClient = Substitute.For<IGitHubClient>();
  363. var client = new ObservableReleasesClient(gitHubClient);
  364. var data = new ReleaseAssetUpdate("asset");
  365. client.EditAsset("fake", "repo", 1, data);
  366. gitHubClient.Repository.Release.Received(1).EditAsset("fake", "repo", 1, data);
  367. }
  368. [Fact]
  369. public void RequestsTheCorrectUrlWithRepositoryId()
  370. {
  371. var gitHubClient = Substitute.For<IGitHubClient>();
  372. var client = new ObservableReleasesClient(gitHubClient);
  373. var data = new ReleaseAssetUpdate("asset");
  374. client.EditAsset(1, 1, data);
  375. gitHubClient.Repository.Release.Received(1).EditAsset(1, 1, data);
  376. }
  377. [Fact]
  378. public void EnsuresNonNullArguments()
  379. {
  380. var client = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  381. Assert.Throws<ArgumentNullException>(() => client.EditAsset(null, "name", 1, new ReleaseAssetUpdate("name")));
  382. Assert.Throws<ArgumentNullException>(() => client.EditAsset("owner", null, 1, new ReleaseAssetUpdate("name")));
  383. Assert.Throws<ArgumentNullException>(() => client.EditAsset("owner", "name", 1, null));
  384. Assert.Throws<ArgumentNullException>(() => client.EditAsset(1, 1, null));
  385. Assert.Throws<ArgumentException>(() => client.EditAsset("", "name", 1, new ReleaseAssetUpdate("name")));
  386. Assert.Throws<ArgumentException>(() => client.EditAsset("owner", "", 1, new ReleaseAssetUpdate("name")));
  387. }
  388. }
  389. public class TheDeleteAssetMethod
  390. {
  391. [Fact]
  392. public void RequestsTheCorrectUrl()
  393. {
  394. var gitHubClient = Substitute.For<IGitHubClient>();
  395. var client = new ObservableReleasesClient(gitHubClient);
  396. client.DeleteAsset("fake", "repo", 1);
  397. gitHubClient.Connection.Delete(
  398. new Uri("repos/fake/repo/releases/assets/1", UriKind.Relative));
  399. }
  400. [Fact]
  401. public void RequestsTheCorrectUrlWithRepositoryId()
  402. {
  403. var gitHubClient = Substitute.For<IGitHubClient>();
  404. var client = new ObservableReleasesClient(gitHubClient);
  405. client.DeleteAsset(1, 1);
  406. gitHubClient.Connection.Delete(
  407. new Uri("repositories/1/releases/assets/1", UriKind.Relative));
  408. }
  409. [Fact]
  410. public void EnsuresNonNullArguments()
  411. {
  412. var client = new ObservableReleasesClient(Substitute.For<IGitHubClient>());
  413. Assert.Throws<ArgumentNullException>(() => client.DeleteAsset(null, "name", 1));
  414. Assert.Throws<ArgumentNullException>(() => client.DeleteAsset("owner", null, 1));
  415. Assert.Throws<ArgumentException>(() => client.DeleteAsset("", "name", 1));
  416. Assert.Throws<ArgumentException>(() => client.DeleteAsset("owner", "", 1));
  417. }
  418. }
  419. }
  420. }