PageRenderTime 41ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/Octokit.Tests.Integration/Clients/ReleasesClientTests.cs

https://gitlab.com/WoomyNightClub/GitHub-API-.NET
C# | 857 lines | 646 code | 209 blank | 2 comment | 4 complexity | cbafe53d98b628eac26743049ed062ee MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.IO.Compression;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Octokit;
  9. using Octokit.Tests.Integration;
  10. using Octokit.Tests.Integration.Helpers;
  11. using Xunit;
  12. public class ReleasesClientTests
  13. {
  14. public class TheCtor
  15. {
  16. [Fact]
  17. public void EnsuresNonNullArguments()
  18. {
  19. Assert.Throws<ArgumentNullException>(
  20. () => new ReleasesClient(null));
  21. }
  22. }
  23. public class TheCreateReleasesMethod : IDisposable
  24. {
  25. private readonly IReleasesClient _releaseClient;
  26. private readonly RepositoryContext _context;
  27. public TheCreateReleasesMethod()
  28. {
  29. var github = Helper.GetAuthenticatedClient();
  30. _releaseClient = github.Repository.Release;
  31. _context = github.CreateRepositoryContext("public-repo").Result;
  32. }
  33. [Fact]
  34. public async Task SendsCreateToCorrectUrl()
  35. {
  36. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  37. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  38. Assert.NotNull(release);
  39. }
  40. [Fact]
  41. public async Task SendsCreateToCorrectUrlWithRepositoryId()
  42. {
  43. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  44. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  45. Assert.NotNull(release);
  46. }
  47. public void Dispose()
  48. {
  49. _context.Dispose();
  50. }
  51. }
  52. public class TheGetReleasesMethod : IDisposable
  53. {
  54. private readonly IReleasesClient _releaseClient;
  55. private readonly RepositoryContext _context;
  56. public TheGetReleasesMethod()
  57. {
  58. var github = Helper.GetAuthenticatedClient();
  59. _releaseClient = github.Repository.Release;
  60. _context = github.CreateRepositoryContext("public-repo").Result;
  61. }
  62. [IntegrationTest]
  63. public async Task ReturnsAuthor()
  64. {
  65. var release = await _releaseClient.Get("git-tfs", "git-tfs", 2276624);
  66. Assert.NotNull(release);
  67. Assert.NotNull(release.Author);
  68. Assert.Equal("spraints", release.Author.Login);
  69. }
  70. [IntegrationTest]
  71. public async Task ReturnsAuthorWithRepositoryId()
  72. {
  73. var release = await _releaseClient.Get(252774, 2276624);
  74. Assert.NotNull(release);
  75. Assert.NotNull(release.Author);
  76. Assert.Equal("spraints", release.Author.Login);
  77. }
  78. [IntegrationTest]
  79. public async Task ReturnsAssets()
  80. {
  81. var release = await _releaseClient.Get("git-tfs", "git-tfs", 2276624);
  82. Assert.NotNull(release);
  83. Assert.Equal(1, release.Assets.Count);
  84. Assert.Equal("GitTfs-0.24.1.zip", release.Assets.First().Name);
  85. Assert.Equal("https://api.github.com/repos/git-tfs/git-tfs/tarball/v0.24.1", release.TarballUrl);
  86. Assert.Equal("https://api.github.com/repos/git-tfs/git-tfs/zipball/v0.24.1", release.ZipballUrl);
  87. }
  88. [IntegrationTest]
  89. public async Task ReturnsAssetsWithRepositoryId()
  90. {
  91. var release = await _releaseClient.Get(252774, 2276624);
  92. Assert.NotNull(release);
  93. Assert.Equal(1, release.Assets.Count);
  94. Assert.Equal("GitTfs-0.24.1.zip", release.Assets.First().Name);
  95. Assert.Equal("https://api.github.com/repos/git-tfs/git-tfs/tarball/v0.24.1", release.TarballUrl);
  96. Assert.Equal("https://api.github.com/repos/git-tfs/git-tfs/zipball/v0.24.1", release.ZipballUrl);
  97. }
  98. [IntegrationTest]
  99. public async Task ReturnsReleases()
  100. {
  101. var releases = await _releaseClient.GetAll("git-tfs", "git-tfs");
  102. Assert.True(releases.Count > 5);
  103. Assert.True(releases.Any(release => release.TagName == "v0.18.0"));
  104. }
  105. [IntegrationTest]
  106. public async Task ReturnsReleasesWithRepositoryId()
  107. {
  108. var releases = await _releaseClient.GetAll(252774);
  109. Assert.True(releases.Count > 5);
  110. Assert.True(releases.Any(release => release.TagName == "v0.18.0"));
  111. }
  112. [IntegrationTest]
  113. public async Task ReturnsReleasesWithNullPublishDate()
  114. {
  115. // create a release without a publish date
  116. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  117. await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  118. var releases = await _releaseClient.GetAll(_context.RepositoryOwner, _context.RepositoryName);
  119. Assert.True(releases.Count == 1);
  120. Assert.False(releases.First().PublishedAt.HasValue);
  121. }
  122. [IntegrationTest]
  123. public async Task ReturnsReleasesWithNullPublishDateWithRepositoryDate()
  124. {
  125. // create a release without a publish date
  126. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  127. await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  128. var releases = await _releaseClient.GetAll(_context.Repository.Id);
  129. Assert.True(releases.Count == 1);
  130. Assert.False(releases.First().PublishedAt.HasValue);
  131. }
  132. public void Dispose()
  133. {
  134. _context.Dispose();
  135. }
  136. }
  137. public class TheGetAllMethod
  138. {
  139. readonly IReleasesClient _releaseClient;
  140. const string owner = "octokit";
  141. const string name = "octokit.net";
  142. const int repositoryId = 252774;
  143. public TheGetAllMethod()
  144. {
  145. var github = Helper.GetAuthenticatedClient();
  146. _releaseClient = github.Repository.Release;
  147. }
  148. [IntegrationTest]
  149. public async Task ReturnsReleases()
  150. {
  151. var releases = await _releaseClient.GetAll(owner, name);
  152. Assert.NotEmpty(releases);
  153. }
  154. [IntegrationTest]
  155. public async Task ReturnsReleasesWithRepositoryId()
  156. {
  157. var releases = await _releaseClient.GetAll(repositoryId);
  158. Assert.NotEmpty(releases);
  159. }
  160. [IntegrationTest]
  161. public async Task ReturnsCorrectCountOfReleasesWithoutStart()
  162. {
  163. var options = new ApiOptions
  164. {
  165. PageSize = 5,
  166. PageCount = 1
  167. };
  168. var releases = await _releaseClient.GetAll(owner, name, options);
  169. Assert.Equal(5, releases.Count);
  170. }
  171. [IntegrationTest]
  172. public async Task ReturnsCorrectCountOfReleasesWithoutStartWithRepositoryId()
  173. {
  174. var options = new ApiOptions
  175. {
  176. PageSize = 5,
  177. PageCount = 1
  178. };
  179. var releases = await _releaseClient.GetAll(repositoryId, options);
  180. Assert.Equal(5, releases.Count);
  181. }
  182. [IntegrationTest]
  183. public async Task ReturnsCorrectCountOfReleasesWithStart()
  184. {
  185. var options = new ApiOptions
  186. {
  187. PageSize = 5,
  188. PageCount = 1,
  189. StartPage = 2
  190. };
  191. var releases = await _releaseClient.GetAll(owner, name, options);
  192. Assert.Equal(5, releases.Count);
  193. }
  194. [IntegrationTest]
  195. public async Task ReturnsCorrectCountOfReleasesWithStartWithRepositoryId()
  196. {
  197. var options = new ApiOptions
  198. {
  199. PageSize = 5,
  200. PageCount = 1,
  201. StartPage = 2
  202. };
  203. var releases = await _releaseClient.GetAll(repositoryId, options);
  204. Assert.Equal(5, releases.Count);
  205. }
  206. [IntegrationTest]
  207. public async Task ReturnsDistinctResultsBasedOnStartPage()
  208. {
  209. var startOptions = new ApiOptions
  210. {
  211. PageSize = 5,
  212. PageCount = 1
  213. };
  214. var firstPage = await _releaseClient.GetAll(owner, name, startOptions);
  215. var skipStartOptions = new ApiOptions
  216. {
  217. PageSize = 5,
  218. PageCount = 1,
  219. StartPage = 2
  220. };
  221. var secondPage = await _releaseClient.GetAll(owner, name, skipStartOptions);
  222. Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
  223. Assert.NotEqual(firstPage[1].Id, secondPage[1].Id);
  224. Assert.NotEqual(firstPage[2].Id, secondPage[2].Id);
  225. Assert.NotEqual(firstPage[3].Id, secondPage[3].Id);
  226. Assert.NotEqual(firstPage[4].Id, secondPage[4].Id);
  227. }
  228. [IntegrationTest]
  229. public async Task ReturnsDistinctResultsBasedOnStartPageWithRepositoryId()
  230. {
  231. var startOptions = new ApiOptions
  232. {
  233. PageSize = 5,
  234. PageCount = 1
  235. };
  236. var firstPage = await _releaseClient.GetAll(repositoryId, startOptions);
  237. var skipStartOptions = new ApiOptions
  238. {
  239. PageSize = 5,
  240. PageCount = 1,
  241. StartPage = 2
  242. };
  243. var secondPage = await _releaseClient.GetAll(repositoryId, skipStartOptions);
  244. Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
  245. Assert.NotEqual(firstPage[1].Id, secondPage[1].Id);
  246. Assert.NotEqual(firstPage[2].Id, secondPage[2].Id);
  247. Assert.NotEqual(firstPage[3].Id, secondPage[3].Id);
  248. Assert.NotEqual(firstPage[4].Id, secondPage[4].Id);
  249. }
  250. }
  251. public class TheEditMethod : IDisposable
  252. {
  253. private readonly IGitHubClient _github;
  254. private readonly RepositoryContext _context;
  255. private readonly IReleasesClient _releaseClient;
  256. public TheEditMethod()
  257. {
  258. _github = Helper.GetAuthenticatedClient();
  259. _releaseClient = _github.Repository.Release;
  260. _context = _github.CreateRepositoryContext("public-repo").Result;
  261. }
  262. [IntegrationTest]
  263. public async Task CanChangeBodyOfRelease()
  264. {
  265. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  266. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  267. var editRelease = release.ToUpdate();
  268. editRelease.Body = "**This is an updated release";
  269. editRelease.Draft = false;
  270. var updatedRelease = await _releaseClient.Edit(_context.RepositoryOwner, _context.RepositoryName, release.Id, editRelease);
  271. Assert.Equal(release.Id, updatedRelease.Id);
  272. Assert.False(updatedRelease.Draft);
  273. Assert.Equal("**This is an updated release", updatedRelease.Body);
  274. }
  275. [IntegrationTest]
  276. public async Task CanChangeBodyOfReleaseWithRepositoryId()
  277. {
  278. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  279. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  280. var editRelease = release.ToUpdate();
  281. editRelease.Body = "**This is an updated release";
  282. editRelease.Draft = false;
  283. var updatedRelease = await _releaseClient.Edit(_context.Repository.Id, release.Id, editRelease);
  284. Assert.Equal(release.Id, updatedRelease.Id);
  285. Assert.False(updatedRelease.Draft);
  286. Assert.Equal("**This is an updated release", updatedRelease.Body);
  287. }
  288. [IntegrationTest]
  289. public async Task CanChangeCommitIshOfRelease()
  290. {
  291. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  292. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  293. Assert.Equal("master", release.TargetCommitish);
  294. var newHead = await _github.CreateTheWorld(_context.Repository);
  295. var editRelease = release.ToUpdate();
  296. editRelease.Draft = false;
  297. editRelease.TargetCommitish = newHead.Object.Sha;
  298. var updatedRelease = await _releaseClient.Edit(_context.RepositoryOwner, _context.RepositoryName, release.Id, editRelease);
  299. Assert.Equal(release.Id, updatedRelease.Id);
  300. Assert.False(updatedRelease.Draft);
  301. Assert.Equal(newHead.Object.Sha, updatedRelease.TargetCommitish);
  302. }
  303. [IntegrationTest]
  304. public async Task CanChangeCommitIshOfReleaseWithRepositoryId()
  305. {
  306. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  307. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  308. Assert.Equal("master", release.TargetCommitish);
  309. var newHead = await _github.CreateTheWorld(_context.Repository);
  310. var editRelease = release.ToUpdate();
  311. editRelease.Draft = false;
  312. editRelease.TargetCommitish = newHead.Object.Sha;
  313. var updatedRelease = await _releaseClient.Edit(_context.Repository.Id, release.Id, editRelease);
  314. Assert.Equal(release.Id, updatedRelease.Id);
  315. Assert.False(updatedRelease.Draft);
  316. Assert.Equal(newHead.Object.Sha, updatedRelease.TargetCommitish);
  317. }
  318. public void Dispose()
  319. {
  320. _context.Dispose();
  321. }
  322. }
  323. public class TheUploadAssetMethod : IDisposable
  324. {
  325. readonly IGitHubClient _github;
  326. readonly RepositoryContext _context;
  327. readonly IReleasesClient _releaseClient;
  328. const string owner = "octokit";
  329. const string name = "octokit.net";
  330. const int releaseId = 2248679;
  331. const int repositoryId = 7528679;
  332. public TheUploadAssetMethod()
  333. {
  334. _github = Helper.GetAuthenticatedClient();
  335. _releaseClient = _github.Repository.Release;
  336. _context = _github.CreateRepositoryContext("public-repo").Result;
  337. }
  338. [IntegrationTest]
  339. public async Task CanUploadAndRetrieveAnAsset()
  340. {
  341. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  342. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  343. var stream = Helper.LoadFixture("hello-world.txt");
  344. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  345. var result = await _releaseClient.UploadAsset(release, newAsset);
  346. Assert.True(result.Id > 0);
  347. var assets = await _releaseClient.GetAllAssets(_context.RepositoryOwner, _context.RepositoryName, release.Id);
  348. Assert.Equal(1, assets.Count);
  349. var asset = assets[0];
  350. Assert.Equal(result.Id, asset.Id);
  351. Assert.NotNull(asset.Url);
  352. Assert.NotNull(asset.BrowserDownloadUrl);
  353. }
  354. [IntegrationTest]
  355. public async Task CanUploadAndRetrieveAnAssetWithRepositoryId()
  356. {
  357. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  358. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  359. var stream = Helper.LoadFixture("hello-world.txt");
  360. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  361. var result = await _releaseClient.UploadAsset(release, newAsset);
  362. Assert.True(result.Id > 0);
  363. var assets = await _releaseClient.GetAllAssets(_context.Repository.Id, release.Id);
  364. Assert.Equal(1, assets.Count);
  365. var asset = assets[0];
  366. Assert.Equal(result.Id, asset.Id);
  367. Assert.NotNull(asset.Url);
  368. Assert.NotNull(asset.BrowserDownloadUrl);
  369. }
  370. [IntegrationTest]
  371. public async Task CanEditAnAssetLabel()
  372. {
  373. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  374. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  375. var stream = Helper.LoadFixture("hello-world.txt");
  376. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  377. var result = await _releaseClient.UploadAsset(release, newAsset);
  378. var asset = await _releaseClient.GetAsset(_context.RepositoryOwner, _context.RepositoryName, result.Id);
  379. var updateAsset = asset.ToUpdate();
  380. updateAsset.Label = "some other thing";
  381. var updatedAsset = await _releaseClient.EditAsset(_context.RepositoryOwner, _context.RepositoryName, result.Id, updateAsset);
  382. Assert.Equal("some other thing", updatedAsset.Label);
  383. }
  384. [IntegrationTest]
  385. public async Task CanEditAnAssetLabelWithRepositoryId()
  386. {
  387. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  388. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  389. var stream = Helper.LoadFixture("hello-world.txt");
  390. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  391. var result = await _releaseClient.UploadAsset(release, newAsset);
  392. var asset = await _releaseClient.GetAsset(_context.Repository.Id, result.Id);
  393. var updateAsset = asset.ToUpdate();
  394. updateAsset.Label = "some other thing";
  395. var updatedAsset = await _releaseClient.EditAsset(_context.Repository.Id, result.Id, updateAsset);
  396. Assert.Equal("some other thing", updatedAsset.Label);
  397. }
  398. [IntegrationTest]
  399. public async Task CanDownloadAnAsset()
  400. {
  401. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  402. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  403. var stream = Helper.LoadFixture("hello-world.txt");
  404. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  405. var result = await _releaseClient.UploadAsset(release, newAsset);
  406. Assert.True(result.Id > 0);
  407. var asset = await _releaseClient.GetAsset(_context.RepositoryOwner, _context.RepositoryName, result.Id);
  408. Assert.Equal(result.Id, asset.Id);
  409. var response = await _github.Connection.Get<object>(new Uri(asset.Url), new Dictionary<string, string>(), "application/octet-stream");
  410. Assert.Contains("This is a plain text file.", Encoding.ASCII.GetString((byte[])response.Body));
  411. }
  412. [IntegrationTest]
  413. public async Task CanDownloadAnAssetWithRepositoryId()
  414. {
  415. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  416. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  417. var stream = Helper.LoadFixture("hello-world.txt");
  418. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  419. var result = await _releaseClient.UploadAsset(release, newAsset);
  420. Assert.True(result.Id > 0);
  421. var asset = await _releaseClient.GetAsset(_context.Repository.Id, result.Id);
  422. Assert.Equal(result.Id, asset.Id);
  423. var response = await _github.Connection.Get<object>(new Uri(asset.Url), new Dictionary<string, string>(), "application/octet-stream");
  424. Assert.Contains("This is a plain text file.", Encoding.ASCII.GetString((byte[])response.Body));
  425. }
  426. [IntegrationTest]
  427. public async Task CanDownloadBinaryAsset()
  428. {
  429. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  430. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  431. var stream = Helper.LoadFixture("hello-world.zip");
  432. var newAsset = new ReleaseAssetUpload("hello-world.zip"
  433. , "application/octet-stream"
  434. , stream
  435. , null);
  436. var result = await _releaseClient.UploadAsset(release, newAsset);
  437. Assert.True(result.Id > 0);
  438. var asset = await _releaseClient.GetAsset(_context.RepositoryOwner, _context.RepositoryName, result.Id);
  439. Assert.Equal(result.Id, asset.Id);
  440. var response = await _github.Connection.Get<object>(new Uri(asset.Url), new Dictionary<string, string>(), "application/octet-stream");
  441. string textContent;
  442. using (var zipstream = new MemoryStream((byte[])response.Body))
  443. using (var archive = new ZipArchive(zipstream))
  444. {
  445. var entry = archive.Entries[0];
  446. var data = new byte[entry.Length];
  447. await entry.Open().ReadAsync(data, 0, data.Length);
  448. textContent = Encoding.ASCII.GetString(data);
  449. }
  450. Assert.Contains("This is a plain text file.", textContent);
  451. }
  452. [IntegrationTest]
  453. public async Task ReturnsCorrectCountOfReleasesWithoutStart()
  454. {
  455. var options = new ApiOptions
  456. {
  457. PageSize = 2,
  458. PageCount = 1
  459. };
  460. var releases = await _releaseClient.GetAllAssets(owner, name, releaseId, options);
  461. Assert.Equal(2, releases.Count);
  462. }
  463. [IntegrationTest]
  464. public async Task ReturnsCorrectCountOfReleasesWithoutStartWithRepositoryId()
  465. {
  466. var options = new ApiOptions
  467. {
  468. PageSize = 2,
  469. PageCount = 1
  470. };
  471. var releases = await _releaseClient.GetAllAssets(repositoryId, releaseId, options);
  472. Assert.Equal(2, releases.Count);
  473. }
  474. [IntegrationTest]
  475. public async Task ReturnsCorrectCountOfReleasesWithStart()
  476. {
  477. var options = new ApiOptions
  478. {
  479. PageSize = 1,
  480. PageCount = 1,
  481. StartPage = 2
  482. };
  483. var assets = await _releaseClient.GetAllAssets(owner, name, releaseId, options);
  484. Assert.Equal(1, assets.Count);
  485. }
  486. [IntegrationTest]
  487. public async Task ReturnsCorrectCountOfReleasesWithStartWithRepositoryId()
  488. {
  489. var options = new ApiOptions
  490. {
  491. PageSize = 1,
  492. PageCount = 1,
  493. StartPage = 2
  494. };
  495. var assets = await _releaseClient.GetAllAssets(repositoryId, releaseId, options);
  496. Assert.Equal(1, assets.Count);
  497. }
  498. [IntegrationTest]
  499. public async Task ReturnsDistinctResultsBasedOnStartPage()
  500. {
  501. var startOptions = new ApiOptions
  502. {
  503. PageSize = 1,
  504. PageCount = 1
  505. };
  506. var firstPage = await _releaseClient.GetAllAssets(owner, name, releaseId, startOptions);
  507. var skipStartOptions = new ApiOptions
  508. {
  509. PageSize = 1,
  510. PageCount = 1,
  511. StartPage = 2
  512. };
  513. var secondPage = await _releaseClient.GetAllAssets(owner, name, releaseId, skipStartOptions);
  514. Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
  515. }
  516. [IntegrationTest]
  517. public async Task ReturnsDistinctResultsBasedOnStartPageWithRepositoryId()
  518. {
  519. var startOptions = new ApiOptions
  520. {
  521. PageSize = 1,
  522. PageCount = 1
  523. };
  524. var firstPage = await _releaseClient.GetAllAssets(repositoryId, releaseId, startOptions);
  525. var skipStartOptions = new ApiOptions
  526. {
  527. PageSize = 1,
  528. PageCount = 1,
  529. StartPage = 2
  530. };
  531. var secondPage = await _releaseClient.GetAllAssets(repositoryId, releaseId, skipStartOptions);
  532. Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
  533. }
  534. public void Dispose()
  535. {
  536. _context.Dispose();
  537. }
  538. }
  539. public class TheGetLatestReleaseMethod
  540. {
  541. private readonly IReleasesClient _releaseClient;
  542. private readonly IGitHubClient _client;
  543. public TheGetLatestReleaseMethod()
  544. {
  545. _client = Helper.GetAuthenticatedClient();
  546. _releaseClient = _client.Repository.Release;
  547. }
  548. [IntegrationTest]
  549. public async Task ReturnsLatestRelease()
  550. {
  551. var lastReleaseFromGetAll = (await _releaseClient.GetAll("octokit", "octokit.net")).OrderBy(r => r.CreatedAt).Last();
  552. var lastRelease = await _releaseClient.GetLatest("octokit", "octokit.net");
  553. Assert.Equal(lastReleaseFromGetAll.Id, lastRelease.Id);
  554. }
  555. [IntegrationTest]
  556. public async Task ReturnsLatestReleaseWithRepositoryId()
  557. {
  558. var lastReleaseFromGetAll = (await _releaseClient.GetAll(252774)).OrderBy(r => r.CreatedAt).Last();
  559. var lastRelease = await _releaseClient.GetLatest(252774);
  560. Assert.Equal(lastReleaseFromGetAll.Id, lastRelease.Id);
  561. }
  562. [IntegrationTest]
  563. public async Task NoReleaseOnRepo()
  564. {
  565. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  566. await _client.Repository.Create(new NewRepository(repoName));
  567. await Assert.ThrowsAsync<NotFoundException>(() => _releaseClient.GetLatest(Helper.UserName, repoName));
  568. await _client.Repository.Delete(Helper.UserName, repoName);
  569. }
  570. [IntegrationTest]
  571. public async Task NoReleaseOnRepoWithRepositoryId()
  572. {
  573. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  574. var repository = await _client.Repository.Create(new NewRepository(repoName));
  575. await Assert.ThrowsAsync<NotFoundException>(() => _releaseClient.GetLatest(repository.Id));
  576. await _client.Repository.Delete(Helper.UserName, repoName);
  577. }
  578. }
  579. public class TheDeleteAssetsMethod
  580. {
  581. readonly IGitHubClient _github;
  582. readonly RepositoryContext _context;
  583. readonly IReleasesClient _releaseClient;
  584. public TheDeleteAssetsMethod()
  585. {
  586. _github = Helper.GetAuthenticatedClient();
  587. _releaseClient = _github.Repository.Release;
  588. _context = _github.CreateRepositoryContext("public-repo").Result;
  589. }
  590. [IntegrationTest]
  591. public async Task CanDeleteAsset()
  592. {
  593. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  594. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  595. var stream = Helper.LoadFixture("hello-world.txt");
  596. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  597. var result = await _releaseClient.UploadAsset(release, newAsset);
  598. var asset = await _releaseClient.GetAsset(_context.RepositoryOwner, _context.RepositoryName, result.Id);
  599. Assert.NotNull(asset);
  600. await _releaseClient.DeleteAsset(_context.RepositoryOwner, _context.RepositoryName, result.Id);
  601. Assert.ThrowsAsync<NotFoundException>(async () => await _releaseClient.DeleteAsset(_context.RepositoryOwner, _context.RepositoryName, result.Id));
  602. }
  603. [IntegrationTest]
  604. public async Task CanDeleteAssetWithRepositoryId()
  605. {
  606. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  607. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  608. var stream = Helper.LoadFixture("hello-world.txt");
  609. var newAsset = new ReleaseAssetUpload("hello-world.txt", "text/plain", stream, null);
  610. var result = await _releaseClient.UploadAsset(release, newAsset);
  611. var asset = await _releaseClient.GetAsset(_context.Repository.Id, result.Id);
  612. Assert.NotNull(asset);
  613. Assert.ThrowsAsync<NotFoundException>(async () => await _releaseClient.DeleteAsset(_context.Repository.Id, result.Id));
  614. }
  615. }
  616. public class TheDeleteMethod
  617. {
  618. readonly IGitHubClient _github;
  619. readonly RepositoryContext _context;
  620. readonly IReleasesClient _releaseClient;
  621. public TheDeleteMethod()
  622. {
  623. _github = Helper.GetAuthenticatedClient();
  624. _releaseClient = _github.Repository.Release;
  625. _context = _github.CreateRepositoryContext("public-repo").Result;
  626. }
  627. [IntegrationTest]
  628. public async Task CanDelete()
  629. {
  630. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  631. var release = await _releaseClient.Create(_context.RepositoryOwner, _context.RepositoryName, releaseWithNoUpdate);
  632. var createdRelease = await _releaseClient.Get(_context.RepositoryOwner, _context.RepositoryName, release.Id);
  633. Assert.NotNull(createdRelease);
  634. await _releaseClient.Delete(_context.RepositoryOwner, _context.RepositoryName, createdRelease.Id);
  635. Assert.ThrowsAsync<NotFoundException>(async ()=> await _releaseClient.Get(_context.RepositoryOwner, _context.RepositoryName, createdRelease.Id));
  636. }
  637. [IntegrationTest]
  638. public async Task CanDeleteWithRepositoryId()
  639. {
  640. var releaseWithNoUpdate = new NewRelease("0.1") { Draft = true };
  641. var release = await _releaseClient.Create(_context.Repository.Id, releaseWithNoUpdate);
  642. var createdRelease = await _releaseClient.Get(_context.Repository.Id, release.Id);
  643. Assert.NotNull(createdRelease);
  644. await _releaseClient.Delete(_context.Repository.Id, createdRelease.Id);
  645. Assert.ThrowsAsync<NotFoundException>(async () => await _releaseClient.Get(_context.Repository.Id, createdRelease.Id));
  646. }
  647. }
  648. }