PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/Octokit.Tests.Integration/Clients/RepositoriesClientTests.cs

https://gitlab.com/WoomyNightClub/GitHub-API-.NET
C# | 1392 lines | 1072 code | 316 blank | 4 comment | 16 complexity | 14beafe5b9adc34ce1e24b2bad882c57 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Octokit;
  7. using Octokit.Tests.Integration;
  8. using Octokit.Tests.Integration.Helpers;
  9. using Xunit;
  10. public class RepositoriesClientTests
  11. {
  12. public class TheCreateMethodForUser
  13. {
  14. [IntegrationTest]
  15. public async Task CreatesANewPublicRepository()
  16. {
  17. var github = Helper.GetAuthenticatedClient();
  18. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  19. using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
  20. {
  21. var createdRepository = context.Repository;
  22. var cloneUrl = string.Format("https://github.com/{0}/{1}.git", Helper.UserName, repoName);
  23. Assert.Equal(repoName, createdRepository.Name);
  24. Assert.False(createdRepository.Private);
  25. Assert.Equal(cloneUrl, createdRepository.CloneUrl);
  26. var repository = await github.Repository.Get(Helper.UserName, repoName);
  27. Assert.Equal(repoName, repository.Name);
  28. Assert.Null(repository.Description);
  29. Assert.False(repository.Private);
  30. Assert.True(repository.HasDownloads);
  31. Assert.True(repository.HasIssues);
  32. Assert.True(repository.HasWiki);
  33. Assert.Null(repository.Homepage);
  34. Assert.NotNull(repository.DefaultBranch);
  35. }
  36. }
  37. [PaidAccountTest]
  38. public async Task CreatesANewPrivateRepository()
  39. {
  40. var github = Helper.GetAuthenticatedClient();
  41. var userDetails = await github.User.Current();
  42. if (userDetails.Plan.PrivateRepos == 0)
  43. {
  44. throw new Exception("Test cannot complete, account is on free plan");
  45. }
  46. var repoName = Helper.MakeNameWithTimestamp("private-repo");
  47. using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { Private = true }))
  48. {
  49. var createdRepository = context.Repository;
  50. Assert.True(createdRepository.Private);
  51. var repository = await github.Repository.Get(Helper.UserName, repoName);
  52. Assert.True(repository.Private);
  53. }
  54. }
  55. [IntegrationTest]
  56. public async Task CreatesARepositoryWithoutDownloads()
  57. {
  58. var github = Helper.GetAuthenticatedClient();
  59. var repoName = Helper.MakeNameWithTimestamp("repo-without-downloads");
  60. var newRepository = new NewRepository(repoName) { HasDownloads = false };
  61. using (var context = await github.CreateRepositoryContext(newRepository))
  62. {
  63. var createdRepository = context.Repository;
  64. Assert.False(createdRepository.HasDownloads);
  65. var repository = await github.Repository.Get(Helper.UserName, repoName);
  66. Assert.False(repository.HasDownloads);
  67. }
  68. }
  69. [IntegrationTest]
  70. public async Task CreatesARepositoryWithoutIssues()
  71. {
  72. var github = Helper.GetAuthenticatedClient();
  73. var repoName = Helper.MakeNameWithTimestamp("repo-without-issues");
  74. using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { HasIssues = false }))
  75. {
  76. var createdRepository = context.Repository;
  77. Assert.False(createdRepository.HasIssues);
  78. var repository = await github.Repository.Get(Helper.UserName, repoName);
  79. Assert.False(repository.HasIssues);
  80. }
  81. }
  82. [IntegrationTest]
  83. public async Task CreatesARepositoryWithoutAWiki()
  84. {
  85. var github = Helper.GetAuthenticatedClient();
  86. var repoName = Helper.MakeNameWithTimestamp("repo-without-wiki");
  87. using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { HasWiki = false }))
  88. {
  89. var createdRepository = context.Repository;
  90. Assert.False(createdRepository.HasWiki);
  91. var repository = await github.Repository.Get(Helper.UserName, repoName);
  92. Assert.False(repository.HasWiki);
  93. }
  94. }
  95. [IntegrationTest]
  96. public async Task CreatesARepositoryWithADescription()
  97. {
  98. var github = Helper.GetAuthenticatedClient();
  99. var repoName = Helper.MakeNameWithTimestamp("repo-with-description");
  100. using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { Description = "theDescription" }))
  101. {
  102. var createdRepository = context.Repository;
  103. Assert.Equal("theDescription", createdRepository.Description);
  104. var repository = await github.Repository.Get(Helper.UserName, repoName);
  105. Assert.Equal("theDescription", repository.Description);
  106. }
  107. }
  108. [IntegrationTest]
  109. public async Task CreatesARepositoryWithAHomepage()
  110. {
  111. var github = Helper.GetAuthenticatedClient();
  112. var repoName = Helper.MakeNameWithTimestamp("repo-with-homepage");
  113. using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { Homepage = "http://aUrl.to/nowhere" }))
  114. {
  115. var createdRepository = context.Repository;
  116. Assert.Equal("http://aUrl.to/nowhere", createdRepository.Homepage);
  117. var repository = await github.Repository.Get(Helper.UserName, repoName);
  118. Assert.Equal("http://aUrl.to/nowhere", repository.Homepage);
  119. }
  120. }
  121. [IntegrationTest]
  122. public async Task CreatesARepositoryWithAutoInit()
  123. {
  124. var github = Helper.GetAuthenticatedClient();
  125. var repoName = Helper.MakeNameWithTimestamp("repo-with-autoinit");
  126. using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { AutoInit = true }))
  127. {
  128. var createdRepository = context.Repository;
  129. // TODO: Once the contents API has been added, check the actual files in the created repo
  130. Assert.Equal(repoName, createdRepository.Name);
  131. var repository = await github.Repository.Get(Helper.UserName, repoName);
  132. Assert.Equal(repoName, repository.Name);
  133. }
  134. }
  135. [IntegrationTest]
  136. public async Task CreatesARepositoryWithAGitignoreTemplate()
  137. {
  138. var github = Helper.GetAuthenticatedClient();
  139. var repoName = Helper.MakeNameWithTimestamp("repo-with-gitignore");
  140. var newRepository = new NewRepository(repoName)
  141. {
  142. AutoInit = true,
  143. GitignoreTemplate = "VisualStudio"
  144. };
  145. using (var context = await github.CreateRepositoryContext(newRepository))
  146. {
  147. var createdRepository = context.Repository;
  148. // TODO: Once the contents API has been added, check the actual files in the created repo
  149. Assert.Equal(repoName, createdRepository.Name);
  150. var repository = await github.Repository.Get(Helper.UserName, repoName);
  151. Assert.Equal(repoName, repository.Name);
  152. }
  153. }
  154. [IntegrationTest]
  155. public async Task ThrowsInvalidGitIgnoreExceptionForInvalidTemplateNames()
  156. {
  157. var github = Helper.GetAuthenticatedClient();
  158. var repoName = Helper.MakeNameWithTimestamp("repo-with-gitignore");
  159. var newRepository = new NewRepository(repoName)
  160. {
  161. AutoInit = true,
  162. GitignoreTemplate = "visualstudio"
  163. };
  164. var thrown = await Assert.ThrowsAsync<InvalidGitIgnoreTemplateException>(
  165. () => github.CreateRepositoryContext(newRepository));
  166. Assert.NotNull(thrown);
  167. }
  168. [IntegrationTest]
  169. public async Task ThrowsRepositoryExistsExceptionForExistingRepository()
  170. {
  171. var github = Helper.GetAuthenticatedClient();
  172. var repoName = Helper.MakeNameWithTimestamp("existing-repo");
  173. var repository = new NewRepository(repoName);
  174. using (var context = await github.CreateRepositoryContext(repository))
  175. {
  176. var createdRepository = context.Repository;
  177. var message = string.Format(CultureInfo.InvariantCulture, "There is already a repository named '{0}' for the current account.", repoName);
  178. var thrown = await Assert.ThrowsAsync<RepositoryExistsException>(
  179. () => github.Repository.Create(repository));
  180. Assert.NotNull(thrown);
  181. Assert.Equal(repoName, thrown.RepositoryName);
  182. Assert.Equal(message, thrown.Message);
  183. Assert.False(thrown.OwnerIsOrganization);
  184. }
  185. }
  186. [PaidAccountTest(Skip="Paid plans now have unlimited repositories. We shouldn't test this now.")]
  187. public async Task ThrowsPrivateRepositoryQuotaExceededExceptionWhenOverQuota()
  188. {
  189. var github = Helper.GetAuthenticatedClient();
  190. var userDetails = await github.User.Current();
  191. var freePrivateSlots = userDetails.Plan.PrivateRepos - userDetails.OwnedPrivateRepos;
  192. if (userDetails.Plan.PrivateRepos == 0)
  193. {
  194. throw new Exception("Test cannot complete, account is on free plan");
  195. }
  196. var createRepoTasks =
  197. Enumerable.Range(0, (int)freePrivateSlots)
  198. .Select(x =>
  199. {
  200. var repoName = Helper.MakeNameWithTimestamp("private-repo-" + x);
  201. var repository = new NewRepository(repoName) { Private = true };
  202. return github.Repository.Create(repository);
  203. });
  204. var createdRepositories = await Task.WhenAll(createRepoTasks);
  205. try
  206. {
  207. await Assert.ThrowsAsync<PrivateRepositoryQuotaExceededException>(
  208. () => github.Repository.Create(new NewRepository("x-private") { Private = true }));
  209. }
  210. finally
  211. {
  212. var deleteRepos = createdRepositories
  213. .Select(repo => github.Repository.Delete(repo.Owner.Login, repo.Name));
  214. Task.WhenAll(deleteRepos).Wait();
  215. }
  216. }
  217. }
  218. public class TheCreateMethodForOrganization
  219. {
  220. [OrganizationTest]
  221. public async Task CreatesANewPublicRepository()
  222. {
  223. var github = Helper.GetAuthenticatedClient();
  224. var repoName = Helper.MakeNameWithTimestamp("public-org-repo");
  225. using (var context = await github.CreateRepositoryContext(Helper.Organization, new NewRepository(repoName)))
  226. {
  227. var createdRepository = context.Repository;
  228. var cloneUrl = string.Format("https://github.com/{0}/{1}.git", Helper.Organization, repoName);
  229. Assert.Equal(repoName, createdRepository.Name);
  230. Assert.False(createdRepository.Private);
  231. Assert.Equal(cloneUrl, createdRepository.CloneUrl);
  232. var repository = await github.Repository.Get(Helper.Organization, repoName);
  233. Assert.Equal(repoName, repository.Name);
  234. Assert.Null(repository.Description);
  235. Assert.False(repository.Private);
  236. Assert.True(repository.HasDownloads);
  237. Assert.True(repository.HasIssues);
  238. Assert.True(repository.HasWiki);
  239. Assert.Null(repository.Homepage);
  240. }
  241. }
  242. [OrganizationTest]
  243. public async Task ThrowsRepositoryExistsExceptionForExistingRepository()
  244. {
  245. var github = Helper.GetAuthenticatedClient();
  246. var repoName = Helper.MakeNameWithTimestamp("existing-org-repo");
  247. var repository = new NewRepository(repoName);
  248. using (var context = await github.CreateRepositoryContext(Helper.Organization, repository))
  249. {
  250. var createdRepository = context.Repository;
  251. var repositoryUrl = string.Format(CultureInfo.InvariantCulture, "https://github.com/{0}/{1}", Helper.Organization, repository.Name);
  252. var message = string.Format(CultureInfo.InvariantCulture, "There is already a repository named '{0}' in the organization '{1}'.", repository.Name, Helper.Organization);
  253. var thrown = await Assert.ThrowsAsync<RepositoryExistsException>(
  254. () => github.Repository.Create(Helper.Organization, repository));
  255. Assert.NotNull(thrown);
  256. Assert.Equal(repoName, thrown.RepositoryName);
  257. Assert.Equal(message, thrown.Message);
  258. Assert.True(thrown.OwnerIsOrganization);
  259. Assert.Equal(Helper.Organization, thrown.Organization);
  260. Assert.Equal(repositoryUrl, thrown.ExistingRepositoryWebUrl.ToString());
  261. }
  262. }
  263. // TODO: Add a test for the team_id param once an overload that takes an organization is added
  264. }
  265. public class TheEditMethod : IDisposable
  266. {
  267. Repository _repository;
  268. [IntegrationTest]
  269. public async Task UpdatesName()
  270. {
  271. var github = Helper.GetAuthenticatedClient();
  272. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  273. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  274. var updatedName = Helper.MakeNameWithTimestamp("updated-repo");
  275. var update = new RepositoryUpdate { Name = updatedName };
  276. _repository = await github.Repository.Edit(Helper.UserName, repoName, update);
  277. Assert.Equal(update.Name, _repository.Name);
  278. }
  279. [IntegrationTest]
  280. public async Task UpdatesNameWithRepositoryId()
  281. {
  282. var github = Helper.GetAuthenticatedClient();
  283. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  284. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  285. var updatedName = Helper.MakeNameWithTimestamp("updated-repo");
  286. var update = new RepositoryUpdate { Name = updatedName };
  287. _repository = await github.Repository.Edit(_repository.Id, update);
  288. Assert.Equal(update.Name, _repository.Name);
  289. }
  290. [IntegrationTest]
  291. public async Task UpdatesDescription()
  292. {
  293. var github = Helper.GetAuthenticatedClient();
  294. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  295. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  296. var update = new RepositoryUpdate { Name = repoName, Description = "Updated description" };
  297. _repository = await github.Repository.Edit(Helper.UserName, repoName, update);
  298. Assert.Equal("Updated description", _repository.Description);
  299. }
  300. [IntegrationTest]
  301. public async Task UpdatesDescriptionWithRepositoryId()
  302. {
  303. var github = Helper.GetAuthenticatedClient();
  304. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  305. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  306. var update = new RepositoryUpdate { Name = repoName, Description = "Updated description" };
  307. _repository = await github.Repository.Edit(_repository.Id, update);
  308. Assert.Equal("Updated description", _repository.Description);
  309. }
  310. [IntegrationTest]
  311. public async Task UpdatesHomepage()
  312. {
  313. var github = Helper.GetAuthenticatedClient();
  314. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  315. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  316. var update = new RepositoryUpdate { Name = repoName, Homepage = "http://aUrl.to/nowhere" };
  317. _repository = await github.Repository.Edit(Helper.UserName, repoName, update);
  318. Assert.Equal("http://aUrl.to/nowhere", _repository.Homepage);
  319. }
  320. [IntegrationTest]
  321. public async Task UpdatesHomepageWithRepositoryId()
  322. {
  323. var github = Helper.GetAuthenticatedClient();
  324. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  325. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  326. var update = new RepositoryUpdate { Name = repoName, Homepage = "http://aUrl.to/nowhere" };
  327. _repository = await github.Repository.Edit(_repository.Id, update);
  328. Assert.Equal("http://aUrl.to/nowhere", _repository.Homepage);
  329. }
  330. [PaidAccountTest]
  331. public async Task UpdatesPrivate()
  332. {
  333. var github = Helper.GetAuthenticatedClient();
  334. var userDetails = await github.User.Current();
  335. if (userDetails.Plan.PrivateRepos == 0)
  336. {
  337. throw new Exception("Test cannot complete, account is on free plan");
  338. }
  339. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  340. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  341. var update = new RepositoryUpdate { Name = repoName, Private = true };
  342. _repository = await github.Repository.Edit(Helper.UserName, repoName, update);
  343. Assert.Equal(true, _repository.Private);
  344. }
  345. [PaidAccountTest]
  346. public async Task UpdatesPrivateWithRepositoryId()
  347. {
  348. var github = Helper.GetAuthenticatedClient();
  349. var userDetails = await github.User.Current();
  350. if (userDetails.Plan.PrivateRepos == 0)
  351. {
  352. throw new Exception("Test cannot complete, account is on free plan");
  353. }
  354. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  355. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  356. var update = new RepositoryUpdate { Name = repoName, Private = true };
  357. _repository = await github.Repository.Edit(_repository.Id, update);
  358. Assert.Equal(true, _repository.Private);
  359. }
  360. [IntegrationTest]
  361. public async Task UpdatesHasDownloads()
  362. {
  363. var github = Helper.GetAuthenticatedClient();
  364. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  365. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  366. var update = new RepositoryUpdate { Name = repoName, HasDownloads = false };
  367. _repository = await github.Repository.Edit(Helper.UserName, repoName, update);
  368. Assert.Equal(false, _repository.HasDownloads);
  369. }
  370. [IntegrationTest]
  371. public async Task UpdatesHasDownloadsWithRepositoryId()
  372. {
  373. var github = Helper.GetAuthenticatedClient();
  374. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  375. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  376. var update = new RepositoryUpdate { Name = repoName, HasDownloads = false };
  377. _repository = await github.Repository.Edit(_repository.Id, update);
  378. Assert.Equal(false, _repository.HasDownloads);
  379. }
  380. [IntegrationTest]
  381. public async Task UpdatesHasIssues()
  382. {
  383. var github = Helper.GetAuthenticatedClient();
  384. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  385. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  386. var update = new RepositoryUpdate { Name = repoName, HasIssues = false };
  387. _repository = await github.Repository.Edit(Helper.UserName, repoName, update);
  388. Assert.Equal(false, _repository.HasIssues);
  389. }
  390. [IntegrationTest]
  391. public async Task UpdatesHasIssuesWithRepositoryId()
  392. {
  393. var github = Helper.GetAuthenticatedClient();
  394. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  395. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  396. var update = new RepositoryUpdate { Name = repoName, HasIssues = false };
  397. _repository = await github.Repository.Edit(_repository.Id, update);
  398. Assert.Equal(false, _repository.HasIssues);
  399. }
  400. [IntegrationTest]
  401. public async Task UpdatesHasWiki()
  402. {
  403. var github = Helper.GetAuthenticatedClient();
  404. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  405. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  406. var update = new RepositoryUpdate { Name = repoName, HasWiki = false };
  407. _repository = await github.Repository.Edit(Helper.UserName, repoName, update);
  408. Assert.Equal(false, _repository.HasWiki);
  409. }
  410. [IntegrationTest]
  411. public async Task UpdatesHasWikiWithRepositoryId()
  412. {
  413. var github = Helper.GetAuthenticatedClient();
  414. var repoName = Helper.MakeNameWithTimestamp("public-repo");
  415. _repository = await github.Repository.Create(new NewRepository(repoName) { AutoInit = true });
  416. var update = new RepositoryUpdate { Name = repoName, HasWiki = false };
  417. _repository = await github.Repository.Edit(_repository.Id, update);
  418. Assert.Equal(false, _repository.HasWiki);
  419. }
  420. public void Dispose()
  421. {
  422. Helper.DeleteRepo(Helper.GetAuthenticatedClient().Connection, _repository);
  423. }
  424. }
  425. public class TheDeleteMethod
  426. {
  427. [IntegrationTest]
  428. public async Task DeletesRepository()
  429. {
  430. var github = Helper.GetAuthenticatedClient();
  431. var repoName = Helper.MakeNameWithTimestamp("repo-to-delete");
  432. await github.Repository.Create(new NewRepository(repoName));
  433. await github.Repository.Delete(Helper.UserName, repoName);
  434. }
  435. [IntegrationTest]
  436. public async Task DeletesRepositoryWithRepositoryId()
  437. {
  438. var github = Helper.GetAuthenticatedClient();
  439. var repoName = Helper.MakeNameWithTimestamp("repo-to-delete");
  440. var repository = await github.Repository.Create(new NewRepository(repoName));
  441. await github.Repository.Delete(repository.Id);
  442. }
  443. }
  444. public class TheGetMethod
  445. {
  446. [IntegrationTest]
  447. public async Task ReturnsSpecifiedRepository()
  448. {
  449. var github = Helper.GetAuthenticatedClient();
  450. var repository = await github.Repository.Get("haacked", "seegit");
  451. Assert.Equal("https://github.com/Haacked/SeeGit.git", repository.CloneUrl);
  452. Assert.False(repository.Private);
  453. Assert.False(repository.Fork);
  454. Assert.Equal(AccountType.User, repository.Owner.Type);
  455. }
  456. [IntegrationTest]
  457. public async Task ReturnsSpecifiedRepositoryWithRepositoryId()
  458. {
  459. var github = Helper.GetAuthenticatedClient();
  460. var repository = await github.Repository.Get(3622414);
  461. Assert.Equal("https://github.com/Haacked/SeeGit.git", repository.CloneUrl);
  462. Assert.False(repository.Private);
  463. Assert.False(repository.Fork);
  464. Assert.Equal(AccountType.User, repository.Owner.Type);
  465. }
  466. [IntegrationTest]
  467. public async Task ReturnsOrganizationRepository()
  468. {
  469. var github = Helper.GetAuthenticatedClient();
  470. var repository = await github.Repository.Get("octokit", "octokit.net");
  471. Assert.Equal("https://github.com/octokit/octokit.net.git", repository.CloneUrl);
  472. Assert.False(repository.Private);
  473. Assert.False(repository.Fork);
  474. Assert.Equal(AccountType.Organization, repository.Owner.Type);
  475. }
  476. [IntegrationTest]
  477. public async Task ReturnsRenamedRepository()
  478. {
  479. var github = Helper.GetAuthenticatedClient();
  480. var repository = await github.Repository.Get("michael-wolfenden", "Polly");
  481. Assert.Equal("https://github.com/App-vNext/Polly.git", repository.CloneUrl);
  482. Assert.False(repository.Private);
  483. Assert.False(repository.Fork);
  484. //Assert.Equal(AccountType.User, repository.Owner.Type);
  485. repository = await github.Repository.Get("fsprojects", "FSharp.Atom");
  486. Assert.Equal("https://github.com/ionide/ionide-atom-fsharp.git", repository.CloneUrl);
  487. Assert.False(repository.Private);
  488. Assert.False(repository.Fork);
  489. repository = await github.Repository.Get("cabbage89", "Orchard.Weixin");
  490. Assert.Equal("https://github.com/cabbage89/Orchard.WeChat.git", repository.CloneUrl);
  491. Assert.False(repository.Private);
  492. Assert.False(repository.Fork);
  493. }
  494. [IntegrationTest]
  495. public async Task ReturnsOrganizationRepositoryWithRepositoryId()
  496. {
  497. var github = Helper.GetAuthenticatedClient();
  498. var repository = await github.Repository.Get(7528679);
  499. Assert.Equal("https://github.com/octokit/octokit.net.git", repository.CloneUrl);
  500. Assert.False(repository.Private);
  501. Assert.False(repository.Fork);
  502. Assert.Equal(AccountType.Organization, repository.Owner.Type);
  503. }
  504. [IntegrationTest]
  505. public async Task ReturnsForkedRepository()
  506. {
  507. var github = Helper.GetAuthenticatedClient();
  508. var repository = await github.Repository.Get("haacked", "libgit2sharp");
  509. Assert.Equal("https://github.com/Haacked/libgit2sharp.git", repository.CloneUrl);
  510. Assert.True(repository.Fork);
  511. }
  512. [IntegrationTest]
  513. public async Task ReturnsForkedRepositoryWithRepositoryId()
  514. {
  515. var github = Helper.GetAuthenticatedClient();
  516. var repository = await github.Repository.Get(4550038);
  517. Assert.Equal("https://github.com/Haacked/libgit2sharp.git", repository.CloneUrl);
  518. Assert.True(repository.Fork);
  519. }
  520. }
  521. public class TheGetAllPublicMethod
  522. {
  523. [IntegrationTest(Skip = "Takes too long to run.")]
  524. public async Task ReturnsAllPublicRepositories()
  525. {
  526. var github = Helper.GetAuthenticatedClient();
  527. var repositories = await github.Repository.GetAllPublic();
  528. Assert.True(repositories.Count > 80);
  529. }
  530. [IntegrationTest(Skip = "Takes too long to run.")]
  531. public async Task ReturnsAllPublicRepositoriesSinceLastSeen()
  532. {
  533. var github = Helper.GetAuthenticatedClient();
  534. var request = new PublicRepositoryRequest(32732250);
  535. var repositories = await github.Repository.GetAllPublic(request);
  536. Assert.NotNull(repositories);
  537. Assert.True(repositories.Any());
  538. Assert.Equal(32732252, repositories[0].Id);
  539. Assert.False(repositories[0].Private);
  540. Assert.Equal("zad19", repositories[0].Name);
  541. }
  542. }
  543. public class TheGetAllForOrgMethod
  544. {
  545. [IntegrationTest]
  546. public async Task ReturnsRepositoriesForOrganization()
  547. {
  548. var github = Helper.GetAuthenticatedClient();
  549. var options = new ApiOptions
  550. {
  551. PageSize = 20,
  552. StartPage = 1,
  553. PageCount = 1
  554. };
  555. var repositories = await github.Repository.GetAllForOrg("github", options);
  556. Assert.Equal(20, repositories.Count);
  557. }
  558. [IntegrationTest]
  559. public async Task GetsPagesOfRepositories()
  560. {
  561. var github = Helper.GetAuthenticatedClient();
  562. var firstPageOptions = new ApiOptions
  563. {
  564. PageSize = 5,
  565. StartPage = 1,
  566. PageCount = 1
  567. };
  568. var firstPage = await github.Repository.GetAllForOrg("github", firstPageOptions);
  569. var secondPageOptions = new ApiOptions
  570. {
  571. PageSize = 5,
  572. StartPage = 2,
  573. PageCount = 1
  574. };
  575. var secondPage = await github.Repository.GetAllForOrg("github", secondPageOptions);
  576. Assert.Equal(5, firstPage.Count);
  577. Assert.Equal(5, secondPage.Count);
  578. Assert.NotEqual(firstPage[0].Name, secondPage[0].Name);
  579. Assert.NotEqual(firstPage[1].Name, secondPage[1].Name);
  580. Assert.NotEqual(firstPage[2].Name, secondPage[2].Name);
  581. Assert.NotEqual(firstPage[3].Name, secondPage[3].Name);
  582. Assert.NotEqual(firstPage[4].Name, secondPage[4].Name);
  583. }
  584. }
  585. public class TheGetAllForUserMethod
  586. {
  587. [IntegrationTest]
  588. public async Task ReturnsRepositoriesForOrganization()
  589. {
  590. var github = Helper.GetAuthenticatedClient();
  591. var options = new ApiOptions
  592. {
  593. PageSize = 20,
  594. StartPage = 1,
  595. PageCount = 1
  596. };
  597. var repositories = await github.Repository.GetAllForUser("shiftkey", options);
  598. Assert.Equal(20, repositories.Count);
  599. }
  600. [IntegrationTest]
  601. public async Task GetsPagesOfRepositories()
  602. {
  603. var github = Helper.GetAuthenticatedClient();
  604. var firstPageOptions = new ApiOptions
  605. {
  606. PageSize = 5,
  607. StartPage = 1,
  608. PageCount = 1
  609. };
  610. var firstPage = await github.Repository.GetAllForUser("shiftkey", firstPageOptions);
  611. var secondPageOptions = new ApiOptions
  612. {
  613. PageSize = 5,
  614. StartPage = 2,
  615. PageCount = 1
  616. };
  617. var secondPage = await github.Repository.GetAllForUser("shiftkey", secondPageOptions);
  618. Assert.Equal(5, firstPage.Count);
  619. Assert.Equal(5, secondPage.Count);
  620. Assert.NotEqual(firstPage[0].Name, secondPage[0].Name);
  621. Assert.NotEqual(firstPage[1].Name, secondPage[1].Name);
  622. Assert.NotEqual(firstPage[2].Name, secondPage[2].Name);
  623. Assert.NotEqual(firstPage[3].Name, secondPage[3].Name);
  624. Assert.NotEqual(firstPage[4].Name, secondPage[4].Name);
  625. }
  626. }
  627. public class TheGetAllContributorsMethod
  628. {
  629. [IntegrationTest]
  630. public async Task GetsContributors()
  631. {
  632. var github = Helper.GetAuthenticatedClient();
  633. var contributors = await github.Repository.GetAllContributors("octokit", "octokit.net");
  634. Assert.True(contributors.Any(c => c.Login == "pmacn"));
  635. }
  636. [IntegrationTest]
  637. public async Task GetsContributorsWithRepositoryId()
  638. {
  639. var github = Helper.GetAuthenticatedClient();
  640. var contributors = await github.Repository.GetAllContributors(7528679);
  641. Assert.True(contributors.Any(c => c.Login == "pmacn"));
  642. }
  643. [IntegrationTest]
  644. public async Task ReturnsCorrectCountOfContributorsWithoutStart()
  645. {
  646. var github = Helper.GetAuthenticatedClient();
  647. var options = new ApiOptions
  648. {
  649. PageSize = 5,
  650. PageCount = 1
  651. };
  652. var contributors = await github.Repository.GetAllContributors("octokit", "octokit.net", options);
  653. Assert.Equal(5, contributors.Count);
  654. }
  655. [IntegrationTest]
  656. public async Task ReturnsCorrectCountOfContributorsWithoutStartWithRepositoryId()
  657. {
  658. var github = Helper.GetAuthenticatedClient();
  659. var options = new ApiOptions
  660. {
  661. PageSize = 5,
  662. PageCount = 1
  663. };
  664. var contributors = await github.Repository.GetAllContributors(7528679, options);
  665. Assert.Equal(5, contributors.Count);
  666. }
  667. [IntegrationTest]
  668. public async Task ReturnsCorrectCountOfContributorsWithStart()
  669. {
  670. var github = Helper.GetAuthenticatedClient();
  671. var options = new ApiOptions
  672. {
  673. PageSize = 5,
  674. PageCount = 1,
  675. StartPage = 2
  676. };
  677. var contributors = await github.Repository.GetAllContributors("octokit", "octokit.net", options);
  678. Assert.Equal(5, contributors.Count);
  679. }
  680. [IntegrationTest]
  681. public async Task ReturnsCorrectCountOfContributorsWithStartWithRepositoryId()
  682. {
  683. var github = Helper.GetAuthenticatedClient();
  684. var options = new ApiOptions
  685. {
  686. PageSize = 5,
  687. PageCount = 1,
  688. StartPage = 2
  689. };
  690. var contributors = await github.Repository.GetAllContributors(7528679, options);
  691. Assert.Equal(5, contributors.Count);
  692. }
  693. [IntegrationTest]
  694. public async Task GetsPagesOfContributors()
  695. {
  696. var github = Helper.GetAuthenticatedClient();
  697. var firstPageOptions = new ApiOptions
  698. {
  699. PageSize = 5,
  700. StartPage = 1,
  701. PageCount = 1
  702. };
  703. var firstPage = await github.Repository.GetAllContributors("octokit", "octokit.net", firstPageOptions);
  704. var secondPageOptions = new ApiOptions
  705. {
  706. PageSize = 5,
  707. StartPage = 2,
  708. PageCount = 1
  709. };
  710. var secondPage = await github.Repository.GetAllContributors("octokit", "octokit.net", secondPageOptions);
  711. Assert.Equal(5, firstPage.Count);
  712. Assert.Equal(5, secondPage.Count);
  713. Assert.NotEqual(firstPage[0].Login, secondPage[0].Login);
  714. Assert.NotEqual(firstPage[1].Login, secondPage[1].Login);
  715. Assert.NotEqual(firstPage[2].Login, secondPage[2].Login);
  716. Assert.NotEqual(firstPage[3].Login, secondPage[3].Login);
  717. Assert.NotEqual(firstPage[4].Login, secondPage[4].Login);
  718. }
  719. [IntegrationTest]
  720. public async Task GetsPagesOfContributorsWithRepositoryId()
  721. {
  722. var github = Helper.GetAuthenticatedClient();
  723. var firstPageOptions = new ApiOptions
  724. {
  725. PageSize = 5,
  726. StartPage = 1,
  727. PageCount = 1
  728. };
  729. var firstPage = await github.Repository.GetAllContributors(7528679, firstPageOptions);
  730. var secondPageOptions = new ApiOptions
  731. {
  732. PageSize = 5,
  733. StartPage = 2,
  734. PageCount = 1
  735. };
  736. var secondPage = await github.Repository.GetAllContributors(7528679, secondPageOptions);
  737. Assert.Equal(5, firstPage.Count);
  738. Assert.Equal(5, secondPage.Count);
  739. Assert.NotEqual(firstPage[0].Login, secondPage[0].Login);
  740. Assert.NotEqual(firstPage[1].Login, secondPage[1].Login);
  741. Assert.NotEqual(firstPage[2].Login, secondPage[2].Login);
  742. Assert.NotEqual(firstPage[3].Login, secondPage[3].Login);
  743. Assert.NotEqual(firstPage[4].Login, secondPage[4].Login);
  744. }
  745. [IntegrationTest]
  746. public async Task GetsContributorsIncludeAnonymous()
  747. {
  748. var github = Helper.GetAuthenticatedClient();
  749. var contributors = await github.Repository.GetAllContributors("ruby", "ruby", true);
  750. Assert.True(contributors.Any(c => c.Type == "Anonymous"));
  751. }
  752. [IntegrationTest]
  753. public async Task GetsContributorsIncludeAnonymousWithRepositoryId()
  754. {
  755. var github = Helper.GetAuthenticatedClient();
  756. var contributors = await github.Repository.GetAllContributors(538746, true);
  757. Assert.True(contributors.Any(c => c.Type == "Anonymous"));
  758. }
  759. [IntegrationTest]
  760. public async Task ReturnsCorrectCountOfContributorsWithoutStartIncludeAnonymous()
  761. {
  762. var github = Helper.GetAuthenticatedClient();
  763. var options = new ApiOptions
  764. {
  765. PageSize = 5,
  766. PageCount = 1
  767. };
  768. var contributors = await github.Repository.GetAllContributors("ruby", "ruby", true, options);
  769. Assert.Equal(5, contributors.Count);
  770. }
  771. [IntegrationTest]
  772. public async Task ReturnsCorrectCountOfContributorsWithoutStartWithRepositoryIdIncludeAnonymous()
  773. {
  774. var github = Helper.GetAuthenticatedClient();
  775. var options = new ApiOptions
  776. {
  777. PageSize = 5,
  778. PageCount = 1
  779. };
  780. var contributors = await github.Repository.GetAllContributors(538746, true, options);
  781. Assert.Equal(5, contributors.Count);
  782. }
  783. [IntegrationTest]
  784. public async Task ReturnsCorrectCountOfContributorsWithStartIncludeAnonymous()
  785. {
  786. var github = Helper.GetAuthenticatedClient();
  787. var options = new ApiOptions
  788. {
  789. PageSize = 5,
  790. PageCount = 1,
  791. StartPage = 2
  792. };
  793. var contributors = await github.Repository.GetAllContributors("ruby", "ruby", true, options);
  794. Assert.Equal(5, contributors.Count);
  795. }
  796. [IntegrationTest]
  797. public async Task ReturnsCorrectCountOfContributorsWithStartWithRepositoryIdIncludeAnonymous()
  798. {
  799. var github = Helper.GetAuthenticatedClient();
  800. var options = new ApiOptions
  801. {
  802. PageSize = 5,
  803. PageCount = 1,
  804. StartPage = 2
  805. };
  806. var contributors = await github.Repository.GetAllContributors(538746, true, options);
  807. Assert.Equal(5, contributors.Count);
  808. }
  809. [IntegrationTest]
  810. public async Task GetsPagesOfContributorsIncludeAnonymous()
  811. {
  812. var github = Helper.GetAuthenticatedClient();
  813. var firstPageOptions = new ApiOptions
  814. {
  815. PageSize = 5,
  816. StartPage = 1,
  817. PageCount = 1
  818. };
  819. var firstPage = await github.Repository.GetAllContributors("ruby", "ruby", true, firstPageOptions);
  820. var secondPageOptions = new ApiOptions
  821. {
  822. PageSize = 5,
  823. StartPage = 2,
  824. PageCount = 1
  825. };
  826. var secondPage = await github.Repository.GetAllContributors("ruby", "ruby", true, secondPageOptions);
  827. Assert.Equal(5, firstPage.Count);
  828. Assert.Equal(5, secondPage.Count);
  829. Assert.NotEqual(firstPage[0].Login, secondPage[0].Login);
  830. Assert.NotEqual(firstPage[1].Login, secondPage[1].Login);
  831. Assert.NotEqual(firstPage[2].Login, secondPage[2].Login);
  832. Assert.NotEqual(firstPage[3].Login, secondPage[3].Login);
  833. Assert.NotEqual(firstPage[4].Login, secondPage[4].Login);
  834. }
  835. [IntegrationTest]
  836. public async Task GetsPagesOfContributorsWithRepositoryIdIncludeAnonymous()
  837. {
  838. var github = Helper.GetAuthenticatedClient();
  839. var firstPageOptions = new ApiOptions
  840. {
  841. PageSize = 5,
  842. StartPage = 1,
  843. PageCount = 1
  844. };
  845. var firstPage = await github.Repository.GetAllContributors(538746, true, firstPageOptions);
  846. var secondPageOptions = new ApiOptions
  847. {
  848. PageSize = 5,
  849. StartPage = 2,
  850. PageCount = 1
  851. };
  852. var secondPage = await github.Repository.GetAllContributors(538746, true, secondPageOptions);
  853. Assert.Equal(5, firstPage.Count);
  854. Assert.Equal(5, secondPage.Count);
  855. Assert.NotEqual(firstPage[0].Login, secondPage[0].Login);
  856. Assert.NotEqual(firstPage[1].Login, secondPage[1].Login);
  857. Assert.NotEqual(firstPage[2].Login, secondPage[2].Login);
  858. Assert.NotEqual(firstPage[3].Login, secondPage[3].Login);
  859. Assert.NotEqual(firstPage[4].Login, secondPage[4].Login);
  860. }
  861. }
  862. public class TheGetAllForCurrentMethod
  863. {
  864. [IntegrationTest]
  865. public async Task CanRetrieveResults()
  866. {
  867. var gitHubClient = Helper.GetAuthenticatedClient();
  868. var repositories = await gitHubClient.Repository.GetAllForCurrent();
  869. Assert.NotEmpty(repositories);
  870. }
  871. [IntegrationTest]
  872. public async Task GetsPagesOfRepositories()
  873. {
  874. var gitHubClient = Helper.GetAuthenticatedClient();
  875. var firstPageOptions = new ApiOptions
  876. {
  877. PageSize = 5,
  878. StartPage = 1,
  879. PageCount = 1
  880. };
  881. var firstPage = await gitHubClient.Repository.GetAllForCurrent(firstPageOptions);
  882. var secondPageOptions = new ApiOptions
  883. {
  884. PageSize = 5,
  885. StartPage = 2,
  886. PageCount = 1
  887. };
  888. var secondPage = await gitHubClient.Repository.GetAllForCurrent(secondPageOptions);
  889. Assert.Equal(5, firstPage.Count);
  890. Assert.Equal(5, secondPage.Count);
  891. Assert.NotEqual(firstPage[0].Name, secondPage[0].Name);
  892. Assert.NotEqual(firstPage[1].Name, secondPage[1].Name);
  893. Assert.NotEqual(firstPage[2].Name, secondPage[2].Name);
  894. Assert.NotEqual(firstPage[3].Name, secondPage[3].Name);
  895. Assert.NotEqual(firstPage[4].Name, secondPage[4].Name);
  896. }
  897. [IntegrationTest]
  898. public async Task CanSortResults()
  899. {
  900. var github = Helper.GetAuthenticatedClient();
  901. var request = new RepositoryRequest
  902. {
  903. Sort = RepositorySort.Created
  904. };
  905. var reposByCreated = await github.Repository.GetAllForCurrent(request);
  906. request.Sort = RepositorySort.FullName;
  907. var reposByFullName = await github.Repository.GetAllForCurrent(request);
  908. Assert.NotEmpty(reposByCreated);
  909. Assert.NotEmpty(reposByFullName);
  910. Assert.NotEqual(reposByCreated, reposByFullName);
  911. }
  912. [IntegrationTest]
  913. public async Task CanChangeSortDirection()
  914. {
  915. var github = Helper.GetAuthenticatedClient();
  916. var request = new RepositoryRequest
  917. {
  918. Direction = SortDirection.Ascending
  919. };
  920. var reposAscending = await github.Repository.GetAllForCurrent(request);
  921. request.Direction = SortDirection.Ascending;
  922. var reposDescending = await github.Repository.GetAllForCurrent(request);
  923. Assert.NotEmpty(reposAscending);
  924. Assert.NotEmpty(reposDescending);
  925. Assert.NotEqual(reposAscending, reposDescending);
  926. }
  927. }
  928. public class TheGetAllLanguagesMethod
  929. {
  930. [IntegrationTest]
  931. public async Task GetsLanguages()
  932. {
  933. var github = Helper.GetAuthenticatedClient();
  934. var languages = await github.Repository.GetAllLanguages("octokit", "octokit.net");
  935. Assert.NotEmpty(languages);
  936. Assert.True(languages.Any(l => l.Name == "C#"));
  937. }
  938. [IntegrationTest]
  939. public async Task GetsLanguagesWithRepositoryId()
  940. {
  941. var github = Helper.GetAuthenticatedClient();
  942. var languages = await github.Repository.GetAllLanguages(7528679);
  943. Assert.NotEmpty(languages);
  944. Assert.True(languages.Any(l => l.Name == "C#"));
  945. }
  946. }
  947. public class TheGetAllTagsMethod
  948. {
  949. [IntegrationTest]
  950. public async Task GetsTags()
  951. {
  952. var github = Helper.GetAuthenticatedClient();
  953. var tags = await github.Repository.GetAllTags("octokit", "octokit.net");
  954. Assert.True(tags.Any(t => t.Name == "v0.1.0"));
  955. }
  956. [IntegrationTest]
  957. public async Task GetsTagsWithRepositoryId()
  958. {
  959. var github = Helper.GetAuthenticatedClient();
  960. var tags = await github.Repository.GetAllTags(7528679);
  961. Assert.True(tags.Any(t => t.Name == "v0.1.0"));
  962. }
  963. [IntegrationTest]
  964. public async Task ReturnsCorrectCountOfTagsWithoutStart()
  965. {
  966. var github = Helper.GetAuthenticatedClient();
  967. var options = new ApiOptions
  968. {
  969. PageSize = 5,
  970. PageCount = 1
  971. };
  972. var tags = await github.Repository.GetAllTags("octokit", "octokit.net", options);
  973. Assert.Equal(5, tags.Count);
  974. }
  975. [IntegrationTest]
  976. public async Task ReturnsCorrectCountOfTagsWithoutStartWithRepositoryId()
  977. {
  978. var github = Helper.GetAuthenticatedClient();
  979. var options = new ApiOptions
  980. {
  981. PageSize = 5,
  982. PageCount = 1
  983. };
  984. var tags = await github.Repository.GetAllTags(7528679, options);
  985. Assert.Equal(5, tags.Count);
  986. }
  987. [IntegrationTest]
  988. public async Task ReturnsCorrectCountOfTagsWithStart()
  989. {
  990. var github = Helper.GetAuthenticatedClient();
  991. var options = new ApiOptions
  992. {
  993. PageSize = 5,
  994. PageCount = 1,
  995. StartPage = 2
  996. };
  997. var tags = await github.Repository.GetAllTags("octokit", "octokit.net", options);
  998. Assert.Equal(5, tags.Count);
  999. }
  1000. [IntegrationTest]
  1001. public async Task ReturnsCorrectCountOfTagsWithStartWithRepositoryId()
  1002. {
  1003. var github = Helper.GetAuthenticatedClient();
  1004. var options = new ApiOptions
  1005. {
  1006. PageSize = 5,
  1007. PageCount = 1,
  1008. StartPage = 2
  1009. };
  1010. var tags = await github.Repository.GetAllTags(7528679, options);
  1011. Assert.Equal(5, tags.Count);
  1012. }
  1013. [IntegrationTest]
  1014. public async Task GetsPagesOfTags()
  1015. {
  1016. var github = Helper.GetAuthenticatedClient();
  1017. var firstPageOptions = new ApiOptions
  1018. {
  1019. PageSize = 5,
  1020. StartPage = 1,
  1021. PageCount = 1
  1022. };
  1023. var firstPage = await github.Repository.GetAllTags("octokit", "octokit.net", firstPageOptions);
  1024. var secondPageOptions = new ApiOptions
  1025. {
  1026. PageSize = 5,
  1027. StartPage = 2,
  1028. PageCount = 1
  1029. };
  1030. var secondPage = await github.Repository.GetAllTags("octokit", "octokit.net", secondPageOptions);
  1031. Assert.Equal(5, firstPage.Count);
  1032. Assert.Equal(5, secondPage.Count);
  1033. Assert.NotEqual(firstPage[0].Name, secondPage[0].Name);
  1034. Assert.NotEqual(firstPage[1].Name, secondPage[1].Name);
  1035. Assert.NotEqual(firstPage[2].Name, secondPage[2].Name);
  1036. Assert.NotEqual(firstPage[3].Name, secondPage[3].Name);
  1037. Assert.NotEqual(firstPage[4].Name, secondPage[4].Name);
  1038. }
  1039. [IntegrationTest]
  1040. public async Task GetsPagesOfTagsWithRepositoryId()
  1041. {
  1042. var github = Helper.GetAuthenticatedClient();
  1043. var firstPageOptions = new ApiOptions
  1044. {
  1045. PageSize = 5,
  1046. StartPage = 1,
  1047. PageCount = 1
  1048. };
  1049. var firstPage = await github.Repository.GetAllTags(7528679, firstPageOptions);
  1050. var secondPageOptions = new ApiOptions
  1051. {
  1052. PageSize = 5,
  1053. StartPage = 2,
  1054. PageCount = 1
  1055. };
  1056. var secondPage = await github.Repository.GetAllTags(7528679, secondPageOptions);
  1057. Assert.Equal(5, firstPage.Count);
  1058. Assert.Equal(5, secondPage.Count);
  1059. Assert.NotEqual(firstPage[0].Name, secondPage[0].Name);
  1060. Assert.NotEqual(firstPage[1].Name, secondPage[1].Name);
  1061. Assert.NotEqual(firstPage[2].Name, secondPage[2].Name);
  1062. Assert.NotEqual(firstPage[3].Name, secondPage[3].Name);
  1063. Assert.NotEqual(firstPage[4].Name, secondPage[4].Name);
  1064. }
  1065. }
  1066. public class TheGetAllBranchesMethod
  1067. {
  1068. [IntegrationTest]
  1069. public async Task GetsAllBranches()
  1070. {
  1071. var github = Helper.GetAuthenticatedClient();
  1072. var branches = await github.Repository.GetAllBranches("octokit", "octokit.net");
  1073. Assert.NotEmpty(branches);
  1074. }
  1075. [IntegrationTest]
  1076. public