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

/Octokit.Tests.Integration/Clients/RepositoryContentsClientTests.cs

https://gitlab.com/WoomyNightClub/GitHub-API-.NET
C# | 579 lines | 467 code | 112 blank | 0 comment | 0 complexity | a298abfcefa4a57b743261a53a853297 MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Octokit.Tests.Integration.Helpers;
  5. using Xunit;
  6. namespace Octokit.Tests.Integration.Clients
  7. {
  8. public class RepositoryContentsClientTests
  9. {
  10. public class TheGetReadmeMethod
  11. {
  12. [IntegrationTest]
  13. public async Task ReturnsReadmeForSeeGit()
  14. {
  15. var github = Helper.GetAuthenticatedClient();
  16. var readme = await github.Repository.Content.GetReadme("octokit", "octokit.net");
  17. Assert.Equal("README.md", readme.Name);
  18. string readMeHtml = await readme.GetHtmlContent();
  19. Assert.True(readMeHtml.StartsWith("<div class="));
  20. Assert.Contains(@"data-path=""README.md"" id=""file""", readMeHtml);
  21. Assert.Contains("Octokit - GitHub API Client Library for .NET", readMeHtml);
  22. }
  23. [IntegrationTest]
  24. public async Task ReturnsReadmeForSeeGitWithRepositoryId()
  25. {
  26. var github = Helper.GetAuthenticatedClient();
  27. var readme = await github.Repository.Content.GetReadme(7528679);
  28. Assert.Equal("README.md", readme.Name);
  29. string readMeHtml = await readme.GetHtmlContent();
  30. Assert.True(readMeHtml.StartsWith("<div class="));
  31. Assert.Contains(@"data-path=""README.md"" id=""file""", readMeHtml);
  32. Assert.Contains("Octokit - GitHub API Client Library for .NET", readMeHtml);
  33. }
  34. [IntegrationTest]
  35. public async Task ReturnsReadmeHtmlForSeeGit()
  36. {
  37. var github = Helper.GetAuthenticatedClient();
  38. var readmeHtml = await github.Repository.Content.GetReadmeHtml("octokit", "octokit.net");
  39. Assert.True(readmeHtml.StartsWith("<div class="));
  40. Assert.Contains(@"data-path=""README.md"" id=""readme""", readmeHtml);
  41. Assert.Contains("Octokit - GitHub API Client Library for .NET", readmeHtml);
  42. }
  43. [IntegrationTest]
  44. public async Task ReturnsReadmeHtmlForSeeGitWithRepositoryId()
  45. {
  46. var github = Helper.GetAuthenticatedClient();
  47. var readmeHtml = await github.Repository.Content.GetReadmeHtml(7528679);
  48. Assert.True(readmeHtml.StartsWith("<div class="));
  49. Assert.Contains(@"data-path=""README.md"" id=""readme""", readmeHtml);
  50. Assert.Contains("Octokit - GitHub API Client Library for .NET", readmeHtml);
  51. }
  52. }
  53. public class TheGetContentsMethod
  54. {
  55. [IntegrationTest]
  56. public async Task GetsFileContent()
  57. {
  58. var github = Helper.GetAuthenticatedClient();
  59. var contents = await github
  60. .Repository
  61. .Content
  62. .GetAllContents("octokit", "octokit.net", "Octokit.Reactive/ObservableGitHubClient.cs");
  63. Assert.Equal(1, contents.Count);
  64. Assert.Equal(ContentType.File, contents.First().Type);
  65. Assert.Equal(new Uri("https://github.com/octokit/octokit.net/blob/master/Octokit.Reactive/ObservableGitHubClient.cs"), contents.First().HtmlUrl);
  66. }
  67. [IntegrationTest]
  68. public async Task GetsFileContentWithRepositoryId()
  69. {
  70. var github = Helper.GetAuthenticatedClient();
  71. var contents = await github
  72. .Repository
  73. .Content
  74. .GetAllContents(7528679, "Octokit.Reactive/ObservableGitHubClient.cs");
  75. Assert.Equal(1, contents.Count);
  76. Assert.Equal(ContentType.File, contents.First().Type);
  77. Assert.Equal(new Uri("https://github.com/octokit/octokit.net/blob/master/Octokit.Reactive/ObservableGitHubClient.cs"), contents.First().HtmlUrl);
  78. }
  79. [IntegrationTest]
  80. public async Task GetsDirectoryContent()
  81. {
  82. var github = Helper.GetAuthenticatedClient();
  83. var contents = await github
  84. .Repository
  85. .Content
  86. .GetAllContents("octokit", "octokit.net", "Octokit");
  87. Assert.True(contents.Count > 2);
  88. Assert.Equal(ContentType.Dir, contents.First().Type);
  89. }
  90. [IntegrationTest]
  91. public async Task GetsDirectoryContentWithRepositoryId()
  92. {
  93. var github = Helper.GetAuthenticatedClient();
  94. var contents = await github
  95. .Repository
  96. .Content
  97. .GetAllContents(7528679, "Octokit");
  98. Assert.True(contents.Count > 2);
  99. Assert.Equal(ContentType.Dir, contents.First().Type);
  100. }
  101. [IntegrationTest]
  102. public async Task GetsFileContentWholeRepo()
  103. {
  104. var github = Helper.GetAuthenticatedClient();
  105. var contents = await github
  106. .Repository
  107. .Content
  108. .GetAllContents("octocat", "Spoon-Knife");
  109. Assert.Equal(3, contents.Count);
  110. Assert.Equal(ContentType.File, contents.First().Type);
  111. Assert.Equal(new Uri("https://github.com/octocat/Spoon-Knife/blob/master/README.md"), contents.First().HtmlUrl);
  112. }
  113. [IntegrationTest]
  114. public async Task GetsFileContentWholeRepoWithRepositoryId()
  115. {
  116. var github = Helper.GetAuthenticatedClient();
  117. var contents = await github
  118. .Repository
  119. .Content
  120. .GetAllContents(1300192);
  121. Assert.Equal(3, contents.Count);
  122. Assert.Equal(ContentType.File, contents.First().Type);
  123. Assert.Equal(new Uri("https://github.com/octocat/Spoon-Knife/blob/master/README.md"), contents.First().HtmlUrl);
  124. }
  125. [IntegrationTest]
  126. public async Task GetsDirectoryContentWholeRepo()
  127. {
  128. var github = Helper.GetAuthenticatedClient();
  129. var contents = await github
  130. .Repository
  131. .Content
  132. .GetAllContents("octocat", "octocat.github.io");
  133. Assert.NotEmpty(contents);
  134. }
  135. [IntegrationTest]
  136. public async Task GetsDirectoryContentWholeRepoWithRepositoryId()
  137. {
  138. var github = Helper.GetAuthenticatedClient();
  139. var contents = await github
  140. .Repository
  141. .Content
  142. .GetAllContents(17881631);
  143. Assert.NotEmpty(contents);
  144. }
  145. }
  146. public class TheGetContentsByRefMethod
  147. {
  148. [IntegrationTest]
  149. public async Task GetsFileContent()
  150. {
  151. var github = Helper.GetAuthenticatedClient();
  152. var contents = await github
  153. .Repository
  154. .Content
  155. .GetAllContentsByRef("octokit", "octokit.net", "Octokit.Reactive/ObservableGitHubClient.cs", "master");
  156. Assert.Equal(1, contents.Count);
  157. Assert.Equal(ContentType.File, contents.First().Type);
  158. Assert.Equal(new Uri("https://github.com/octokit/octokit.net/blob/master/Octokit.Reactive/ObservableGitHubClient.cs"), contents.First().HtmlUrl);
  159. }
  160. [IntegrationTest]
  161. public async Task GetsFileContentWithRepositoryId()
  162. {
  163. var github = Helper.GetAuthenticatedClient();
  164. var contents = await github
  165. .Repository
  166. .Content
  167. .GetAllContentsByRef(7528679, "Octokit.Reactive/ObservableGitHubClient.cs", "master");
  168. Assert.Equal(1, contents.Count);
  169. Assert.Equal(ContentType.File, contents.First().Type);
  170. Assert.Equal(new Uri("https://github.com/octokit/octokit.net/blob/master/Octokit.Reactive/ObservableGitHubClient.cs"), contents.First().HtmlUrl);
  171. }
  172. [IntegrationTest]
  173. public async Task GetsDirectoryContent()
  174. {
  175. var github = Helper.GetAuthenticatedClient();
  176. var contents = await github
  177. .Repository
  178. .Content
  179. .GetAllContentsByRef("octokit", "octokit.net", "Octokit", "master");
  180. Assert.True(contents.Count > 2);
  181. Assert.Equal(ContentType.Dir, contents.First().Type);
  182. }
  183. [IntegrationTest]
  184. public async Task GetsDirectoryContentWithRepositoryId()
  185. {
  186. var github = Helper.GetAuthenticatedClient();
  187. var contents = await github
  188. .Repository
  189. .Content
  190. .GetAllContentsByRef(7528679, "Octokit", "master");
  191. Assert.True(contents.Count > 2);
  192. Assert.Equal(ContentType.Dir, contents.First().Type);
  193. }
  194. [IntegrationTest]
  195. public async Task GetsFileContentWholeRepo()
  196. {
  197. var github = Helper.GetAuthenticatedClient();
  198. var contents = await github
  199. .Repository
  200. .Content
  201. .GetAllContentsByRef("octocat", "Spoon-Knife", "master");
  202. Assert.Equal(3, contents.Count);
  203. Assert.Equal(ContentType.File, contents.First().Type);
  204. Assert.Equal(new Uri("https://github.com/octocat/Spoon-Knife/blob/master/README.md"), contents.First().HtmlUrl);
  205. }
  206. [IntegrationTest]
  207. public async Task GetsFileContentWholeRepoWithRepositoryId()
  208. {
  209. var github = Helper.GetAuthenticatedClient();
  210. var contents = await github
  211. .Repository
  212. .Content
  213. .GetAllContentsByRef(1300192, "master");
  214. Assert.Equal(3, contents.Count);
  215. Assert.Equal(ContentType.File, contents.First().Type);
  216. Assert.Equal(new Uri("https://github.com/octocat/Spoon-Knife/blob/master/README.md"), contents.First().HtmlUrl);
  217. }
  218. [IntegrationTest]
  219. public async Task GetsDirectoryContentWholeRepo()
  220. {
  221. var github = Helper.GetAuthenticatedClient();
  222. var contents = await github
  223. .Repository
  224. .Content
  225. .GetAllContentsByRef("octocat", "octocat.github.io", "master");
  226. Assert.NotEmpty(contents);
  227. }
  228. [IntegrationTest]
  229. public async Task GetsDirectoryContentWholeRepoWithRepositoryId()
  230. {
  231. var github = Helper.GetAuthenticatedClient();
  232. var contents = await github
  233. .Repository
  234. .Content
  235. .GetAllContentsByRef(17881631, "master");
  236. Assert.NotEmpty(contents);
  237. }
  238. }
  239. [IntegrationTest]
  240. public async Task CrudTest()
  241. {
  242. var client = Helper.GetAuthenticatedClient();
  243. var fixture = client.Repository.Content;
  244. var repoName = Helper.MakeNameWithTimestamp("source-repo");
  245. using (var context = await client.CreateRepositoryContext(new NewRepository(repoName) { AutoInit = true }))
  246. {
  247. var repository = context.Repository;
  248. var file = await fixture.CreateFile(
  249. repository.Owner.Login,
  250. repository.Name,
  251. "somefile.txt",
  252. new CreateFileRequest("Test commit", "Some Content"));
  253. Assert.Equal("somefile.txt", file.Content.Name);
  254. var contents = await fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt");
  255. string fileSha = contents.First().Sha;
  256. Assert.Equal("Some Content", contents.First().Content);
  257. var update = await fixture.UpdateFile(
  258. repository.Owner.Login,
  259. repository.Name,
  260. "somefile.txt",
  261. new UpdateFileRequest("Updating file", "New Content", fileSha));
  262. Assert.Equal("somefile.txt", update.Content.Name);
  263. contents = await fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt");
  264. Assert.Equal("New Content", contents.First().Content);
  265. fileSha = contents.First().Sha;
  266. await fixture.DeleteFile(
  267. repository.Owner.Login,
  268. repository.Name,
  269. "somefile.txt",
  270. new DeleteFileRequest("Deleted file", fileSha));
  271. await Assert.ThrowsAsync<NotFoundException>(
  272. () => fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt"));
  273. }
  274. }
  275. [IntegrationTest]
  276. public async Task CrudTestWithRepositoryId()
  277. {
  278. var client = Helper.GetAuthenticatedClient();
  279. var fixture = client.Repository.Content;
  280. var repoName = Helper.MakeNameWithTimestamp("source-repo");
  281. using (var context = await client.CreateRepositoryContext(new NewRepository(repoName) { AutoInit = true }))
  282. {
  283. var repository = context.Repository;
  284. var file = await fixture.CreateFile(
  285. repository.Id,
  286. "somefile.txt",
  287. new CreateFileRequest("Test commit", "Some Content"));
  288. Assert.Equal("somefile.txt", file.Content.Name);
  289. var contents = await fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt");
  290. string fileSha = contents.First().Sha;
  291. Assert.Equal("Some Content", contents.First().Content);
  292. var update = await fixture.UpdateFile(
  293. repository.Id,
  294. "somefile.txt",
  295. new UpdateFileRequest("Updating file", "New Content", fileSha));
  296. Assert.Equal("somefile.txt", update.Content.Name);
  297. contents = await fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt");
  298. Assert.Equal("New Content", contents.First().Content);
  299. fileSha = contents.First().Sha;
  300. await fixture.DeleteFile(
  301. repository.Id,
  302. "somefile.txt",
  303. new DeleteFileRequest("Deleted file", fileSha));
  304. await Assert.ThrowsAsync<NotFoundException>(
  305. () => fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt"));
  306. }
  307. }
  308. [IntegrationTest]
  309. public async Task CrudTestWithNamedBranch()
  310. {
  311. var client = Helper.GetAuthenticatedClient();
  312. var fixture = client.Repository.Content;
  313. var repoName = Helper.MakeNameWithTimestamp("source-repo");
  314. var branchName = "other-branch";
  315. using (var context = await client.CreateRepositoryContext(new NewRepository(repoName) { AutoInit = true }))
  316. {
  317. var repository = context.Repository;
  318. var master = await client.Git.Reference.Get(Helper.UserName, repository.Name, "heads/master");
  319. await client.Git.Reference.Create(Helper.UserName, repository.Name, new NewReference("refs/heads/" + branchName, master.Object.Sha));
  320. var file = await fixture.CreateFile(
  321. repository.Owner.Login,
  322. repository.Name,
  323. "somefile.txt",
  324. new CreateFileRequest("Test commit", "Some Content", branchName));
  325. Assert.Equal("somefile.txt", file.Content.Name);
  326. var contents = await fixture.GetAllContentsByRef(repository.Owner.Login, repository.Name, "somefile.txt", branchName);
  327. string fileSha = contents.First().Sha;
  328. Assert.Equal("Some Content", contents.First().Content);
  329. var update = await fixture.UpdateFile(
  330. repository.Owner.Login,
  331. repository.Name,
  332. "somefile.txt",
  333. new UpdateFileRequest("Updating file", "New Content", fileSha, branchName));
  334. Assert.Equal("somefile.txt", update.Content.Name);
  335. contents = await fixture.GetAllContentsByRef(repository.Owner.Login, repository.Name, "somefile.txt", branchName);
  336. Assert.Equal("New Content", contents.First().Content);
  337. fileSha = contents.First().Sha;
  338. await fixture.DeleteFile(
  339. repository.Owner.Login,
  340. repository.Name,
  341. "somefile.txt",
  342. new DeleteFileRequest("Deleted file", fileSha, branchName));
  343. await Assert.ThrowsAsync<NotFoundException>(
  344. () => fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt"));
  345. }
  346. }
  347. [IntegrationTest]
  348. public async Task CrudTestWithNamedBranchWithRepositoryId()
  349. {
  350. var client = Helper.GetAuthenticatedClient();
  351. var fixture = client.Repository.Content;
  352. var repoName = Helper.MakeNameWithTimestamp("source-repo");
  353. var branchName = "other-branch";
  354. using (var context = await client.CreateRepositoryContext(new NewRepository(repoName) { AutoInit = true }))
  355. {
  356. var repository = context.Repository;
  357. var master = await client.Git.Reference.Get(Helper.UserName, repository.Name, "heads/master");
  358. await client.Git.Reference.Create(Helper.UserName, repository.Name, new NewReference("refs/heads/" + branchName, master.Object.Sha));
  359. var file = await fixture.CreateFile(
  360. repository.Id,
  361. "somefile.txt",
  362. new CreateFileRequest("Test commit", "Some Content", branchName));
  363. Assert.Equal("somefile.txt", file.Content.Name);
  364. var contents = await fixture.GetAllContentsByRef(repository.Owner.Login, repository.Name, "somefile.txt", branchName);
  365. string fileSha = contents.First().Sha;
  366. Assert.Equal("Some Content", contents.First().Content);
  367. var update = await fixture.UpdateFile(
  368. repository.Id,
  369. "somefile.txt",
  370. new UpdateFileRequest("Updating file", "New Content", fileSha, branchName));
  371. Assert.Equal("somefile.txt", update.Content.Name);
  372. contents = await fixture.GetAllContentsByRef(repository.Owner.Login, repository.Name, "somefile.txt", branchName);
  373. Assert.Equal("New Content", contents.First().Content);
  374. fileSha = contents.First().Sha;
  375. await fixture.DeleteFile(
  376. repository.Id,
  377. "somefile.txt",
  378. new DeleteFileRequest("Deleted file", fileSha, branchName));
  379. await Assert.ThrowsAsync<NotFoundException>(
  380. () => fixture.GetAllContents(repository.Owner.Login, repository.Name, "somefile.txt"));
  381. }
  382. }
  383. public class TheGetArchiveMethod
  384. {
  385. [IntegrationTest(Skip = "this will probably take too long")]
  386. public async Task GetsArchiveAsTarball()
  387. {
  388. var github = Helper.GetAuthenticatedClient();
  389. var archive = await github
  390. .Repository
  391. .Content
  392. .GetArchive("octokit", "octokit.net");
  393. Assert.NotEmpty(archive);
  394. }
  395. [IntegrationTest]
  396. public async Task GetsArchiveAsTarballWithRepositoryId()
  397. {
  398. var github = Helper.GetAuthenticatedClient();
  399. var archive = await github
  400. .Repository
  401. .Content
  402. .GetArchive(1296269); // octocat/Hello-World repo
  403. Assert.NotEmpty(archive);
  404. }
  405. [IntegrationTest]
  406. public async Task GetsArchiveAsZipball()
  407. {
  408. var github = Helper.GetAuthenticatedClient();
  409. var archive = await github
  410. .Repository
  411. .Content
  412. .GetArchive("octocat", "Hello-World", ArchiveFormat.Zipball);
  413. Assert.NotEmpty(archive);
  414. }
  415. [IntegrationTest]
  416. public async Task GetsArchiveAsZipballWithRepositoryId()
  417. {
  418. var github = Helper.GetAuthenticatedClient();
  419. var archive = await github
  420. .Repository
  421. .Content
  422. .GetArchive(1296269, ArchiveFormat.Zipball); // octocat/Hello-World repo
  423. Assert.NotEmpty(archive);
  424. }
  425. [IntegrationTest]
  426. public async Task GetsArchiveForReleaseBranchAsTarball()
  427. {
  428. var github = Helper.GetAuthenticatedClient();
  429. var archive = await github
  430. .Repository
  431. .Content
  432. .GetArchive("octocat", "Hello-World", ArchiveFormat.Tarball, "master");
  433. Assert.NotEmpty(archive);
  434. }
  435. [IntegrationTest]
  436. public async Task GetsArchiveForReleaseBranchAsTarballWithRepositoryId()
  437. {
  438. var github = Helper.GetAuthenticatedClient();
  439. var archive = await github
  440. .Repository
  441. .Content
  442. .GetArchive(1296269, ArchiveFormat.Tarball, "master"); // octocat/Hello-World repo
  443. Assert.NotEmpty(archive);
  444. }
  445. [IntegrationTest]
  446. public async Task GetsArchiveForReleaseBranchAsTarballWithTimeout()
  447. {
  448. var github = Helper.GetAuthenticatedClient();
  449. var archive = await github
  450. .Repository
  451. .Content
  452. .GetArchive("octocat", "Hello-World", ArchiveFormat.Tarball, "master", TimeSpan.FromMinutes(60));
  453. Assert.NotEmpty(archive);
  454. }
  455. [IntegrationTest]
  456. public async Task GetsArchiveForReleaseBranchAsTarballWithTimeoutWithRepositoryId()
  457. {
  458. var github = Helper.GetAuthenticatedClient();
  459. var archive = await github
  460. .Repository
  461. .Content
  462. .GetArchive(1296269, ArchiveFormat.Tarball, "master", TimeSpan.FromMinutes(60)); // octocat/Hello-World repo
  463. Assert.NotEmpty(archive);
  464. }
  465. }
  466. }
  467. }